यह एक आम त्रुटि प्रतीत होता है लेकिन मुझे एक कार्य-आसपास मिल गया है (नीचे देखें) मैं कारण को पिन नहीं कर सकता मैं इसे पहली जगह में प्राप्त कर रहा हूं।"रिमोट सर्टिफिकेट प्रमाणीकरण प्रक्रिया के अनुसार अमान्य है" जब एसएमपीटी सर्वर के पास वैध प्रमाणपत्र
मैं अपने आवेदन में एसएमटीपी कार्यक्षमता लिख रहा हूं और मैं पहले से ही काम कर रहे एसएमटीपी में एसएसएल कार्यक्षमता जोड़ने का प्रयास कर रहा हूं।
मैं हमारी कंपनी के एमएस एक्सचेंज सर्वर का उपयोग करके परीक्षण कर रहा हूं और विशेष रूप से उस पर वेबमेल विकल्प सक्षम है। मैं अपने कनेक्शन को प्रमाणित नहीं कर रहा हूं और गुमनाम रूप से भेजकर अपने कोड के माध्यम से आंतरिक रूप से ईमेल भेज सकता हूं, हालांकि वे ईमेल हमारी कंपनियों की नीति के कारण बाहरी ईमेल पते पर रिले नहीं होंगे। इसके अलावा मैं इसे अपने ग्राहकों के लिए प्रोग्रामिंग कर रहा हूं और वे सभी खुले रिले और/या अज्ञात कनेक्शन की अनुमति नहीं देते हैं।
मेरा मानना है कि एक्सचेंज सर्वर स्पष्ट एसएसएल/टीएलएस का उपयोग कर रहा है। मैंने पोर्ट 25 पर सर्वर के पते पर टेलनेट की कोशिश की है और एक टेक्स्ट प्रतिक्रिया, मानव पठनीय प्रतिक्रिया मिली है, जो मेरी कुछ खोजों के अनुसार पहले इसका मतलब है कि यह स्पष्ट एसएसएल/टीएलएस का उपयोग कर रहा है।
मैं निम्नलिखित परीक्षण कोड
SmtpClient SMTPClient = new SmtpClient(webmailaddress);
SMTPClient.Port = 25;
SMTPClient.UseDefaultCredentials = true;
SMTPClient.EnableSsl = true;
System.Net.Mail.MailMessage Message = new `
System.Net.Mail.MailMessage(emailFrom,emailTo,subject,body);
SMTPClient.Send(Message);
है एक समाधान मैं इस "The remote certificate is invalid according to the validation procedure." using Gmail SMTP server
जहां से मैं निम्नलिखित कोड मिल गया में आए लिए मेरे खोज के दौरान ...
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
public static bool ValidateServerCertificate(object sender,X509Certificate certificate,X509Chain chain,SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
else
{
if (System.Windows.Forms.MessageBox.Show("The server certificate is not valid.\nAccept?", "Certificate Validation", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
return true;
else
return false;
}
}
यह मेरे टेस्ट कोड में काम करता है। मैं जिस वास्तविक प्रक्रिया को लिख रहा हूं (मेरे टेस्ट कोड के बजाए) पृष्ठभूमि में चलने जा रहा है और वास्तव में उपयोगकर्ता से नहीं पूछ सकता (इसके बजाय यह विंडोज़ त्रुटि लॉग में त्रुटियों की रिपोर्ट करता है)।
जैसा कि मैंने शुरू किया, मेरा सवाल वास्तव में मुझे यह त्रुटि क्यों मिल रही है। यदि मैं ब्राउज़र में https: webmail.ourdomain.co.uk पर जाता हूं तो यह एक वैध प्रमाणपत्र दिखाता है और प्रमाण पत्र स्थापित करने का कोई विकल्प नहीं है (जैसा कि मैंने किया होगा अगर यह स्वयं हस्ताक्षरित हो)।
हालांकि जब मैं ValidateServerCertificate विधि में एक डिबग तोड़ Poing के साथ मेरे कोड चलाने के लिए,, मैं प्रमाण पत्र मूल्यों को देखो और हमारे स्थानीय सर्वर की एक प्रदाता देख सकते हैं और 'से पहले का उपयोग नहीं करते', और 'डॉन' आज के गुणों के बाद उपयोग नहीं करते हैं। यह मुझे प्राप्त प्रमाणपत्र से मेल नहीं खाता है।
मैंने यह भी जांच लिया है कि एसएसएल पॉलिसीइरर्स झंडे ValidateServerCertificate के डीबग में हैं, और वे "रिमोट कर्ट्रेस्ट्रेशन चेनइरर्स" और "रिमोट कर्ट्रेस्ट्रेशननाम मिस्चैच" दिखा रहे हैं।
तो मुझे इसके बारे में क्या याद आ रही है ... यह सही प्रमाणपत्र का उपयोग क्यों नहीं कर रहा है? यदि कदम हैं तो मुझे इसका उपयोग करने के लिए स्थानीय रूप से प्रमाण पत्र स्थापित करने की आवश्यकता है, तो मुझे उन्हें जानना होगा ताकि मैं अपने ग्राहकों को यह बता सकूं कि उन्हें क्या करना है।
मैं वैलिडेट सर्वर सर्वर प्रमाण से विधि को वापस लौटकर चेक को पास नहीं करना चाहता, और क्योंकि यह पृष्ठभूमि प्रक्रिया है, मैं उपयोगकर्ता से नहीं पूछ सकता, इसलिए मुझे समझने की आवश्यकता है कि मेरे कोड का उपयोग कैसे करें सही/भरोसेमंद प्रमाण पत्र।
आशा है कि कोई सलाह दे सकता है।
अच्छी तरह से मुझे लगता है कि इसका कोई जवाब नहीं जानता है। अभी भी समाधान नहीं मिला है :( – RosieC