दिलचस्प पोस्ट
रेल में attr_accessor का उपयोग स्व और विंडो के बीच अंतर क्या है? बच्चे के मूल्य के आधार पर तत्व का चयन करने के लिए XPath जावा की पेंट विधि के साथ समस्याएं, हास्यास्पद रीफ्रेश वेग क्या जावास्क्रिप्ट के माध्यम से एक लिंक (या किसी तत्व का) क्लिक करें ईवेंट को ट्रिगर करना संभव है? XPath और XSLT 2.0 .NET के लिए? एक इकाई संबंध मॉडल और एक संबंधपरक मॉडल के बीच अंतर क्या है? अनुरोधित पृष्ठ तक पहुंचा नहीं जा सकता क्योंकि पृष्ठ के लिए संबंधित कॉन्फ़िगरेशन डेटा अमान्य त्रुटि है एंड्रॉइड में क्रियाएँ के अंदर बीजी संगीत बजाना जबकि वादे के साथ लूप 24-बिट बिटमैप के लिए स्कैनलाइन संपत्ति का उपयोग कैसे करें? एंड्रॉइड लॉक स्क्रीन का स्रोत उपज बयान कार्यान्वयन क्या मैं विजुअल स्टूडियो में डिबगिंग करते समय लौटने से पहले रिटर्न वेल्यू का पता लगा सकता हूँ? कैसे पता कैसे एक सरणी में जावास्क्रिप्ट / jQuery में एक विशिष्ट स्ट्रिंग है?

"प्रमाणीकरण या डिक्रिप्शन विफल हुआ" के साथ मोनो https वेबरेक्स्ट विफल रहता है

मैं अपने सी # अनुप्रयोगों में उपयोग करने के लिए एक सरल आराम ग्राहक बना रहा हूँ विंडोज़ में नेट पर यह http: // और https: // कनेक्शन के साथ काम करता है मोनो 2.6.7 में (उसी परिणाम के साथ भी 2.8 का परीक्षण किया गया) उबंटु 10.10 पर केवल http: // works https: // कनेक्शन इस अपवाद को अनुरोध पर डालते हैं। GetResponse () विधि:

Unhandled Exception: System.Net.WebException: Error getting response stream (Write: The authentication or decryption has failed.): SendFailure ---> System.IO.IOException: The authentication or decryption has failed. ---> Mono.Security.Protocol.Tls.TlsException: Invalid certificate received from server. Error code: 0xffffffff800b010a at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates (Mono.Security.X509.X509CertificateCollection certificates) [0x00000] in <filename unknown>:0 at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1 () [0x00000] in <filename unknown>:0 at Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process () [0x00000] in <filename unknown>:0 at (wrapper remoting-invoke-with-check) Mono.Security.Protocol.Tls.Handshake.HandshakeMessage:Process () at Mono.Security.Protocol.Tls.ClientRecordProtocol.ProcessHandshakeMessage (Mono.Security.Protocol.Tls.TlsStream handMsg) [0x00000] in <filename unknown>:0 at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 --- End of inner exception stack trace --- at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 --- End of inner exception stack trace --- at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 at System.Net.HttpWebRequest.GetResponse () [0x00000] in <filename unknown>:0 

मैं इसे ठीक करने के लिए कोई रास्ता नहीं मिल पा रहा हूं। किसी को भी पता है कि ऐसा क्यों हो रहा है और इसे कैसे ठीक करें?

फिर, यह केवल मोनो में विफल रहता है, नेट में कोई संबंध स्थापित करने में कोई समस्या नहीं है।

यहां कॉलिंग कोड है:

 public JToken DoRequest(string path, params string[] parameters) { if(!path.StartsWith("/")) { path = "/" + path; } string fullUrl = url + path + ToQueryString(parameters); if(DebugUrls) Console.WriteLine("Requesting: {0}", fullUrl); WebRequest request = HttpWebRequest.CreateDefault(new Uri(fullUrl)); using(WebResponse response = request.GetResponse()) using(Stream responseStream = response.GetResponseStream()) { return ReadResponse(responseStream); } } 

वेब के समाधान से एकत्रित समाधान ""प्रमाणीकरण या डिक्रिप्शन विफल हुआ" के साथ मोनो https वेबरेक्स्ट विफल रहता है"

मुझे एकता (जो भी मोनो का उपयोग करता है) के साथ एक ही समस्या थी और इस पोस्ट ने मुझे इसे हल करने में मदद की

बस अपना अनुरोध करने से पहले निम्न पंक्ति जोड़ें:

 ServicePointManager.ServerCertificateValidationCallback = MyRemoteCertificateValidationCallback; 

