인증서 유효성 검사 SSL 암호화 된 웹 페이지 잡아 (HTTPS),

프로젝트가 필요하기 때문에, HTTPS 페이지에서 일부 데이터를 전송하고 데이터가 반환 얻을 필요가있다. 직접와 일반 HTTP 페이지 취급하기 쉽고, HttpWebRequest를 쉽게 달성 할 수있다. 사람이 HTTP 웹 페이지입니다하지만 볼에 로그인해야하지만 어려운 달성 할 경우 사용 신원 정보는 풀뿌리 HTTP 프로토콜의 콘텐츠 HttpWebRequest를 플러스를 구성하고 서버에 다음 한 왕복 한 후 추출 된 세션 ID가 처리 할 수있는 전송합니다. 이제 HTTPS + 인증서가 먼저 발생, 외국에서 해결책을 찾기 위해 온라인으로 거의 마지막 데이터에 대한 중국의 온라인 쿼리,보기 쉽게 나중에 사람에 대한 기사를 쓰기!

여기에 설명하지, 코드입니다!

시스템을 사용하여;
System.Data을 사용함;
System.Configuration을 사용함;
System.Web을 사용함;
System.Web.Security을 사용함;
시스템을 사용하여;
System.Net을 사용함;
System.IO을 사용함;
System.Text을 사용함;
에서는 System.Security.Cryptography을 사용함;
System.Security.Cryptography.X509Certificates을 사용함;
System.Runtime.InteropServices을 사용함;

/// <요약>
/// 클래스 1的摘要说明
/// </ 요약>
공용 클래스 클래스 1
{
    전용 정적 INT의 CERT_STORE_PROV_SYSTEM = 10;
    개인 정적 INT의 CERT_SYSTEM_STORE_CURRENT_USER = (1 << 16);
    /// 전용 정적 INT의 CERT_SYSTEM_STORE_LOCAL_MACHINE = (2 << 16);

    [같이 DllImport ( "CRYPT32"의 EntryPoint = "CertOpenStore"charset에서 = CharSet.Unicode, SetLastError = TRUE)]
    공용 static 통근을 IntPtr CertOpenStore (
        INT storeProvider, INT encodingType,
        INT hcryptProv, INT 플래그 문자열 pvPara);

    [같이 DllImport ( "CRYPT32"의 EntryPoint = "CertEnumCertificatesInStore"charset에서 = CharSet.Unicode, SetLastError = TRUE)]
    공용 static 통근을 IntPtr CertEnumCertificatesInStore (
        IntPtr입니다 storeProvider,
        을 IntPtr prevCertContext);

    [같이 DllImport ( "CRYPT32"의 EntryPoint = "CertCloseStore"charset에서 = CharSet.Unicode, SetLastError = TRUE)]
    공공 정적 통근자의 부울 CertCloseStore (
        을 IntPtr storeProvider는
        플래그 INT);

    X509CertificateCollection의 m_certs;

    공용 클래스 1 ()
    {
        m_certs = 새로운 X509CertificateCollection ();


        IntPtr입니다 storeHandle;
        storeHandle = CertOpenStore (CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER 'MY');
        IntPtr입니다 currentCertContext;
        currentCertContext = CertEnumCertificatesInStore (storeHandle (을 IntPtr) 0);
        int로 I = 0;
        반면 (currentCertContext = (을 IntPtr) 0!)
        {
            m_certs.Insert는 (i ++ X509Certificate에 새로운 (currentCertContext));
            currentCertContext = CertEnumCertificatesInStore (storeHandle, currentCertContext);
        }
        CertCloseStore (storeHandle, 0);
    }

    공공 INT 초기화 ()
    {
        IntPtr입니다 storeHandle;
        storeHandle = CertOpenStore (CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER 'MY');
        IntPtr입니다 currentCertContext;
        currentCertContext = CertEnumCertificatesInStore (storeHandle (을 IntPtr) 0);
        int로 I = 0;
        반면 (currentCertContext = (을 IntPtr) 0!)
        {
            m_certs.Insert는 (i ++ X509Certificate에 새로운 (currentCertContext));
            currentCertContext = CertEnumCertificatesInStore (storeHandle, currentCertContext);
        }
        CertCloseStore (storeHandle, 0);

        m_certs.Count를 반환;
    }

    공공 X509Certificate에이 [INT 지수]
    {
        얻을
        {
            // 인덱스 한계를 확인합니다.
            (인덱스 <0 || 인덱스> m_certs.Count) 경우
                는 null;
            다른
                리턴 m_certs [인덱스];
        }
    }
}


-------------------------------------------------- -------------------------


시스템을 사용하여;
System.Data을 사용함;
System.Configuration을 사용함;
System.Web을 사용함;
System.Web.Security을 사용함;
System.Web.UI을 사용함;
System.Web.UI.WebControls을 사용함;
System.Web.UI.WebControls.WebParts을 사용함;
System.Web.UI.HtmlControls을 사용함;

System.Text을 사용함;
System.Net을 사용함;
System.IO을 사용함;

에서는 System.Security.Cryptography을 사용함;
System.Security.Cryptography.X509Certificates을 사용함;
System.Runtime.InteropServices을 사용함;

내부 클래스 AcceptAllCertificatePolicy : ICertificatePolicy
{
    공공 AcceptAllCertificatePolicy ()
    {
    }

    공공 부울 CheckValidationResult (ServicePoint SPOINT, X509Certificate에 인증서, WebRequest 클래스 wRequest, INT certProb)
    {
        TRUE를 반환;
    }
}

공공 부분 클래스 _Default : System.Web.UI.Page
{
    보호 정적 문자열 cookieHeader;

    보호 보이드를 Page_Load (객체 송신자있는 EventArgs E)
    {
    }


    보호 공극 btnSend_Click (객체 송신자있는 EventArgs E)
    {

        새로운 AcceptAllCertificatePolicy ServicePointManager.CertificatePolicy = ();


        = @ postData를 문자열 "CREDITID = CDB992362323";
        인코딩 = Encoding.GetEncoding 인코딩 ( "GB2312")
        문자열 strUrl = https://www.server.com/asdfjlsdf.jsp ;
        바이트 [] = 데이터 encoding.GetBytes (postData를) ;
        // 요청을 준비 ...  
        HttpWebRequest를 myRequest =합니다 (HttpWebRequest를)이 WebRequest.Create (strUrl)
        myRequest.ClientCertificates.Add는 (S [0]); // 인증서를 고객이 선택할 수 있도록하기 위해 밖으로 통과, 그러나 여기 내 테스트 프로그램입니다 수 있습니다, 직접 내가 필요로하는 선택.
        = myRequest.Method의 "POST";
        myRequest.ContentType = "파일 응용 프로그램 / X는-WWW-형태-urlencoded를";
        myRequest.ContentLength = data.length입니다;
        myRequest.KeepAlive = true로;

        () = newStream myRequest.GetRequestStream 스트림;
        //发送数据  
        newStream.Write (데이터 0 data.length입니다);
        newStream.Close ();

        //读取回来的数据
        HttpWebResponse 클래스 입술 = (HttpWebResponse 클래스) myRequest.GetResponse ();
        위해 StreamReader SR = 새에서는 StreamReader (res.GetResponseStream (), System.Text.Encoding.Default);
        txtAccept.Text sr.ReadToEnd = ();
        sr.Close ();
        res.Close ();  

        반환;
       }

}

HTTPS : //www.cnblogs.com/ziyang/archive/2008/07/10/1240089.html 재현

추천

출처blog.csdn.net/weixin_34130389/article/details/93161290