Saya mendapatkan kesalahan ini:
Sertifikat jarak jauh tidak valid sesuai dengan prosedur validasi.
setiap kali saya mencoba mengirim email menggunakan server SMTP Gmail dalam kode C # saya. Dapatkah seseorang mengarahkan saya ke arah yang benar untuk solusi untuk masalah ini?
Berikut ini adalah jejak tumpukan ...
at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Net.TlsStream.CallProcessAuthentication(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.Mail.SmtpConnection.Flush()
at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at BulkEmail.frmemail.mailsending(String toaddress, String fromaddress, String fromname, String subject, String pwd, String attachements, String mailmessage, String htmlmessage, Int32 i, Int32 j, String replytoaddress)
Jawaban:
Sebagai solusinya, Anda dapat mematikan validasi sertifikat. Hanya lakukan ini untuk mendapatkan konfirmasi bahwa kesalahan sedang terjadi karena sertifikat yang buruk.
Panggil metode ini sebelum Anda menelepon
smtpclient.Send()
:sumber
Tautan di sini menyelesaikan masalah saya.
http://brainof-dave.blogspot.com.au/2008/08/remote-certificate-is-invalid-according.html
Saya pergi ke url dari layanan web (di server yang memiliki masalah), mengklik ikon keamanan kecil di IE, yang memunculkan sertifikat. Saya kemudian mengklik pada tab Detail, mengklik tombol Salin Ke File, yang memungkinkan saya untuk mengekspor sertifikat sebagai file .cer. Setelah saya memiliki sertifikat secara lokal, saya dapat mengimpornya ke toko sertifikat di server menggunakan instruksi di bawah ini.
Mulai MMC baru. File -> Tambah / Hapus Snap-In ... Klik Tambah ... Pilih Sertifikat dan klik Tambah. Periksa tombol radio "Akun Komputer". Klik Selanjutnya.
Pilih komputer klien di layar berikutnya. Klik Selesai. Klik Tutup. Klik OK. SEKARANG instal sertifikat ke toko sertifikat Otoritas Sertifikasi Root Tepercaya. Ini akan memungkinkan semua pengguna mempercayai sertifikat.
sumber
certutil -f -p test -importPFX Root devcert.pfx
dancertutil -f -p test -importPFX MY devcert.pfx
. Perlu dijalankan dalam prompt perintah admin (dengan asumsi kata sandi PFXtest
)Anda dapat meningkatkan kode dengan bertanya kepada pengguna ketika sertifikat tidak valid apakah dia ingin melanjutkan atau tidak. Apakah Anda ingin melanjutkan? Seperti di bawah ini:
Dan tambahkan metode seperti ini:
sumber
Agak terlambat ke pesta, tetapi jika Anda mencari solusi seperti Yury, kode berikut akan membantu Anda mengidentifikasi jika masalah terkait dengan sertifikat tanda tangan dan, jika demikian abaikan kesalahan tanda tangan. Anda jelas dapat memeriksa kesalahan SSL lainnya jika diinginkan.
Kode yang kami gunakan (milik Microsoft - http://msdn.microsoft.com/en-us/library/office/dd633677(v=exchg.80).aspx ) adalah sebagai berikut:
sumber
Saya memiliki masalah yang sama persis dan menemukan bahwa secara default Mail Shield dari Avast antivirus mengaktifkan "Pindai koneksi SSL" . Pastikan untuk mematikannya .
Dari pengetahuan saya, Avast akan "membuka" surat itu, memindai semua virus dan menandatanganinya menggunakan sertifikat sendiri sehingga surat itu tidak akan ditandatangani oleh sertifikat gmail lagi yang menghasilkan kesalahan itu.
Solusi 1:
Solusi 2 (Harus berbicara dengan keamanan terbaik):
sumber
Dapatkan kesalahan yang sama saat mengirim dari pandangan karena ssl. Pengaturan yang dicoba EnableSSL = false menyelesaikan masalah.
contoh:
sumber
Apakah Anda yakin menggunakan alamat server SMTP yang benar?
Baik smtp.google.com dan smtp.gmail.com berfungsi, tetapi sertifikat SSL dikeluarkan untuk yang kedua.
sumber
Saya memiliki kesalahan yang sama ketika saya mencoba mengirim email menggunakan
SmtpClient
melalui server proxy (Usergate).Memverifikasi sertifikat yang berisi alamat server, yang tidak sama dengan alamat server proxy, karenanya kesalahan. Solusi saya: ketika terjadi kesalahan saat memeriksa sertifikat, terima sertifikat, ekspor, dan periksa.
Kode lengkap dari kelas pengirim email saya:
}
sumber
Saya tahu saya cukup terlambat dalam permainan ini, tetapi saya belum melihat jawaban di sini menunjuk ke sistem. Logagnagnics untuk TLS Stream.
Sebelum Anda melakukan perubahan pada kode Anda, pastikan Anda memahami apa masalahnya. Ini
AuthenticationException
adalah salah satu pengecualian yang sangat umum yang tidak banyak bicara. Untuk mempelajari apa yang terjadi di bawah tenda, edit file app.config untuk aplikasi Anda (atau buat yang baru) dan pastikan Anda memiliki sumber penelusuran System.Net diaktifkan disystem.diagnostics
bagian ini, misalnya:Jalankan kembali aplikasi Anda dan periksa file c: \ network.log. Anda harus melihat di sana informasi terperinci tentang koneksi TLS (SSL) Anda, misalnya:
Mengetahui apa yang menyebabkan masalah, Anda harus dapat menyelesaikannya atau setidaknya mempersempit pencarian Google Anda.
sumber
Masalah saya adalah pada Windows 2003 Server, saat memanggil AuthenticateAsClient. Solusi di atas (misalnya mengelak
ServicePointManager.ServerCertificateValidationCallback
) tidak bekerja.Ternyata ini adalah bug di Windows 2003, dan ada perbaikan terbaru:
"Aplikasi yang menggunakan API Kriptografi tidak dapat memvalidasi sertifikat X.509 di Windows Server 2003"
https://support.microsoft.com/en-us/kb/938397
Menginstal perbaikan terbaru ini menyelesaikan masalah saya.
sumber
Folder situs web Anda memerlukan keamanan layanan jaringan. Terutama web.config. Ini menggunakan akun ini untuk mengakses registri Anda untuk sertifikat. Ini akan menghentikan kebutuhan untuk menambahkan retasan ke kode Anda.
sumber
Masalah saya bukan karena saya merujuk server dengan alamat IP alih-alih URL. Saya telah membeli sertifikat yang ditandatangani dari CA untuk digunakan di dalam jaringan pribadi. URL yang ditentukan pada sertifikat tidak masalah ketika mereferensikan server. Setelah saya mereferensikan server dengan URL dalam sertifikat semuanya mulai berfungsi.
sumber
Periksa Tanggal dan Waktu komputer Anda. Jika salah, perbarui ke waktu sekarang atau atur secara otomatis untuk mendapatkan waktu dari Internet.
Karena sertifikat terikat pada periode waktu yang tetap, jika jam Anda salah, Anda cenderung mendapatkan kesalahan seperti ini. Dalam skenario itu, dengan memperbaiki waktu, masalah akan diperbaiki.
sumber
Bagi mereka yang mengalami kesalahan yang sama saat terhubung ke situs lokal dengan sertifikat yang ditandatangani sendiri, posting blog berikut membantu saya keluar.
http://brainof-dave.blogspot.com.au/2008/08/remote-certificate-is-invalid-according.html
sumber
Dalam kasus kami masalah disebabkan oleh sertifikat server IIS. Subjek sertifikat diatur ke nama DNS dan pengguna mencoba mengakses situs web dengan alamat IP, sehingga validasi sertifikasi .NET gagal. Masalah menghilang ketika pengguna mulai menggunakan nama DNS.
Jadi, Anda harus mengubah URL Penyedia ke https: //CertificateSubject/xxx/xxx.application
sumber
Ada artikel blog MSDN tentang menyelidiki jenis masalah ini:
Pemecahan masalah ASP.NET - Sertifikat jarak jauh tidak valid sesuai dengan prosedur validasi:
http://blogs.msdn.com/b/jpsanders/archive/2009/09/16/troubleshooting-asp-net-the-remote-certificate- is-invalid-menurut-validasi-procedure.aspx
sumber
Menambahkan baris ini berhasil untuk saya. Ini sebenarnya mempercayai semua sertifikat seperti yang disebutkan di sini . Namun, ini dapat digunakan terutama untuk pemecahan masalah. Jika ini cocok untuk Anda, berarti sertifikat server jarak jauh tidak ditambahkan sebagai sertifikat tepercaya di mesin Anda.
Kode lengkapnya adalah
sumber
Itu memecahkan masalah saya
// Dengan Referensi ke // Masalah hanya datang Gunakan baris di atas untuk mengatur SSl palsu untuk menyelesaikan kesalahan ketika nama pengguna dan kata sandi dimasukkan dalam pengaturan SMTP.
sumber
di sini adalah solusi yang saya putuskan untuk digunakan.
sumber
Kode dari jawaban yang diterima membantu saya men-debug masalah. Saya kemudian menyadari bahwa bidang SN
certificate
argumen tidak sama dengan apa yang saya pikir adalah server SMTP saya. Dengan mengaturHost
properti instance SmtpClient ke nilai SN sertifikat saya bisa memperbaiki masalah ini.sumber