Saya memiliki panggilan layanan web sederhana, yang dihasilkan oleh aplikasi .NET (C #) windows 2.0, melalui proksi layanan web yang dihasilkan oleh Visual Studio, untuk layanan web yang juga ditulis dalam C # (2.0). Ini telah bekerja selama beberapa tahun, dan terus melakukannya di selusin tempat di mana ia berjalan.
Instalasi baru di situs baru mengalami masalah. Ketika mencoba menjalankan layanan web, itu gagal dengan pesan yang mengatakan:
Tidak dapat membangun hubungan saling percaya untuk saluran aman SSL / TLS
URL layanan web menggunakan SSL (https: //) - tetapi ini telah bekerja untuk waktu yang lama (dan terus melakukannya) dari banyak lokasi lain.
Di mana saya melihat? Mungkinkah ini masalah keamanan antara Windows dan .NET yang unik untuk pemasangan ini? Jika demikian, di mana saya mengatur hubungan saling percaya? Saya tersesat!
Jawaban:
Pikiran (berdasarkan rasa sakit di masa lalu):
serverbarumesin memiliki jam yang diatur dengan benar (yaitu agar waktu UTC benar [abaikan waktu setempat, sebagian besar tidak dapat dibatalkan]) - ini tentu penting untuk WCF, sehingga dapat berdampak pada sabun biasa?sumber
Cuplikan berikut akan memperbaiki kasus di mana ada sesuatu yang salah dengan sertifikat SSL di server yang Anda panggil. Misalnya, mungkin ditandatangani sendiri atau nama host antara sertifikat dan server mungkin tidak cocok.
Ini berbahaya jika Anda memanggil server di luar kendali langsung Anda, karena Anda tidak lagi dapat memastikan bahwa Anda berbicara dengan server yang Anda pikir Anda terhubung. Namun, jika Anda berhadapan dengan server internal dan mendapatkan sertifikat "benar" tidak praktis, gunakan yang berikut ini untuk memberi tahu layanan web untuk mengabaikan masalah sertifikat dan terus mengaktifkan prajurit.
Dua yang pertama menggunakan ekspresi lambda, yang ketiga menggunakan kode reguler. Yang pertama menerima sertifikat apa pun. Dua yang terakhir setidaknya memeriksa bahwa nama host dalam sertifikat adalah yang Anda harapkan.
... semoga bermanfaat
sumber
ServicePointManager.ServerCertificateValidationCallback = null;
harus kembali ke perilaku default.Solusi "tangkap semua" yang sangat sederhana adalah ini:
Solusi dari sebastian-castaldi sedikit lebih detail.
sumber
#If CONFIG = "Debug"
pernyataan sehingga hanya diaktifkan saat dalam mode debug. Ini sangat bagus!Saya pribadi paling suka solusi berikut:
... lalu sebelum Anda meminta kesalahan, lakukan yang berikut ini
Menemukan ini setelah berkonsultasi dengan Solusi Luke
sumber
Jika Anda menggunakan Windows 2003, Anda dapat mencoba ini:
Referensi: http://www.outsystems.com/NetworkForums/ViewTopic.aspx?Topic=Web-Services:-Could-not-establish-trust-relationship-for-the-SSL/TLS- ...
sumber
Jika Anda tidak ingin mempercayai semua orang secara membabi buta dan membuat pengecualian kepercayaan hanya untuk host tertentu, solusi berikut ini lebih tepat.
Kemudian panggil Ssl.EnableTrustedHosts saat aplikasi Anda dimulai.
sumber
Luke menulis artikel yang cukup bagus tentang ini .. cukup jujur .. coba ini
Solusi Luke
Alasan (kutipan dari artikelnya (minus kutukan)) ".. Masalah dengan kode di atas adalah tidak berfungsi jika sertifikat Anda tidak valid. Mengapa saya memposting ke halaman web dengan dan sertifikat SSL tidak valid? Karena Saya murah dan saya tidak merasa ingin membayar Verisign atau salah satu dari yang lain ** - * s untuk sertifikat ke kotak tes saya jadi saya sendiri yang menandatanganinya. Ketika saya mengirim permintaan, saya mendapat pengecualian yang indah:
System.Net.WebException Koneksi yang mendasarinya ditutup. Tidak dapat menjalin hubungan kepercayaan dengan server jauh.
Saya tidak tahu tentang Anda, tetapi bagi saya pengecualian itu tampak seperti sesuatu yang akan disebabkan oleh kesalahan konyol dalam kode saya yang menyebabkan POST gagal. Jadi saya terus mencari, dan mengutak-atik serta melakukan semua hal aneh. Hanya setelah saya mencari di Google hal yang saya temukan bahwa perilaku default setelah menemukan sertifikat SSL yang tidak valid adalah dengan membuang pengecualian ini. .. "
sumber
Alat Diagnostik SSL Microsoft mungkin dapat membantu mengidentifikasi masalah.
Perbarui tautan telah diperbaiki sekarang.
sumber
Saya baru saja mengalami masalah ini. Resolusi saya adalah memperbarui waktu sistem dengan menyinkronkan secara manual ke server waktu. Untuk melakukan ini, Anda dapat:
Adjust Date/Time
Internet Time
tabChange Settings
Update Now
Dalam kasus saya ini salah sinkronisasi sehingga saya harus mengkliknya beberapa kali sebelum diperbarui dengan benar. Jika pembaruan terus salah, Anda bahkan dapat mencoba menggunakan server waktu yang berbeda dari drop-down server.
sumber
Coba ini:
Perhatikan bahwa Anda harus bekerja setidaknya dengan 4.5 .NET framework
sumber
Saya punya masalah serupa di
.NET
aplikasi di Internet Explorer.Saya memecahkan masalah dengan menambahkan sertifikat (sertifikat VeriSign Kelas 3 dalam kasus saya) ke sertifikat editor tepercaya.
Anda bisa mendapatkan sertifikat jika Anda mengekspornya dari:
Terima kasih
sumber
Saya mengalami kesalahan ini berjalan melawan server web dengan url seperti:
tapi tidak ada sertifikat untuk itu, jadi saya mendapat DNS yang disebut
Hanya memberi petunjuk untuk solusi ini di sini karena ini muncul di google.
sumber
Bagi mereka yang mengalami masalah ini melalui sisi klien VS sekali berhasil menambahkan referensi layanan dan mencoba untuk melakukan panggilan pertama mendapat pengecualian ini: "Koneksi yang mendasarinya ditutup: Tidak dapat membangun hubungan kepercayaan untuk saluran aman SSL / TLS" Jika Anda menggunakan (seperti kasus saya) URL titik akhir dengan alamat IP dan mendapatkan pengecualian ini, maka Anda mungkin harus menambahkan kembali referensi layanan melakukan langkah-langkah ini:
Coba lagi :). Terima kasih
sumber
Dalam kasus saya, saya mencoba menguji SSL di lingkungan Visual Studio saya menggunakan IIS 7.
Inilah yang akhirnya saya lakukan untuk membuatnya bekerja:
Di bawah situs saya di bagian 'Bindings ...' di sebelah kanan di IIS, saya harus menambahkan 'https' yang mengikat ke port 443 dan pilih "IIS Express Developement Certificate".
Di bawah situs saya di bagian 'Pengaturan Lanjut ...' di sebelah kanan saya harus mengubah 'Protokol yang Diaktifkan' dari "http" menjadi "https".
Di bawah ikon 'Pengaturan SSL' saya memilih 'Terima' untuk sertifikat klien.
Kemudian saya harus mendaur ulang kumpulan aplikasi.
Saya juga harus mengimpor sertifikat host lokal ke toko pribadi saya menggunakan mmc.exe.
web.config
File saya sudah dikonfigurasi dengan benar, jadi setelah saya menyelesaikan semua hal di atas, saya dapat melanjutkan pengujian saya.sumber
Solusi saya (VB.Net, versi "staging" (UAT) aplikasi ini perlu bekerja dengan sertifikat "staging" tetapi tidak mempengaruhi permintaan begitu mereka berada di situs langsung):
sumber
Jika tidak bekerja sertifikat buruk, ketika ServerCertificateValidationCallback mengembalikan true; Kode ServerCertificateValidationCallback saya:
Kode saya yang dicegah menjalankan ServerCertificateValidationCallback:
Fungsi OnValidateCertificateError:
Saya menonaktifkan kode CertificateValidation dan ServerCertificateValidationCallback berjalan sangat baik
sumber