Riwayat revisi (1 pembaruan, terakhir pada 31 Aug 2026)
Catatan perubahan yang dilakukan pada artikel ini. Jika versi sebelumnya telah diarsipkan, versi itu tetap dapat dibaca melalui tautan permanen dengan DOI.
- Diterjemahkan ulang sebagai terjemahan lengkap dari naskah Jepang. Versi bahasa Indonesia sebelumnya adalah ringkasan yang hanya memindahkan sebagian naskah, sehingga bagian, tabel, gambar Mermaid, keterangan gambar, dan FAQ tidak ada. Semuanya dipulihkan sesuai naskah Jepang, dan klaim teknisnya sama dengan versi Jepang.
- Publikasi pertama
Mengutip artikel ini(DOI (arsip terdaftar): 10.5281/zenodo.22176224)
DOI di bawah mengarah ke versi yang telah diarsipkan sebelumnya dan mungkin berbeda dari teks saat ini. Gunakan URL halaman ini untuk merujuk teks saat ini.
Go Komura (2026). Proksi internal perusahaan dan aplikasi Windows — merapikan resolusi proksi WinINET, WinHTTP, dan .NET. KomuraSoft LLC. https://comcomponent.com/id/blog/windows-proxy-wininet-winhttp-dotnet/
- DOI (arsip terdaftar)
- 10.5281/zenodo.22176224
- DOI (versi terakhir yang didaftarkan)
- 10.5281/zenodo.22176225
“Peramban bisa membuka situs eksternal, tetapi hanya aplikasi bisnis yang tidak mencapai API eksternal.” “Berjalan di mesin pengembangan, tetapi kehabisan waktu di jaringan pelanggan.” “Komunikasi berhasil jika dijalankan secara manual, lalu gagal begitu dijadikan layanan Windows.” — Ketika aplikasi bisnis dijalankan di lingkungan yang punya proksi internal, konsultasi semacam ini termasuk yang paling rutin.
Dalam kebanyakan kasus penyebabnya bukan gangguan di server proksi, dan bukan bug aplikasi. Di Windows, apa yang disebut “pengaturan proksi” terpecah ke beberapa jalur, dan pengaturan mana yang dibaca siapa berbeda menurut aplikasi (menurut tumpukan HTTP yang dipakai) dan menurut akun yang menjalankan proses — ketidaksesuaian itulah intinya. Pengaturan yang dibaca peramban, yang dibaca layanan, dan yang dibaca HttpClient .NET masing-masing bisa menjadi hal yang berbeda. Begitu struktur itu dipahami, isolasi masalah “berjalan di peramban, tetapi…” menjadi jauh lebih cepat.
Artikel ini ditujukan untuk staf TI perusahaan kecil dan menengah serta pengembang aplikasi Windows. Isinya merangkai, dalam satu gambar, tiga jalur pengaturan proksi — WinINET, WinHTTP, dan variabel lingkungan — konfigurasi otomatis PAC dan WPAD, perbedaan resolusi proksi antara .NET Framework dan .NET (Core dan sesudahnya), proksi berautentikasi (407), inspeksi TLS, hingga prosedur isolasi praktis. Pola pembuatan HttpClient dan desain batas waktu sendiri dibahas di “Jangan bungkus HttpClient dengan using”, jadi artikel ini berfokus pada resolusi proksi.
1. Kesimpulan dulu
- Pengaturan proksi Windows bukan satu hal; ada setidaknya tiga jalur. (1) Pengaturan WinINET per pengguna (halaman “Proksi” di aplikasi Pengaturan = Opsi Internet lama), (2) pengaturan mesin WinHTTP (
netsh winhttp), dan (3) variabel lingkunganHTTP_PROXY/HTTPS_PROXY. Mana yang dibaca diputuskan di sisi aplikasi.12 - “Proksi” yang terlihat di aplikasi Pengaturan adalah pengaturan per pengguna WinINET. Peramban dan aplikasi interaktif membacanya; layanan Windows tidak. WinINET tidak didukung untuk dipakai di layanan; pemakaian layanan adalah tugas WinHTTP.13
- Penyebab paling sering untuk “berjalan secara manual, tetapi gagal sebagai layanan” adalah perbedaan akun yang menjalankan proses. LocalSystem dan akun layanan tidak melihat proksi per pengguna yang diatur administrator di layarnya sendiri.34
netsh winhttp set proxyadalah pengaturan statis; tidak menangani PAC, deteksi otomatis, atau autentikasi proksi. Jika PAC atau WPAD ingin dikonfigurasi per mesin, yang diperlukan adalah sisinetsh winhttp set advproxy.42- Hasil PAC berubah per URL. Fungsi
FindProxyForURLdi berkas PAC menerima URL dan host, lalu mengembalikan daftar proksi atau koneksi langsung (DIRECT). “Situs itu tembus, tetapi hanya API ini yang gagal” kadang disebabkan cabang di PAC.56 - HttpClient pada .NET (Core dan sesudahnya) menginisialisasi proksi bawaan dalam urutan variabel lingkungan → pengaturan proksi pengguna Windows. Jika salah satu dari
HTTP_PROXY,HTTPS_PROXY, atauALL_PROXYdidefinisikan, itu diutamakan atas pengaturan OS, sehingga kecelakaan “seseorang meninggalkan variabel lingkungan” bisa terjadi.7 - Bawaan .NET Framework adalah Opsi Internet akun yang sedang menjalankan proses, dan dapat ditimpa dengan
defaultProxydi app.config. Pengaturan berkas konfigurasi diutamakan atas pengaturan sistem.89 - 407 adalah kesalahan autentikasi proksi; itu berbeda dari 401 (autentikasi server). Skemanya mencakup Negotiate, NTLM, Basic, dan di .NET kredensial dikirim dengan
DefaultProxyCredentialsatauWebProxy.UseDefaultCredentials. Perhatikan bahwa di bawah akun layanan, isi “kredensial bawaan” berubah.101112 - Proksi inspeksi TLS baru berdiri sebagai satu paket bersama distribusi sertifikat CA internal. Mesin dan runtime yang belum menerimanya mendapat kesalahan validasi sertifikat. Selesaikan dengan distribusi ke penyimpanan sertifikat, bukan dengan menonaktifkan validasi di aplikasi.134
Dalam satu kalimat: setiap kali dikatakan “pengaturan proksi sudah diperiksa”, selalu bisa disebutkan jalur mana dari tiga itu yang diperiksa, dan dari akun mana — itulah pokok artikel ini.
Pada diagram, garis utuh menunjukkan relasi yang selalu berlaku dan garis putus-putus menunjukkan relasi bersyarat (syaratnya ada pada penjelasan masing-masing relasi di halaman rincian). Daftar lengkap relasi (total 19, beserta bukti dan tingkat kepastian) serta definisi konsep utama dikumpulkan di halaman rincian peta pengetahuan (dalam bahasa Jepang). Data: JSON-LD / Turtle
2. Di Windows ada tiga jalur “pengaturan proksi”
Mulai dari peta keseluruhan. Jalur yang dipakai aplikasi di Windows untuk menemukan proksi internal terpecah ke tiga kelompok berikut.
| Jalur pengaturan | Lokasi pengaturan / perintah | Cakupan | Yang terutama membaca |
|---|---|---|---|
| (1) WinINET (Opsi Internet) | Pengaturan → Jaringan & internet → Proksi, inetcpl.cpl |
Per pengguna (bawaan) | Peramban, aplikasi desktop interaktif, bawaan .NET Framework |
| (2) WinHTTP (pengaturan mesin) | netsh winhttp set proxy / set advproxy |
Mesin | Layanan Windows, sebagian komponen OS |
| (3) Variabel lingkungan | HTTP_PROXY / HTTPS_PROXY / ALL_PROXY / NO_PROXY |
Proses (diwarisi tergantung sumber definisi) | HttpClient pada .NET (Core dan sesudahnya), curl, alat lintas platform seperti Node.js dan Python |
(1) adalah apa yang umumnya dikenali sebagai “pengaturan proksi Windows”; substansinya adalah konfigurasi WinINET. Secara historis itu Opsi Internet Internet Explorer, dan secara bawaan disimpan per pengguna.4
(2) adalah bawaan per mesin untuk konteks seperti layanan, di mana “tidak ada pengguna yang masuk”. (3) terutama adalah konvensi alat yang berasal dari dunia lintas platform; di Windows, .NET (Core dan sesudahnya) serta curl dan sejenisnya juga membacanya.7
Yang penting: jalur mana yang dibaca diputuskan di sisi aplikasi, bukan di sisi pengaturan. Jika aplikasi memakai WinINET secara internal, yang dibaca adalah (1); jika WinHTTP, (2) (atau penetapan khusus aplikasi); jika .NET (Core dan sesudahnya), urutannya (3) lalu (1). Jadi biasanya bukan “pengaturan proksi sudah benar tetapi tetap tidak tersambung”; kenyataannya “jalur yang dibaca aplikasi berbeda dari jalur yang baru saja diperiksa”.
Selain itu, jika kebijakan grup “Atur pengaturan proksi per komputer, bukan per pengguna” diaktifkan, (1) dapat dialihkan ke cakupan mesin dan diterapkan sama ke semua pengguna. Dengan MDM (Intune dan sejenisnya), konfigurasi per perangkat dapat dilakukan lewat NetworkProxy CSP.4
3. WinINET dan WinHTTP — untuk aplikasi interaktif versus untuk layanan
3.1. Perbedaan peran
WinINET dan WinHTTP sama-sama tumpukan klien HTTP bawaan Windows, tetapi skenario pemakaian yang diasumsikan berbeda.
- WinINET: untuk aplikasi desktop interaktif. Secara otomatis mewarisi Opsi Internet pengguna (proksi, cookie, cache kredensial), dan jika perlu dapat menampilkan UI input kredensial. Namun pemakaian di layanan atau proses yang bersifat layanan tidak didukung.1
- WinHTTP: untuk layanan dan sisi server. Mendukung eksekusi di bawah akun layanan, impersonation utas, dan pemisahan sesi; sebagai gantinya tidak berbagi pengaturan peramban, cookie, atau kredensial pengguna. UI juga tidak ditampilkan.3
Pedoman Microsoft sendiri jelas: “pakai WinINET kecuali proses dijalankan di dalam layanan, atau di proses yang bersifat layanan yang membutuhkan pemisahan sesi dan impersonation” — sebaliknya, jika layanan, pakai WinHTTP.1
3.2. Operasi dasar netsh winhttp
Proksi bawaan mesin WinHTTP dioperasikan dengan netsh.2
:: Tampilkan pengaturan proksi WinHTTP saat ini
netsh winhttp show proxy
:: Atur proksi statis (dengan daftar bypass)
netsh winhttp set proxy proxy-server="proxy.example.co.jp:8080" bypass-list="*.example.co.jp;<local>"
:: Impor pengaturan Opsi Internet (WinINET)
netsh winhttp import proxy source=ie
:: Kembalikan ke bawaan (DIRECT)
netsh winhttp reset proxy
Ada dua batasan yang perlu dipegang di sini.
netsh winhttp set proxyadalah pengaturan statis. Deteksi otomatis proksi, penetapan URL PAC, dan autentikasi proksi tidak ditangani.4import proxy source=iehanya menyalin pengaturan statis pada saat dijalankan; perubahan Opsi Internet setelah itu tidak diikuti. Jika konfigurasi per mesin yang mencakup PAC atau deteksi otomatis diperlukan, konfigurasikan pengaturan rinci berformat JSON (Proxy,ProxyBypass,AutoconfigUrl,AutoDetect) dengannetsh winhttp set advproxy.2
3.3. Jebakan paling sering: layanan tidak membaca pengaturan IE pengguna
Pola yang paling banyak muncul di lapangan, jika diurutkan waktunya, seperti ini.
- Pengembang menjalankan alat di PC-nya sendiri → pengaturan proksi per pengguna miliknya (1) berlaku dan berjalan
- Di produksi, aplikasi dijalankan sebagai layanan Windows (Cara membuat dan mengoperasikan layanan Windows) yang menetap sebagai LocalSystem
- Pengaturan yang terlihat dari LocalSystem adalah hal lain (pengaturan per pengguna tidak terlihat, pengaturan mesin WinHTTP belum dikonfigurasi = DIRECT) → mencoba menyambung langsung ke API eksternal lalu kehabisan waktu
Bukan “mesinnya sama tetapi tidak berjalan”; meskipun mesinnya sama, jika akun yang menjalankan berbeda, pengaturan proksi yang terlihat juga berbeda. Untuk proses yang berkomunikasi meski pengguna tidak masuk, cara yang benar adalah menyiapkan pengaturan per mesin dalam bentuk yang benar-benar dibaca tumpukan HTTP proses itu. Untuk aplikasi native dan komponen Windows yang memakai WinHTTP, pengaturan WinHTTP lewat netsh berlaku.4 Sebaliknya, HttpClient pada .NET (Core dan sesudahnya) tidak membaca pengaturan mesin WinHTTP (lihat bab 5), jadi untuk layanan buatan .NET atur variabel lingkungan sistem (HTTPS_PROXY dan sejenisnya), atau tetapkan secara eksplisit dari pengaturan aplikasi lewat HttpClientHandler.Proxy.
Ada juga kecelakaan arah sebaliknya. Jika proksi statis ditetapkan secara tetap ke perangkat yang bolak-balik antara jaringan internal dan eksternal — seperti laptop — dengan netsh winhttp set proxy, di luar kantor proksi itu tidak terjangkau dan komunikasi pun lumpuh total. Anggap pengaturan statis per mesin sebagai cara yang cocok untuk server yang konfigurasi jaringannya tidak berubah.4
4. PAC dan WPAD — isi “konfigurasi otomatis”
4.1. Berkas PAC dan FindProxyForURL
Berkas PAC (Proxy Auto-Configuration) adalah JavaScript (ECMAScript) yang menghitung “proksi mana yang dipakai untuk URL ini”, dan wajib memuat fungsi FindProxyForURL(url, host). Fungsi ini mengembalikan daftar proksi yang harus dipakai, atau menunjukkan dengan nilai kembali khusus (DIRECT) bahwa koneksi langsung tanpa proksi diperbolehkan.5
function FindProxyForURL(url, host) {
// Domain internal dan alamat privat: koneksi langsung
if (dnsDomainIs(host, ".example.co.jp") ||
isInNet(host, "10.0.0.0", "255.0.0.0")) {
return "DIRECT";
}
// Selain itu lewat proksi. Jika yang di depan tidak bisa dipakai, jatuh ke berikutnya
return "PROXY proxy1.example.co.jp:8080; PROXY proxy2.example.co.jp:8080; DIRECT";
}
Dari sini muncul dua konsekuensi praktis.
- Resolusi proksi perlu dilakukan per URL. PAC dapat mengembalikan proksi lain atau koneksi langsung tergantung URL (host), jadi fitur proksi otomatis WinHTTP pun dirancang untuk meneruskan URL tujuan permintaan dan menanyakan ulang setiap kali.6 Fakta bahwa “situs lain terlihat di peramban” bukan bukti bahwa API yang bermasalah memakai jalur yang sama.
- DIRECT adalah instruksi “pergi tanpa proksi”. Jika komunikasi yang seharusnya ke tujuan internal tidak muncul di log proksi, curigai dulu bahwa PAC mengembalikan DIRECT (atau cocok dengan daftar bypass).
4.2. Deteksi otomatis lewat WPAD
Jika “Deteksi pengaturan secara otomatis” diaktifkan, lokasi berkas PAC dicari dengan protokol WPAD (Web Proxy Auto-Discovery). Dalam konfigurasi umum, URL PAC didistribusikan dari DHCP, atau host bernama wpad di-resolve lewat DNS, lalu PAC diunduh dari URL seperti http://wpad/wpad.dat.14
Jadi “deteksi otomatis” bukan sihir; itu mekanisme yang hanya berfungsi di jaringan yang sudah menyiapkan perangkat WPAD di DHCP/DNS. Hanya mengaktifkan deteksi otomatis di jaringan tanpa perangkat itu hanya menambah waktu tunggu kegagalan deteksi.
4.3. Perilaku klien yang tidak bisa membaca PAC
Tidak semua klien dapat mengevaluasi PAC.
- Pengaturan statis
netsh winhttp set proxytidak mengevaluasi PAC.4 - Alat bergaya variabel lingkungan
HTTP_PROXYpada prinsipnya hanya dapat menuliskan URL proksi tetap (tidak ada tempat untuk menuliskan URL PAC).7 - Untuk aplikasi native yang memakai WinHTTP secara langsung, perilakunya bergantung pada cara sesi dibuka. Aplikasi yang membuka sesi dengan
WinHttpOpenpada Windows 8.1 atau sesudahnya sambil menetapkanWINHTTP_ACCESS_TYPE_AUTOMATIC_PROXYmembuat WinHTTP meresolusi secara otomatis, per permintaan, pengaturan proksi sistem/pengguna (termasuk WPAD/PAC).15 Sebaliknya, jika dibuka denganWINHTTP_ACCESS_TYPE_DEFAULT_PROXYlama (tidak disarankan sejak 8.1) dan sejenisnya, proksi otomatis tidak terintegrasi ke tumpukan HTTP, dan aplikasi harus sendiri memanggilWinHttpGetProxyForUrllalu menetapkan hasilnya ke permintaan. Artinya pada aplikasi implementasi lama, PAC bisa ada tetapi tidak terpakai.5
“Peramban menuju proksi yang benar lewat PAC, tetapi aplikasi bisnis tidak membaca PAC lalu mencoba koneksi langsung dan gagal” — ini juga ketidaksesuaian yang rutin. Di jaringan yang memakai PAC, perlu diputuskan sarana cadangan berupa pengaturan statis atau variabel lingkungan untuk klien yang tidak bisa membaca PAC.
5. Resolusi proksi .NET — Framework dan Core serta sesudahnya adalah hal berbeda
“Pengaturan proksi mana yang dibaca” aplikasi .NET berbeda bawaannya antara .NET Framework dan .NET (Core dan sesudahnya). Jika keduanya dicampur, investigasi aplikasi .NET 8 dengan pengetahuan era Framework akan meleset.
5.1. .NET Framework — bawaan Opsi Internet, ditimpa dengan defaultProxy
Di .NET Framework, HttpWebRequest dan HttpClient (yang menumpang di atasnya) memakai proksi bawaan selama Proxy tidak ditetapkan secara eksplisit. Proksi bawaan ditentukan oleh kombinasi pengaturan internet sistem (pengaturan WinINET akun yang sedang menjalankan) dan berkas konfigurasi, dan pengaturan berkas konfigurasi yang diutamakan.8
Bawaan ini dapat dikendalikan dengan elemen system.net/defaultProxy di app.config (atau machine.config).9
<configuration>
<system.net>
<!-- useDefaultCredentials: apakah kredensial bawaan dikirim ke proksi berautentikasi -->
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="true"
proxyaddress="http://proxy.example.co.jp:8080"
bypassonlocal="true" />
<bypasslist>
<add address="[a-z]+\.example\.co\.jp$" />
</bypasslist>
</defaultProxy>
</system.net>
</configuration>
Jika elemen defaultProxy dibiarkan kosong, pengaturan sistem (Opsi Internet) yang dipakai; jika proxyaddress dan sejenisnya ditulis, itulah yang diutamakan. Dari program, bawaan yang sama dapat diganti lewat WebRequest.DefaultWebProxy.98
Jebakan di bagian 3.3 berlaku di sini juga. Karena bawaannya adalah “Opsi Internet akun yang sedang menjalankan”, aplikasi .NET Framework yang berjalan di bawah akun layanan membaca pengaturan yang berbeda (sering kali kosong) dari yang terlihat di desktop administrator.
5.2. .NET (Core dan sesudahnya) — variabel lingkungan dulu, lalu pengaturan pengguna OS
HttpClient pada .NET (Core dan sesudahnya) punya properti statis HttpClient.DefaultProxy. Selama proksi tidak ditetapkan secara eksplisit di handler, semua instans HttpClient memakainya. Aturan inisialisasi di Windows adalah “baca variabel lingkungan; jika tidak didefinisikan, baca pengaturan proksi pengguna”.7
Variabel lingkungan yang dipakai adalah sebagai berikut.7
| Variabel lingkungan | Arti |
|---|---|
HTTP_PROXY |
Proksi untuk permintaan HTTP |
HTTPS_PROXY |
Proksi untuk permintaan HTTPS |
ALL_PROXY |
Cadangan jika yang di atas tidak didefinisikan |
NO_PROXY |
Daftar host yang dipisah koma, yang tidak memakai proksi |
Ada tiga poin yang perlu diperhatikan.
- Jika salah satu dari
HTTP_PROXY,HTTPS_PROXY, atauALL_PROXYdidefinisikan, itu diutamakan atas pengaturan proksi sisi OS. Hanya mendefinisikanNO_PROXYtidak mengonfigurasi proksi lewat variabel lingkungan; di Windows, pengaturan proksi pengguna OS tetap dipakai. “Pengaturan yang tidak terlihat” — misalnyaHTTPS_PROXYtertinggal sebagai variabel lingkungan sistem setelah pengujian, atau templat CI/CD yang menyuntikkannya — menjadi sarang kecelakaan. NO_PROXYtidak mendukung wildcard (*). Untuk mencocokkan subdomain, awali dengan titik (.example.comcocok denganwww.example.com, tetapi tidak denganexample.comitu sendiri).7- Di luar Windows (kontainer Linux dan sejenisnya), jika variabel lingkungan tidak didefinisikan, inisialisasi dilakukan tanpa proksi. Bahwa aplikasi yang sama punya perilaku bawaan berbeda di Windows dan Linux perlu diperiksa saat migrasi ke kontainer.7
5.3. Penetapan eksplisit — HttpClientHandler.Proxy dan UseProxy
Pada kedua runtime, prioritas tertinggi adalah penetapan eksplisit ke handler. Menetapkan HttpClientHandler.Proxy mengalahkan pengaturan OS maupun berkas konfigurasi, dan UseProxy = false membuat proksi sama sekali tidak dipakai.14
using System.Net;
// Pakai secara eksplisit proksi yang dibaca dari pengaturan aplikasi
var handler = new HttpClientHandler
{
Proxy = new WebProxy("http://proxy.example.co.jp:8080")
{
BypassProxyOnLocal = true,
BypassList = new[] { @"^intra\.example\.co\.jp$" },
UseDefaultCredentials = true // Jika proksi berautentikasi, jawab dengan kredensial akun yang menjalankan
},
UseProxy = true
};
var client = new HttpClient(handler);
// Klien yang sama sekali tidak memakai proksi (untuk API internal, koneksi langsung)
var directHandler = new HttpClientHandler { UseProxy = false };
var directClient = new HttpClient(directHandler);
Selain itu, jika tidak ada penetapan eksplisit dan pengaturan OS yang diikuti, bypass otomatis untuk tujuan lokal punya aturan. Nama datar tanpa titik, alamat loopback, dan tujuan yang cocok dengan sufiks domain mesin sendiri dapat dianggap “lokal”.14 Gejala seperti “perilaku berubah jika IP ditetapkan langsung” atau “begitu dijadikan FQDN, tiba-tiba lewat proksi” kadang disebabkan penilaian ini.
Urutan prioritas, jika dirapikan, sebagai berikut.
| Prioritas (tinggi → rendah) | .NET Framework | .NET (Core dan sesudahnya) |
|---|---|---|
| 1 | Penetapan eksplisit seperti HttpClientHandler.Proxy |
Sama |
| 2 | defaultProxy di app.config |
Penugasan ke HttpClient.DefaultProxy |
| 3 | Opsi Internet akun yang menjalankan | Variabel lingkungan (HTTP_PROXY dan sejenisnya) |
| 4 | — | Pengaturan proksi pengguna Windows |
6. Proksi berautentikasi — 407 adalah kesalahan autentikasi “proksi”
6.1. Jangan campur 407 dan 401
Ketika mencoba melewati proksi yang menuntut autentikasi, proksi mengembalikan kode status 407 (Proxy Authentication Required) beserta header Proxy-Authenticate yang mencantumkan skema yang tersedia. Itu berbeda dari permintaan autentikasi server tujuan (401 dan WWW-Authenticate); pihak yang menerima kredensial pun berbeda, dan tempat mengaturnya pun berbeda.10
Skema autentikasi mencakup Basic, yang mengirim nama pengguna dan kata sandi apa adanya, serta skema challenge/response seperti Negotiate (Kerberos/NTLM). Pada skema challenge/response, kata sandi itu sendiri tidak mengalir di jaringan; autentikasi selesai lewat beberapa kali tukar pesan.10 Mekanisme “jatuh” ke skema mana dibahas lebih rinci di “NTLM dan Kerberos dalam gambar”.
6.2. Cara mengirim kredensial di .NET
Jika yang dipakai adalah proksi bawaan dari pengaturan OS dan hanya autentikasi yang ingin diloloskan, gunakan HttpClientHandler.DefaultProxyCredentials. Ini adalah kredensial yang dikirim ke proksi bawaan itu ketika UseProxy = true dan Proxy = null (= proksi bawaan sistem).11
using System.Net;
var handler = new HttpClientHandler
{
UseProxy = true, // Nilai bawaan. Digabung dengan Proxy null, memakai proksi bawaan sistem
Proxy = null,
// Jawab 407 dengan kredensial akun yang menjalankan (pengguna yang masuk atau akun layanan)
DefaultProxyCredentials = CredentialCache.DefaultCredentials
};
var client = new HttpClient(handler);
Jika proksi ditetapkan secara eksplisit, kredensial diletakkan di sisi WebProxy. Pada banyak skenario klien, yang disarankan bukan nama pengguna dan kata sandi individual, melainkan kredensial bawaan pengguna yang sedang masuk; itulah WebProxy.UseDefaultCredentials = true.12
6.3. Masalah 407 pada akun layanan
Akun yang menjalankan proses berlaku di sini juga. “Kredensial bawaan” adalah kredensial akun yang menjalankan proses itu. Jika dijalankan sebagai pengguna interaktif, autentikasi ke proksi dilakukan sebagai pengguna itu; jika dijalankan sebagai layanan LocalSystem, sebagai akun komputer.
- Jika proksi mengautentikasi pengguna lewat Active Directory, akun komputer atau akun lokal tidak dapat diautentikasi, sehingga 407 berlanjut begitu dijadikan layanan
- Sebaliknya, ada juga lingkungan yang menyiapkan pengecualian autentikasi untuk layanan di sisi proksi (per IP sumber atau per akun)
Jadi investigasi 407 tidak tertutup pada “pengaturan aplikasi” saja; itu satu paket dengan konfirmasi desain infrastruktur: apakah proksi dapat mengautentikasi akun yang menjalankan. Untuk aplikasi yang akan dijadikan layanan, salah satu dari berikut perlu diputuskan sejak tahap desain: jalankan dengan akun layanan domain (gMSA dan sejenisnya), sediakan pengecualian autentikasi di sisi proksi, atau dirikan proksi relay internal yang tidak menuntut autentikasi.
Selain itu, ada cara menyematkan kredensial ke variabel lingkungan seperti HTTP_PROXY=http://user:pass@proxy:80807, tetapi kata sandi plaintext terekspos di variabel lingkungan (= informasi proses), jadi tidak disarankan untuk operasi jangka panjang.
7. HTTPS dan proksi — terowongan CONNECT dan inspeksi TLS
7.1. HTTPS melewati proksi lewat “terowongan”
Jika proksi dipakai untuk komunikasi HTTPS, klien pertama-tama mengirim permintaan CONNECT host-tujuan:443 ke proksi, lalu proksi membuka terowongan TCP. Jika berhasil, proksi mengembalikan 200, dan setelah itu klien serta server tujuan melakukan handshake TLS di dalam terowongan itu. Jika terowongan tidak terbuka, proksi mengembalikan 407 (permintaan autentikasi), 502, dan sejenisnya.16
Dalam model ini, proksi tidak dapat membaca isi terowongan (HTTPS terenkripsi). Yang tertinggal di log proksi hanya nama host tujuan dan keberhasilan koneksi; jalur URL tidak terlihat — itulah perilaku proksi “passthrough”.
7.2. Proksi inspeksi TLS dan kesalahan sertifikat
Di sisi lain, di kalangan proksi produk keamanan ada tipe inspeksi TLS (dekripsi SSL, break and inspect) yang mengakhiri TLS di tengah jalan, memeriksa isi, lalu mengenkripsi ulang dan meneruskan. Pada cara ini, sertifikat server yang disajikan ke klien bukan yang asli, melainkan diganti dengan sertifikat yang ditandatangani ulang oleh CA proksi itu sendiri.13
Karena itu, prasyarat agar konfigurasi ini berdiri adalah “sertifikat CA proksi didistribusikan ke akar terpercaya semua klien”. Di mesin yang belum menerimanya, atau di runtime yang tidak melihat penyimpanan sertifikat Windows (alat dengan toko kepercayaan sendiri), terjadi kesalahan validasi sertifikat. Di .NET, gejalanya tipikal muncul sebagai HttpRequestException dan AuthenticationException di dalamnya (pesan semacam sertifikat jarak jauh tidak valid).
Prinsip penanganan sebagai berikut.
- Distribusikan sertifikat CA internal ke penyimpanan “Otoritas Sertifikasi Akar Terpercaya” komputer lokal. Pembagian pemakaian antara penyimpanan pengguna dan penyimpanan komputer ada di “Panduan praktis penyimpanan sertifikat Windows”.
- Jangan menonaktifkan validasi sertifikat di kode. Penghindaran seperti selalu mengembalikan true di
ServerCertificateCustomValidationCallbackmembuat aplikasi rentan: begitu keluar ke jaringan luar, serangan man-in-the-middle tidak terdeteksi. - Komunikasi yang memakai certificate pinning pada dasarnya tidak dapat diinspeksi. Koneksi yang di-pin, seperti komponen Windows yang memverifikasi sertifikat Microsoft tertentu, gagal pada saat proksi mengganti sertifikat; tidak ada jalan pintas, dan pengaturan pengecualian diperlukan.4 Untuk lalu lintas ke SaaS seperti Microsoft 365, Microsoft sendiri merekomendasikan pengecualian dari dekripsi dan inspeksi di lapisan jaringan.13
Gejala “semua situs internal terlihat, tetapi hanya layanan cloud tertentu yang membuat aplikasi mengeluarkan kesalahan sertifikat” — curigai dulu kombinasi daftar pengecualian inspeksi TLS dan pinning.
8. Prosedur isolasi — identifikasi penyebab dalam 5 langkah
Investigasi “tidak tersambung” dilanjutkan secara mekanis dalam urutan berikut.
| Langkah | Yang dilakukan | Yang diketahui |
|---|---|---|
| (1) Reproduksi | Akses URL bermasalah dengan curl.exe -v atau Invoke-WebRequest (jika mungkin di mesin yang sama, akun yang sama) |
Masalah khusus aplikasi, atau masalah lingkungan |
| (2) Pengambilan pengaturan | Ambil ketiga jalur: netsh winhttp show proxy, pengaturan per pengguna, dan variabel lingkungan |
Apa yang ada di jalur mana |
| (3) Identifikasi akun | Identifikasi akun yang menjalankan aplikasi target (layanan, Penjadwal Tugas, atau pengguna lain) | Pengaturan dan kredensial mana yang dipakai |
| (4) Klasifikasi kesalahan | Bedakan 407 / 403 / gagal resolusi nama / kehabisan waktu / kesalahan sertifikat | Isolasi autentikasi proksi, penolakan kebijakan, jalur, inspeksi TLS |
| (5) Log proksi | Periksa log akses server proksi pada waktu yang bersangkutan | Apakah proksi terjangkau, dan sebagai siapa terautentikasi |
Pengambilan pada (2) dapat dilakukan sekaligus dengan PowerShell.
# (1) Pengaturan per pengguna (WinINET) — perhatikan bahwa yang dibaca adalah HKCU akun yang menjalankan
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' |
Select-Object ProxyEnable, ProxyServer, ProxyOverride, AutoConfigURL
# (2) Pengaturan mesin (WinHTTP)
netsh winhttp show proxy
# (3) Variabel lingkungan
Get-ChildItem env: | Where-Object Name -match 'proxy'
Ada beberapa kiat praktis.
- Pada uji reproduksi (1), sadari jalur pengaturan yang dibaca alat.
curl.exeyang disertakan Windows dapat menetapkan proksi secara eksplisit dengan-x http://proxy:8080, dan untuk validasi TLS biasanya memakai penyimpanan sertifikat OS (Schannel).Invoke-WebRequestdi Windows PowerShell 5.1 mengikuti resolusi sisi .NET Framework (bawaan Opsi Internet); di PowerShell 7 mengikuti sisi .NET (variabel lingkungan diutamakan). Fakta bahwa “curl tembus tetapi aplikasi tidak” itu sendiri adalah petunjuk ketidaksesuaian jalur pengaturan. - Jika target pada (3) adalah layanan, periksa ulang (1) dan (2) dengan akun yang sama dengan layanan. Pemeriksaan di sesi administrator sendiri bukan bukti tampilan yang dilihat LocalSystem.
- Pada klasifikasi kesalahan (4), jika 407 jadikan bab 6 (autentikasi) kandidat pertama, jika kesalahan sertifikat bab 7 (inspeksi TLS), jika kehabisan waktu “proksi tidak terjangkau” (jalur, resolusi nama, firewall). Pola di mana penyebabnya bukan proksi melainkan aturan inbound Windows Firewall dibahas di “Windows Firewall dan aplikasi bisnis”.
- Jika sampai (5) tidak ada jejak di log proksi, komunikasi tidak sampai ke proksi. Curigai penilaian DIRECT di PAC, daftar bypass, atau variabel lingkungan yang lupa dihapus, dan jika perlu konfirmasi tujuan aktual dengan packet capture (“Praktik packet capture di Windows — pembagian pakai pktmon, netsh trace, dan Wireshark”).
9. Rekomendasi desain — jadikan aplikasi yang “bisa diatur” proksinya
Jika prosedur investigasi dibalik, itu menjadi pedoman desain di sisi aplikasi. Untuk aplikasi Windows yang dikirim ke lingkungan dengan proksi internal, berikut yang disarankan.
- Buat proksi dapat ditetapkan secara eksplisit di pengaturan aplikasi. Bawaannya “ikuti pengaturan OS”. Di banyak lingkungan bawaan sudah cukup; hanya di lingkungan pengecualian — PAC tidak bisa dibaca, berjalan sebagai layanan, atau konfigurasi proksi khusus — sediakan cara menetapkan URL proksi, daftar bypass, dan “jangan pakai proksi” lewat berkas pengaturan.
HttpClientHandler.Proxy/UseProxydi bagian 5.3 adalah titik implementasinya.14 - Untuk komunikasi ke tujuan internal (API, DB, server lisensi, dan sejenisnya), tuliskan secara eksplisit perlakuan sebagai pengecualian proksi. Jadikan bentuk yang bisa ditulis di prosedur instalasi: dikecualikan lewat DIRECT di PAC, daftar bypass, atau
NO_PROXY. Aturan pencocokanNO_PROXY(wildcard tidak didukung, arti titik di depan) sering disalahpahami, jadi sertakan contoh.7 - Rancang batas waktu dan retry dengan asumsi lewat proksi. Jika proksi mati atau berhenti di autentikasi, implementasi yang menunggu batas waktu bawaan yang panjang membuat UI dan operasi ikut macet. Pisahkan batas waktu koneksi agar lebih pendek, dan batasi retry pada permintaan yang idempoten (rincian desain di “Jangan bungkus HttpClient dengan using”).
- Keluarkan ke log “proksi mana yang dipakai”. Agar pertanyaan pertama investigasi gangguan bisa dijawab oleh aplikasi itu sendiri.
Log pada poin 4 sudah efektif hanya dengan mencatat hasil resolusi seperti berikut. Poinnya adalah menurunkan jalur dari pengaturan (handler) yang benar-benar dipakai untuk mengonfigurasi klien. Jika HttpClient.DefaultProxy langsung dicatat ke log, ketika Proxy ditetapkan secara eksplisit di handler atau UseProxy = false, nilai yang tercatat bisa menyimpang dari jalur aktual.
using System.Net.Http;
// handler adalah instans yang sama yang dipakai untuk membuat HttpClient
// Jika UseProxy=false, selalu koneksi langsung. Jika ada penetapan eksplisit, itulah yang dipakai; jika tidak, DefaultProxy
var effectiveProxy = handler.UseProxy
? handler.Proxy ?? HttpClient.DefaultProxy
: null;
var target = new Uri("https://api.example.com/v1/orders");
var route = effectiveProxy is null || effectiveProxy.IsBypassed(target)
? "DIRECT"
: effectiveProxy.GetProxy(target)?.ToString() ?? "DIRECT";
logger.LogInformation("Pengiriman HTTP {Target} jalur {Route} akun yang menjalankan {User}",
target, route, Environment.UserName);
Jika sekali saat mulai dijalankan dicatat “jalur” dan “akun yang menjalankan” untuk tujuan utama, isolasi (1)–(3) di bab 8 selesai hanya dengan melihat log. Ketika dikatakan “berjalan di peramban, tetapi…”, sisi aplikasi bisa menjawab “saya memakai pengaturan ini, jalur ini” — itulah syarat aplikasi yang kuat terhadap gangguan proksi.
10. Ringkasan
- Pengaturan proksi Windows terpecah ke tiga jalur — pengaturan WinINET per pengguna, pengaturan mesin WinHTTP, dan variabel lingkungan — dan mana yang dibaca ditentukan oleh aplikasi (tumpukan HTTP-nya) serta akun yang menjalankan.
- WinINET untuk aplikasi interaktif dan tidak didukung di layanan; pemakaian layanan diemban WinHTTP (
netsh winhttp). Untuk “berjalan secara manual, tetapi gagal sebagai layanan”, curigai dulu perbedaan akun yang menjalankan. netsh winhttp set proxyadalah pengaturan statis; tidak menangani PAC, deteksi otomatis, atau autentikasi. Di jaringan yang memakai PAC, perlu diputuskan perlakuan klien yang tidak bisa membaca PAC.FindProxyForURLdi PAC mengembalikan proksi atau DIRECT per URL. WPAD hanya berfungsi di jaringan yang punya perangkat DHCP/DNS.- Bawaan .NET Framework adalah Opsi Internet akun yang menjalankan (ditimpa dengan
defaultProxy); .NET (Core dan sesudahnya) berurutan variabel lingkungan → pengaturan proksi pengguna. Penetapan eksplisit (HttpClientHandler.Proxy) selalu prioritas tertinggi. - 407 adalah kesalahan autentikasi proksi; pada aplikasi yang berjalan di bawah akun layanan, “kredensial bawaan” menjadi milik orang lain — itu penyebab tipikal.
- Proksi inspeksi TLS mensyaratkan distribusi sertifikat CA internal; jawaban yang benar untuk kesalahan sertifikat bukan menonaktifkan validasi, melainkan distribusi ke penyimpanan sertifikat. Komunikasi yang di-pin perlu dikecualikan.
- Isolasi dilakukan secara mekanis: “reproduksi → pengambilan tiga jalur pengaturan → identifikasi akun yang menjalankan → klasifikasi kesalahan → log proksi”. Di sisi aplikasi, desain terbaik untuk pencegahan adalah “proksi dapat diatur, dan jalur yang dipakai dicatat di log”.
Lain kali, jika ada konsultasi “hanya aplikasi bisnis yang tidak tersambung”, tanyakan balik dulu seperti ini.
Aplikasi itu berjalan di bawah akun siapa, dan dari tiga jalur pengaturan proksi, mana yang dibacanya?
Satu pertanyaan itu saja sudah mengubah pintu masuk investigasi secara besar.
Artikel terkait
- Jangan bungkus HttpClient dengan using — praktik komunikasi HTTP aplikasi bisnis C# (pola pembuatan, batas waktu, retry)
- Praktik packet capture di Windows — pembagian pakai pktmon, netsh trace, dan Wireshark
- Windows Firewall dan aplikasi bisnis — daftarkan aturan inbound lewat installer
- Cara membuat dan mengoperasikan layanan Windows — dari pembagian pakai dengan Penjadwal Tugas hingga menjadikan BackgroundService sebagai layanan
- NTLM dan Kerberos dalam gambar — mengapa autentikasi “jatuh” ke NTLM
- Panduan praktis penyimpanan sertifikat Windows — masukkan ke pengguna atau ke komputer
Area konsultasi terkait
Di 合同会社小村ソフト, kami menangani investigasi gangguan komunikasi aplikasi Windows di lingkungan proksi internal, proksi berautentikasi, dan inspeksi TLS — misalnya “berjalan di mesin pengembangan, tetapi tidak berkomunikasi di jaringan pelanggan” atau “setelah dijadikan layanan, API eksternal tidak terjangkau” — serta konsultasi desain komunikasi aplikasi bisnis yang mengasumsikan lingkungan proksi (item pengaturan, batas waktu, desain log). Memulai dari merapikan prosedur reproduksi gejala dan cara pengambilan log pun tidak masalah.
- Pengembangan aplikasi Windows
- Investigasi gangguan dan analisis penyebab
- Konsultasi teknis dan tinjauan desain
- Hubungi kami
Tautan referensi
-
Microsoft Learn, WinINet vs. WinHTTP. Tentang pedoman pembagian pakai: pakai WinINET kecuali proses membutuhkan layanan, impersonation, atau pemisahan sesi; serta tabel perbandingan fitur seperti cache kredensial, prompt kredensial, dukungan layanan, impersonation, dan pemisahan sesi. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, netsh winhttp. Tentang sintaks netsh winhttp show/set/import/reset, proxy-server dan bypass-list pada set proxy, import proxy source=ie, dan pengaturan proksi rinci berformat JSON (Proxy, ProxyBypass, AutoconfigUrl, AutoDetect) lewat set advproxy. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, About WinHTTP. Tentang WinHTTP sebagai tumpukan HTTP yang dirancang untuk layanan dan sisi server, yang mendukung eksekusi di bawah akun layanan dan impersonation, tetapi tidak berbagi cookie, cache, kredensial peramban, atau Opsi Internet pengguna. ↩ ↩2 ↩3
-
Microsoft Learn, Using a proxy with Delivery Optimization. Tentang netsh winhttp set proxy sebagai pengaturan statis yang tidak mendukung deteksi otomatis, URL PAC, atau autentikasi proksi; konfigurasi proksi per perangkat untuk konteks tanpa pengguna masuk (NetworkProxy CSP, kebijakan “atur pengaturan proksi per komputer”); serta komunikasi yang memakai certificate pinning yang gagal pada inspeksi TLS dan perlu dikecualikan. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10
-
Microsoft Learn, WinHTTP AutoProxy Support. Tentang skrip PAC yang memuat fungsi FindProxyForURL(url, host) dan menghitung daftar proksi per permintaan, menunjukkan dengan nilai kembali khusus jika koneksi langsung diperbolehkan, serta bahwa pada AutoProxy API lama proksi otomatis tidak terintegrasi otomatis ke tumpukan HTTP sehingga aplikasi perlu memanggil WinHttpGetProxyForUrl. ↩ ↩2 ↩3
-
Microsoft Learn, WinHttpGetProxyForUrl function. Sebagai implementasi protokol WPAD, PAC dapat mengembalikan proksi berbeda per URL sehingga perlu dipanggil per URL; mendukung baik penetapan eksplisit URL PAC maupun deteksi otomatis dari jaringan. ↩ ↩2
-
Microsoft Learn, HttpClient.DefaultProxy Property. Di Windows, variabel lingkungan HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, NO_PROXY dibaca lebih dulu, dan jika tidak didefinisikan pengaturan proksi pengguna yang dibaca; di Linux, jika tidak ada variabel lingkungan, inisialisasi tanpa proksi; NO_PROXY tidak mendukung wildcard dan memakai kecocokan subdomain dengan titik di depan; URL proksi dapat memuat nama pengguna dan kata sandi. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9
-
Microsoft Learn, Configuring Internet Applications. Di .NET Framework, elemen defaultProxy mendefinisikan proksi bawaan; HttpWebRequest tanpa properti Proxy memakai proksi bawaan; pengaturan internet sistem dan pengaturan berkas konfigurasi digabung, dengan sisi berkas konfigurasi yang diutamakan. ↩ ↩2 ↩3
-
Microsoft Learn, defaultProxy element (network settings). Atribut enabled dan useDefaultCredentials pada elemen system.net/defaultProxy, elemen anak proxy, bypasslist, dan module; jika elemen kosong, pengaturan proksi sistem yang dipakai; saat migrasi ke .NET 6 dan sesudahnya, konfigurasikan dengan HttpClient.DefaultProxy. ↩ ↩2 ↩3
-
Microsoft Learn, Authentication in WinHTTP. Jika autentikasi proksi diperlukan, kode status 407 dan header Proxy-Authenticate dikembalikan (autentikasi server adalah 401 dan WWW-Authenticate); perbedaan Basic dan skema challenge/response seperti Kerberos; pada skema challenge/response, nama pengguna dan kata sandi tidak mengalir di jaringan. ↩ ↩2 ↩3
-
Microsoft Learn, HttpClientHandler.DefaultProxyCredentials Property. Properti untuk menetapkan kredensial yang dipakai mengautentikasi ke proksi bawaan, ketika UseProxy true dan Proxy null sehingga proksi bawaan sistem yang dipakai. ↩ ↩2
-
Microsoft Learn, WebProxy.Credentials Property. Properti Credentials adalah kredensial yang dikirim ke proksi sebagai respons HTTP 407; pada banyak skenario klien, yang disarankan adalah memakai kredensial bawaan pengguna yang sedang masuk dengan mengatur UseDefaultCredentials ke true. ↩ ↩2
-
Microsoft Learn, Understanding implications when using network intermediation to decrypt or manipulate Microsoft 365 traffic at the network layer. Tentang inspeksi TLS (dekripsi SSL) sebagai konfigurasi yang mendekripsi, memeriksa, dan mengenkripsi ulang TLS di proksi atau firewall; dapat menyebabkan gangguan fungsi atau penurunan kinerja pada layanan yang mengasumsikan TLS ujung ke ujung; serta rekomendasi mengecualikan lalu lintas ke Microsoft 365 dari dekripsi dan inspeksi di lapisan jaringan. ↩ ↩2 ↩3
-
Microsoft Learn, Make HTTP requests with the HttpClient class. Dua cara konfigurasi HttpClient.DefaultProxy dan HttpClientHandler.Proxy; penetapan Proxy diutamakan atas berkas konfigurasi atau pengaturan komputer lokal; konfigurasi umum WPAD yang memperoleh berkas PAC (wpad.dat dan sejenisnya) lewat nama DNS wpad atau DHCP; serta penilaian bypass tujuan lokal berdasarkan nama datar, loopback, dan kecocokan sufiks domain. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, WinHttpOpen function. Arti tiap nilai dwAccessType. WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY (Windows 8.1 dan sesudahnya) menentukan proksi secara otomatis dari pengaturan proksi sistem/pengguna dan juga menangani failover serta autentikasi secara otomatis; WINHTTP_ACCESS_TYPE_DEFAULT_PROXY tidak disarankan sejak 8.1. ↩
-
Microsoft Learn, Work with existing on-premises proxy servers. Tentang komunikasi HTTPS outbound yang ditegakkan dengan permintaan CONNECT ke proksi; jika berhasil HTTP 200 dikembalikan, sedangkan respons seperti 407 (permintaan autentikasi) atau 502 menandakan proksi tidak mengizinkan komunikasi, sehingga isolasi perlu dilanjutkan bersama tim sisi proksi. ↩
Artikel terkait
Artikel terbaru dengan tag yang sama untuk mendalami topik-topik terdekat.
Praktik penangkapan paket di Windows — membedakan pemakaian pktmon, netsh trace, dan Wireshark
Gangguan komunikasi yang di log aplikasi hanya tersisa sebagai "timeout" bisa diselidiki satu lapis lebih dalam dengan melihat paket yang...
Praktik terbaik multithreading di lapangan: edisi .NET — yang harus diputuskan sebelum menambah thread
Merangkum pola desain .NET/C# agar aplikasi multithread tidak sesekali crash atau macet: jangan membuat thread sendiri, bertumpu pada Tas...
Memakai WMI/CIM dari C# dan PowerShell — panduan praktis pengambilan informasi perangkat keras, pemantauan proses, dan kueri jarak jauh
Cara klasik mengambil nomor seri PC, memantau ruang disk, dan mendeteksi proses yang mulai adalah WMI/CIM. Artikel ini menjelaskan pemaka...
Windows Firewall dan aplikasi bisnis — daftarkan aturan masuk lewat penginstal
Penyebab klasik «jalan di mesin pengembangan, tetapi tidak bisa berkomunikasi di situs pelanggan» adalah Windows Firewall. Artikel ini me...
Kedalaman I/O Windows (bagian 5) — struktur internal NTFS: memahami sistem file lewat MFT
Bagian 5 seri yang menjelaskan struktur internal NTFS dengan diagram. Dari sudut pandang pengembang, artikel ini menata MFT dan rekaman f...
Topik terkait
Halaman-halaman ini menempatkan topik dalam konteks layanan dan keputusan yang lebih luas.
Topik teknis Windows
Portal tentang pengembangan Windows, investigasi bug, dan pemanfaatan aset yang ada.
Layanan yang terkait dengan topik ini
Artikel ini berkaitan langsung dengan layanan berikut.
Pengembangan aplikasi Windows
Aplikasi bisnis, integrasi perangkat, dan alat komunikasi, dari kebutuhan hingga pengembangan.
Pertanyaan yang sering diajukan
Pertanyaan yang sering muncul dalam konsultasi tentang topik artikel ini.
- Peramban tersambung, tetapi hanya aplikasi bisnis yang tidak melewati proksi internal. Mengapa?
- Peramban membaca pengaturan proksi per pengguna WinINET, tetapi aplikasi bisnis tidak selalu membaca pengaturan yang sama. Aplikasi yang berjalan sebagai layanan Windows, atau di bawah akun lain, merujuk pengaturan yang terlihat dari akun itu, pengaturan mesin WinHTTP, atau variabel lingkungan. Identifikasi dulu akun yang menjalankan proses, lalu periksa pengaturan proksi yang terlihat dari akun itu — baik dengan netsh winhttp show proxy maupun di pengaturan pengguna. Jika gejala bisa direproduksi dengan curl.exe atau alat serupa pada akun yang sama di mesin yang sama, itu menandakan ketidaksesuaian antar jalur konfigurasi, bukan masalah khusus aplikasi.
- netsh winhttp set proxy sudah diatur, tetapi komunikasi aplikasi tidak berubah. Mengapa?
- Yang diatur netsh winhttp adalah bawaan mesin WinHTTP. Itu tidak memengaruhi peramban atau aplikasi interaktif yang membaca WinINET, maupun HttpClient .NET (Core dan sesudahnya) yang lebih mengutamakan variabel lingkungan. netsh winhttp set proxy juga pengaturan statis; tidak menangani konfigurasi otomatis PAC, deteksi otomatis, atau autentikasi proksi. Pastikan dulu tumpukan HTTP mana yang dipakai aplikasi target, dan dari jalur konfigurasi mana ia meresolusi proksi.
- Pengaturan proksi mana yang dibaca aplikasi .NET?
- .NET Framework secara bawaan memakai Opsi Internet (setara WinINET) akun yang sedang menjalankan proses, dan dapat ditimpa dengan elemen system.net/defaultProxy di app.config. HttpClient pada .NET (Core dan sesudahnya) membaca variabel lingkungan seperti HTTP_PROXY, HTTPS_PROXY, dan NO_PROXY lebih dulu, lalu jika tidak didefinisikan jatuh ke pengaturan proksi pengguna Windows. Pada kedua kasus, penetapan eksplisit HttpClientHandler.Proxy menjadi prioritas tertinggi. Urutan resolusi bawaan berbeda antara Framework dan Core serta sesudahnya, jadi perilaku proksi perlu diperiksa ulang saat migrasi.
- Apa yang harus diperiksa ketika 407 Proxy Authentication Required dikembalikan?
- 407 adalah tanda bahwa proksi itu sendiri menuntut autentikasi; itu berbeda dari kesalahan autentikasi server tujuan (401). Pastikan dulu skema yang diminta proksi (Negotiate, NTLM, Basic) dari header Proxy-Authenticate, lalu di .NET kirim kredensial dengan HttpClientHandler.DefaultProxyCredentials atau WebProxy.UseDefaultCredentials. Pada aplikasi yang berjalan di bawah akun layanan, "kredensial bawaan" menjadi milik akun layanan itu, sehingga pola tipikalnya berhasil untuk pengguna interaktif lalu 407 begitu dijadikan layanan. Periksa juga di log sisi proksi sebagai siapa proses itu terautentikasi.
- Proksi inspeksi TLS menimbulkan kesalahan sertifikat. Bolehkah validasi sertifikat dinonaktifkan?
- Menonaktifkannya tidak disarankan. Proksi inspeksi TLS mendekripsi komunikasi lalu menyajikan ke klien sertifikat yang ditandatangani ulang oleh CA-nya sendiri, sehingga validasi gagal jika sertifikat CA itu tidak ada di akar terpercaya. Perbaikan yang benar adalah mendistribusikan sertifikat CA internal ke penyimpanan sertifikat Windows (biasanya Otoritas Sertifikasi Akar Terpercaya komputer lokal). Menonaktifkan validasi di kode berarti serangan man-in-the-middle tidak terdeteksi ketika aplikasi dipakai di jaringan luar, dan kerentanan tetap ada.
Profil penulis
Halaman perkenalan penulis artikel.
Go Komura
Direktur KomuraSoft LLC
Berspesialisasi dalam pengembangan perangkat lunak Windows, konsultasi teknis, dan investigasi bug, terutama pada proyek dengan sistem yang sudah ada dan bug yang sulit direproduksi.