ID Artikel: 182888 - Kajian Terakhir: 16 September 2011 - Revisi: 2.0

Bagaimana menangani kesalahan otoritas sertifikat tidak sah dengan WinInet

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Perbesar semua | Perkecil semua

RINGKASAN

Jika sertifikat SSL server dikeluarkan oleh sertifikat tidak dikenal atau tidak sah otoritas WinInet HttpSendRequest API atau MFC CInternetFile::SendRequest akan gagal dengan kesalahan 12045 (ERROR_INTERNET_INVALID_CA).

Ketika Internet Explorer mencoba mengakses URL yang sama, galat yang sama adalah melaporkan.

INFORMASI LEBIH LANJUT

Kesalahan ini terjadi bila klien tidak tahu tentang sertifikat otoritas yang mengeluarkan sertifikat server. Masalah yang mungkin mengoreksi dengan menginstal sertifikat otoritas sertifikat root. Daftar semua sertifikat diinstal dapat dilihat dari Internet Explorer. Dari pandangan menu, klik Internet Options, klik Content tab, dan klik otoritas.

Mungkin untuk menghindari kesalahan ini di WinInet aplikasi tanpa menginstal sertifikat. Ada dua metode penanganan kesalahan ini. Anda dapat menggunakan kode yang mirip dengan berikut ini.

Metode 1. Dengan UI (kotak pesan yang mirip dengan Internet Explorer adalah dihasilkan):
   ...
   Again:
   if (!HttpSendRequest (hReq,...))
       dwError = GetLastError ();

   if (dwError == ERROR_INTERNET_INVALID_CA)
   {
       // Make sure to check return code from InternetErrorDlg
       // user may click either OK or Cancel. In case of Cancel
       // request should not be resumbitted.
       InternetErrorDlg (GetDesktopWindow(),
                         hReq,
                         ERROR_INTERNET_INVALID_CA,
                         FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
                         FLAGS_ERROR_UI_FLAGS_GENERATE_DATA |
                         FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS,
                         NULL);
      goto again;
   }
   ...
				
Metode 2. Tanpa UI:
   ...
   Again:
   if (!HttpSendRequest (hReq,...))
      dwError = GetLastError ();
   if (dwError == ERROR_INTERNET_INVALID_CA)
   {
      DWORD dwFlags;
      DWORD dwBuffLen = sizeof(dwFlags);

      InternetQueryOption (hReq, INTERNET_OPTION_SECURITY_FLAGS,
            (LPVOID)&dwFlags, &dwBuffLen);

      dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
      InternetSetOption (hReq, INTERNET_OPTION_SECURITY_FLAGS,
                            &dwFlags, sizeof (dwFlags) );
      goto again;
   }
   ...
				
Logika yang sama dapat digunakan dengan MFC WinInet kelas. Dalam kasus ini, Setelah MFC metode sesuai dengan api WinInet yang digunakan di atas:

  • CInternetFile::SendRequest
  • CInternetFile::QueryOption
  • CInternetFile::SetOption
  • CInternetFile::ErrorDlg
Harap dicatat bahwa Visual C++ 5.0 hilang dokumentasi pada CInternetFile::ErrorDlg, CInternetFile::QueryOption, dan CInternetFile::SetOption. Melihat Inet.cpp MFC file sumber untuk informasi cara menggunakan metode ini.

CATATAN 1: InternetErrorDlg dapat kembali setelah nilai:
   ERROR_SUCCESS
   ERROR_CANCELLED
   ERROR_INTERNET_FORCE_RETRY.
				
Permintaan harus menyelubungi hanya ketika ERROR_INTERNET_FORCE_RETRY kembali. Di Internet Explorer 4.0 dan 4.01, namun, permintaan harus pengubahan bahkan ketika ERROR_SUCCESS kembali.

Microsoft telah mengkonfirmasi ini menjadi masalah dalam InternetErrorDlg API.CATATAN 2: SECURITY_FLAG_IGNORE_UNKNOWN_CA tidak dilaksanakan di Internet Explorer 3.0 dan 3.02.

InternetErrorDlg masih bekerja, namun, dengan pengecualian berikut. The kotak dialog yang dihasilkan oleh API ini tidak memungkinkan mengabaikan sertifikat tidak sah otoritas kesalahan; ini adalah hanya pemberitahuan kepada pengguna bahwa halaman tidak dapat dilihat.

CATATAN 3: Pilihan untuk mengabaikan kesalahan ini tidak dapat diatur sebelum error terjadi. Anda harus berupaya untuk mengirimkan permintaan, menerima kesalahan, kemudian mengatur opsi (atau hubungi InternetErrorDlg), dan kembali.

REFERENSI

Untuk informasi tambahan, lihat article(s) berikut di Basis Pengetahuan Microsoft:
168151  (http://support.microsoft.com/kb/168151/EN-US/ ) Cara membuat permintaan SSL menggunakan WinInet
Kata kunci: 
kberrmsg kbmt KB182888 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:182888  (http://support.microsoft.com/kb/182888/en-us/ )
Retired KB ArticleSanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan ?sebagaimana adanya? dan tidak akan diperbarui.