2

申し訳ありませんが、これは私の最初の投稿であり、できるだけ説明しようとします...

証明書を必要とする HTTPS Web サイトにアクセスするために HTTPWebRequest を変換する際に問題が発生しています。ローカルの開発マシンでは、CAC カード リーダーを使用して CAC カードからのクライアント証明書を使用して、サイトへの Web 要求を作成できます。このサイトにアクセスするために、このコードを開発/製品サーバーにプッシュする必要があるときに問題が発生します。サーバー上にいるときに CAC カードを読み取ることができませんが、IIS 6.0 で使用できるサーバー証明書を持っています。

サーバーでクライアントの CAC カード証明書を取得できますか? 見れるお店はありますか?または、検索できるサーバー ストアはありますか?

このサーバー証明書を使用する手順がわかりません。これをコーディングする必要があるのか​​、IIS サーバー マネージャーを使用して有効にする必要があるのか​​ はわかりません。これは、動作しているローカル開発マシン上の私のコードです。ServerCertficateValidationCallback を追加して、開発サーバーでテストしました。

   protected void Page_Load(object sender, EventArgs e)
   { 
        ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);

        ServicePointManager.MaxServicePointIdleTime = 300000;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://url");
        request.Accept = "text/xml, */*";
        request.Method = "GET";
        request.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-us");
        request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; .NET CLR 3.5.30729;)";
        request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
        request.Credentials = CredentialCache.DefaultCredentials;
        request.KeepAlive = false;

        X509Certificate myCert = null;
        X509Store store = new X509Store("My");

        store.Open(OpenFlags.ReadOnly);

        int i = 0;
        foreach (X509Certificate2 m in store.Certificates)
        {
             if (i == 0)
                myCert = m;
             i++;
        }

        if (myCert != null)
        {
             request.ClientCertificates.Add(myCert);
        }

        //take the response and create the xml document to parse
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string str = reader.ReadToEnd();

        ...
        }

        public static bool ValidateServerCertificate(object sender, X509Certificate certificate,X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            //certificate is in here
            if (sslPolicyErrors == SslPolicyErrors.None)
               return true;

            sslPE = "SSLPolicyErros: " + sslPolicyErrors;

            return false;
        }

デプロイのために、リクエストを送信する Web サイトによって信頼されているサーバー証明書を使用するプロセスに精通している人はいますか? 私たちのサイト (私たちのサイトでは CAC 認証が必要です) からこのサイトにアクセスするすべてのユーザーに、サーバー証明書を使用してもらいたいです。誰かが CAC カードからユーザーのクライアント証明書を使用するより良いアイデアを持っていない限り。これをすべてまとめるのに苦労しています。助けていただければ幸いです。

4

1 に答える 1