फेंकता है IOS के लिए Xamarin फॉर्म ऐप में प्रमाणीकरण के लिए क्लाइंट प्रमाणपत्र का उपयोग करने का प्रयास कर रहा हूं, लेकिन कुछ भी काम नहीं करता है। अगर मैं अनुरोध शुरू करता हूं तो ऐप 100 सेकंड के डिफ़ॉल्ट टाइमआउट पर प्रतीक्षा करता है (मैंने इसे HttpWebRequest.Timeout के साथ कम करने की कोशिश की, लेकिन इसे सेट करना अनदेखा प्रतीत होता है), उसके बाद, मुझे निम्न अपवाद मिलता है: प्रतिक्रिया स्ट्रीम प्राप्त करने में त्रुटि (ReadDone1): प्राप्त करें विफलताक्लाइंट सर्टिफिकेट्स के साथ एक्समरिन फॉर्म https वेबएक्सप्शन
विंडोज कंसोल एप्लिकेशन के समान कोड ठीक काम करता है। यहाँ कुछ (पठनीयता के लिए सरलीकृत) के टुकड़े पुन: पेश करने:
ग्राहक:
var clientCertificate = new X509Certificate2(data, pwd);
var result = await ExecuteRequest("https://server/user.aspx", clientCertificate);
public static async Task<string> ExecuteRequest(Uri uri, X509Certificate2 clientCertificate)
{
var hwr = (HttpWebRequest)HttpWebRequest.Create(uri);
if (clientCertificate != null)
{
hwr.ClientCertificates.Add(clientCertificate);
}
hwr.Method = "GET";
try
{
var resWebResonse = await hwr.GetResponseAsync();
var stream = resWebResonse.GetResponseStream();
var sr = new StreamReader (stream);
return sr.ReadToEnd();
}
catch (Exception ex)
{
Debug.WriteLine($"Error executing Webrequest to {uri}: {ex}");
}
return null;
}
सर्वर: user.aspx
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %>
<%@ Import Namespace="System.Security.Principal" %>
<script runat="server">
public void Page_Load(object sender, EventArgs e)
{
try
{
Regex userRegEx = new Regex("CN=(.*)@", RegexOptions.IgnoreCase | RegexOptions.Compiled);
if (Request.ClientCertificate.IsPresent)
{
var cert = new X509Certificate2(Request.ClientCertificate.Certificate);
var identity = new GenericIdentity(cert.Subject, "ClientCertificate");
var principal = new GenericPrincipal(identity, null);
var m = userRegEx.Match (principal.Identity.Name);
Response.Write (m.Groups[1].Value);
}
else
Response.Write("No Client-Certificate");
Response.End();
}
catch (Exception ex)
{
if (!(ex is System.Threading.ThreadAbortException))
Response.Write(ex.ToString());
}
}
</script>
यह अपवाद मैं बार आ रही है है:
System.Net.WebException: Error getting response stream (ReadDone1): ReceiveFailure
---> System.IO.IOException: Unable to read data from the transport connection: Connection reset by peer.
---> System.Net.Sockets.SocketException: Connection reset by peer
at System.Net.Sockets.Socket.Receive (System.Byte[] buffer, System.Int32 offset, System.Int32 size, System.Net.Sockets.SocketFlags socketFlags) [0x00017]
in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.0.0.0/src/mono/mcs/class/referencesource/System/net/System/Net/Sockets/Socket.cs:1773
at System.Net.Sockets.NetworkStream.Read (System.Byte[] buffer, System.Int32 offset, System.Int32 size) [0x0009b]
in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.0.0.0/src/mono/mcs/class/referencesource/System/net/System/Net/Sockets/NetworkStream.cs:513
--- End of inner exception stack trace
---
at Mono.Net.Security.MobileAuthenticatedStream.EndReadOrWrite (System.IAsyncResult asyncResult, Mono.Net.Security.AsyncProtocolRequest& nestedRequest) [0x00056]
in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.0.0.0/src/mono/mcs/class/System/Mono.Net.Security/MobileAuthenticatedStream.cs:335
at Mono.Net.Security.MobileAuthenticatedStream.EndRead (System.IAsyncResult asyncResult) [0x00000]
in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.0.0.0/src/mono/mcs/class/System/Mono.Net.Security/MobileAuthenticatedStream.cs:278
at System.Net.WebConnection.ReadDone (System.IAsyncResult result) [0x00027]
in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.0.0.0/src/mono/mcs/class/System/System.Net/WebConnection.cs:475
--- End of inner exception stack trace
---
at System.Net.HttpWebRequest.EndGetResponse (System.IAsyncResult asyncResult) [0x00059]
in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.0.0.0/src/mono/mcs/class/System/System.Net/HttpWebRequest.cs:1031
at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncCoreLogic (System.IAsyncResult iar, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, System.Threading.Tasks.Task`1[TResult] promise, System.Boolean requiresSynchronization) [0x0000f]
in <6314851f133e4e74a2e96356deaa0c6c>:0
--- End of stack trace from previous location where exception was thrown
---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c]
in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.0.0.0/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:151
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00037] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.0.0.0/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.0.0.0/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.0.0.0/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128
at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult() [0x00000]
in <6314851f133e4e74a2e96356deaa0c6c>:0
at EWOIS.iOS.WebHelper+<ExecuteRequest>d__4.MoveNext() [0x0012e] in C:\xxxx\WebHelper.cs:70
- विजुअल स्टूडियो 2017 v15.3.5
- Xamarin 4.7.9.45
- Xamarin iOS और Xamarin मैक एसडीके 11.0.0.0
- तैनाती लक्ष्य आईओएस 9.3 (10.3 नहीं करता है काम के साथ-साथ)
- Windows Server 2008 R2 एंटरप्राइज़ SP1
- IIS 7
मैं AppDelegate.cs में सर्वर प्रमाणपत्र का एक चेक (जो हमारे डोमेन-सीए द्वारा हस्ताक्षरित किया गया है) कहा, यह SslPolicyErrors.None रिपोर्ट
System.Net.ServicePointManager.ServerCertificateValidationCallback +=
(sender, cert, chain, sslPolicyErrors) =>
{
if (cert != null)
System.Diagnostics.Debug.WriteLine($"Servercertificate: {cert.Subject}, SSL-Policy-Errors: {sslPolicyErrors}");
return sslPolicyErrors == SslPolicyErrors.None; // return true does not work either (and is not recommended for security reasons)
}
अनुरोध करता है अगर मैं वेब सर्वर पर प्रमाणपत्र आवश्यकता को अक्षम करता हूं, तो कनेक्शन काम कर रहा है।
मैं भी System.Net.HttpClientकोशिश की, लेकिन जब ClientCertificate संपत्ति :(
अब तक पहुँचने यह एक NotImplementedException फेंकता मैं पूरी तरह से अनजान आगे क्या अन्य सभी प्रश्नों के प्रयास करने के लिए ... हूँ मैं कुछ साल के थे और किसी भी काम कर समाधान
प्रतिक्रिया। अंत में प्रतिक्रिया के लिए वास्तव में आवश्यक नहीं है, मैं बस चाहता था कि सर्वर प्रतिक्रिया में कोई HTML नहीं जोड़ता है। सर्वर समस्या नहीं होनी चाहिए, क्योंकि क्लाइंटकोड कंसोल-एप्लिकेशन के रूप में काम करता है, लेकिन Xamarin आईओएस में नहीं। मैं अभी भी सोमवार को इसका परीक्षण करूंगा, मैं घर से अपने काम तक नहीं पहुंच सकता। प्रमाण-जांच गुम है, – Brandtware
सलाह के लिए धन्यवाद मैंने एक और प्रतिक्रिया जोड़ा। कैच-ब्लॉक में, कुछ भी नहीं बदला। मैंने आईआईएस-लॉग की जांच की, ऐसा लगता है कि अनुरोध सर्वर को भी हिट नहीं करता है, क्लाइंट साइड समस्या की तरह दिखता है ... – Brandtware