और यह विधि:

 public bool MyRemoteCertificateValidationCallback(System.Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { bool isOk = true; // If there are errors in the certificate chain, // look at each error to determine the cause. if (sslPolicyErrors != SslPolicyErrors.None) { for (int i=0; i<chain.ChainStatus.Length; i++) { if (chain.ChainStatus[i].Status == X509ChainStatusFlags.RevocationStatusUnknown) { continue; } chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; chain.ChainPolicy.RevocationMode = X509RevocationMode.Online; chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan (0, 1, 0); chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags; bool chainIsValid = chain.Build ((X509Certificate2)certificate); if (!chainIsValid) { isOk = false; break; } } } return isOk; } 

Windows पर .NET फ़्रेमवर्क एक प्रमाणित साइट से एक SSL प्रमाणपत्र को स्वीकार करना है या नहीं यह निर्धारित करने के लिए Windows प्रमाणपत्र संग्रह (एमएमसी, स्नैप-इन्स, प्रमाण पत्र जोड़ें / निकालें) का उपयोग करता है। विंडोज रूट और इंटरमीडिएट सर्टिफिकेट प्राधिकारियों (सीए) के एक समूह के साथ जहाज़ रखता है और वे समय-समय पर विंडोज अपडेट द्वारा अपडेट हो जाते हैं। नतीजतन, आपका एनएटीटी कोड आम तौर पर एक प्रमाण पत्र पर भरोसा करेगा जो इसे सीए या प्रमाण पत्र स्टोर में सीए के वंशज द्वारा जारी किया गया था (सबसे सम्मानित वाणिज्यिक सीए शामिल हैं)।

मोनो में, कोई विंडोज प्रमाणपत्र स्टोर नहीं है। मोनो की खुद की दुकान है डिफ़ॉल्ट रूप से, यह खाली है (कोई डिफ़ॉल्ट CA नहीं है जो विश्वसनीय हैं)। आपको अपनी प्रविष्टियों को प्रबंधित करने की आवश्यकता है

यहाँ एक नज़र डालें:

Mozroots.exe बिंदु आपके मोनो को डिफ़ॉल्ट सेटिंग के बाद फ़ायरफ़ॉक्स पर भरोसा करने वाली सभी चीजों पर विश्वास करने के लिए प्रेरित करेगा।

अनुरोध अनुरोध http अनुरोध करने से पहले यह रेखा लिखें। यह काम होना चाहिए

 ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) => { return true; }); private static bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { //Return true if the server certificate is ok if (sslPolicyErrors == SslPolicyErrors.None) return true; bool acceptCertificate = true; string msg = "The server could not be validated for the following reason(s):\r\n"; //The server did not present a certificate if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNotAvailable) == SslPolicyErrors.RemoteCertificateNotAvailable) { msg = msg + "\r\n -The server did not present a certificate.\r\n"; acceptCertificate = false; } else { //The certificate does not match the server name if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNameMismatch) == SslPolicyErrors.RemoteCertificateNameMismatch) { msg = msg + "\r\n -The certificate name does not match the authenticated name.\r\n"; acceptCertificate = false; } //There is some other problem with the certificate if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateChainErrors) == SslPolicyErrors.RemoteCertificateChainErrors) { foreach (X509ChainStatus item in chain.ChainStatus) { if (item.Status != X509ChainStatusFlags.RevocationStatusUnknown && item.Status != X509ChainStatusFlags.OfflineRevocation) break; if (item.Status != X509ChainStatusFlags.NoError) { msg = msg + "\r\n -" + item.StatusInformation; acceptCertificate = false; } } } } //If Validation failed, present message box if (acceptCertificate == false) { msg = msg + "\r\nDo you wish to override the security check?"; // if (MessageBox.Show(msg, "Security Alert: Server could not be validated", // MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) == DialogResult.Yes) acceptCertificate = true; } return acceptCertificate; } 

मुझे भी त्रुटि मिलती है

मैंने ServicePointManager.ServerCertificateValidationCallback और ServicePointManager.CertificatePolicy लेकिन फिर भी काम नहीं किया।

मैं क्रोध एक curl wraper का निर्माण यह मेरे खिलौना परियोजना के लिए काम ठीक है

 /// <summary> /// For MONO ssl decryption failed /// </summary> public static string PostString(string url, string data) { Process p = null; try { var psi = new ProcessStartInfo { FileName = "curl", Arguments = string.Format("-k {0} --data \"{1}\"", url, data), RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = false, }; p = Process.Start(psi); return p.StandardOutput.ReadToEnd(); } finally { if (p != null && p.HasExited == false) p.Kill(); } } 

मुझे भी यही समस्या थी। जब http प्रतिसाद इस अपवाद को फेंकता है, तब मैं करता हूं:

 System.Diagnostics.Process.Start("mozroots","--import --quiet"); 

यह लापता प्रमाण पत्र आयात करता है और अपवाद फिर से कभी खुश नहीं हुआ।

पहला जवाब पहले से ही कहता है: विंडोज के अलावा किसी अन्य चीज़ पर मोनो कुछ भी नहीं आया है इसलिए शुरू में यह किसी भी प्रमाणपत्र पर विश्वास नहीं करता है। इसलिए क्या करना है?

डेवलपर के परिप्रेक्ष्य की समस्या से निपटने के विभिन्न तरीकों के बारे में यहां एक अच्छा लेख है: http://www.mono-project.com/archived/usingtrustedrootsrespectfully/

संक्षिप्त सारांश: आप या तो:

  • सुरक्षा चिंता को अनदेखा करें
  • समस्या की उपेक्षा करें
  • उपयोगकर्ता को बताएं और रद्द करें
  • उपयोगकर्ता को अपने जोखिम पर जारी रखने के लिए उपयोगकर्ता को जानने दें और उन्हें एक विकल्प दें

उपरोक्त लिंक प्रत्येक मामले के लिए कोड उदाहरण के साथ आता है।

यूनिटी के लिए एक और समाधान हमेशा एक बार प्रमाणपत्र को स्वीकार करने के लिए सर्विसपॉइंट मैनेजर को प्रारंभ करना है। यह काम करता है लेकिन स्पष्ट रूप से सुरक्षित नहीं है

 System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate (object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; // **** Always accept }; 

आप आईओएस बिल्ड में मोनो टीएलएस कार्यान्वयन सेट कर सकते हैं और यहां वर्णित सभी के रूप में ठीक काम करेंगे: http://massivepixel.co/blog/post/xamarin-studio-6-certificate-known (हालांकि मोनो टीएलएस के नए संस्करणों का समर्थन नहीं करता है टीएलएस, लेकिन मैंने अभी तक इस मुद्दे पर टकरा नहीं है कि यह एक समस्या है)।