2014-04-05 3 views
2

나는 Asp.net에서 Merchantlink Payment Gateway에 대한 코드를 가지고 있습니다. 이제 IOS에서 달성하고자하는 것과 동일한 일이 있습니다.IOS에서 X509 클라이언트 인증서를 사용하는 방법?

이 Asp.net 코드에서는 X509 인증서를 사용하고 localuser 컴퓨터에 먼저 설치 한 다음 HttpWebRequest 메서드에서이 인증서를 전달합니다. 다음은 Asp.net에서 사용되는 코드 스 니펫입니다. 참고 : 인증서 ObjectObjectX509Certificate2입니다.

webRequest = (HttpWebRequest)WebRequest.Create("Some URI"); 
webRequest.ProtocolVersion = HttpVersion.Version10; 
webRequest.Method = "POST"; 
webRequest.UserAgent = "AGENT NAME"; 
webRequest.ContentType = "text/xml"; 
webRequest.ContentLength = requestBytes.Length; 
webRequest.KeepAlive = false; 
webRequest.ClientCertificates.Add(cert); 

다음

System.Net.ServicePointManager.ServerCertificateValidationCallback = 
    delegate(Object sender2, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { return true; }; 

    using (Stream requestStream = webRequest.GetRequestStream()) 
    { 
     requestStream.Write(requestBytes, 0, requestBytes.Length); 
     using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse()) 
     { 
      Stream dataStream = webResponse.GetResponseStream(); 
      StreamReader reader = new StreamReader(dataStream); 
      string responseFromServer = reader.ReadToEnd(); 
      txtResponse.Text = responseFromServer; 
     } 
    } 

나는 누구도 날이 안내서 우리가 어떻게 NSURLRequest 방법으로 클라이언트 인증서를 추가 할 수 주시기 바랍니다 수 있습니다 IOS에 대한 목표 C에서 이것을 달성 할 수있는 방법을 모른다 IOS에 인증서를로드하고 NSUrlRequest와 함께 보냅니다.

답변

0

은 ... 다음은 모든 서버 확인을 수행 하지 있습니다 제공 한 코드가 표시 Asp.net

에 사용되는 코드의 조각이다. 당신은 모든 것을 나쁜 사람 (공격자의 당신에게 감사)에서조차 위조 인증서를 받아들이는 것 : 나는 IOS에 대한 목표 C에서 이것을 달성 할 수있는 방법을 모르는

System.Net.ServicePointManager.ServerCertificateValidationCallback = 
    delegate(Object sender2, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { return true; }; 

을 ..

NSURLConnectionDelegate을 사용해야하고 -connection:didReceiveAuthenticationChallenge:에 대한 구현을 제공해야합니다.


OWASP에는 공개 키 고정을 수행 할 수있는 몇 가지 샘플 코드가 있습니다. OWASP 코드는 여러분의 코드와 일종의 반대입니다. OWASP 코드는 코드와 같은 인증서로 응답하는 호스트가 아닌 예상 호스트와 항상 통신하고 있는지 확인합니다. Certificate and Public Key Pinning을 참조하십시오.

최소한 OWASP 코드는 인증서 확인에서 움직이는 부분을 보여줍니다.


여기에 하나의 CA를로드 일부 C# 코드의 다음 하나의 CA와 체인을 확인 : How to verify chain in RemoteCertificateValidationCallback?. 아마도 ASP.net에서 ServerCertificateValidationCallback을 어떻게 수행해야할까요? 이 없으면 어떤 상점에도 CA를 설치해야합니다. 또한 CA Zoo (서버 인증을 허용 한 수 백명의 CA)를 피합니다.

Merchantlink를 사용하려면 해당 CA를 받아야합니다. Merchantlink 또는 Merchanlink의 CA라고 주장하면 누구나 실패하게됩니다. 그것은 나쁜 사람이 될 것이기 때문에 좋은 일입니다.


은 CA를 발견하고 검증을 위해이 기능을 사용하려면, 당신은 Verisign의 클래스 3 CA를 사용할 필요 이상에서

$ openssl s_client -connect www.merchantlink.com:443 
CONNECTED(00000003) 
depth=2 C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 2006 VeriSign, Inc. - 
    For authorized use only", CN = VeriSign Class 3 Public Primary Certification Authority - G5 
verify error:num=20:unable to get local issuer certificate 
verify return:0 
... 

따라서 Use of Root Certificates으로 이동하여 루트 3, VeriSign 클래스 3 주 CA - G5을 다운로드하십시오.

$ openssl s_client -connect www.merchantlink.com:443 -CAfile PCA-3G5.pem 
CONNECTED(00000003) 
depth=3 C = US, O = "VeriSign, Inc.", OU = Class 3 Public Primary Certification Authority 
verify return:1 
depth=2 C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 2006 VeriSign, Inc. - For authorized use only", CN = VeriSign Class 3 Public Primary Certification Authority - G5 
verify return:1 
depth=1 C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = Terms of use at https://www.verisign.com/rpa (c)06, CN = VeriSign Class 3 Extended Validation SSL SGC CA 
verify return:1 
depth=0 1.3.6.1.4.1.311.60.2.1.3 = US, 1.3.6.1.4.1.311.60.2.1.2 = Delaware, businessCategory = Private Organization, serialNumber = 2578637, C = US, postalCode = 10017, ST = New York, L = New York, street = 270 Park Avenue, O = "Chase Paymentech Solutions, LLC.", OU = Enterprise Web Architecture, CN = www.merchantlink.com 
verify return:1 
--- 
Certificate chain 
0 s:/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/businessCategory=Private Organization/serialNumber=2578637/C=US/postalCode=10017/ST=New York/L=New York/street=270 Park Avenue/O=Chase Paymentech Solutions, LLC./OU=Enterprise Web Architecture/CN=www.merchantlink.com 
    i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)06/CN=VeriSign Class 3 Extended Validation SSL SGC CA 
1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)06/CN=VeriSign Class 3 Extended Validation SSL SGC CA 
    i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5 
2 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5 
    i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority 
--- 
... 
Start Time: 1397396657 
Timeout : 300 (sec) 
Verify return code: 0 (ok) 
... 
:

적절한 루트로

, 당신은 은 OpenSSL에서 검증 오류 (-CAfile PCA-3G5.pem의 사용에 주목을)하지