1

クライアント証明書認証を使用していくつかの xml を https サイトに投稿する必要がありますが、正常に実行できませんでした。

以下のようなプロバイダーから提供された2つの.pemファイルがあります:(すべてのデータを送信できないため、カットされています)

証明書.pem:

-----BEGIN CERTIFICATE----- MIIC0DCCAjmgAwIBAgIKAd8CIHEBAwIEpjANBgkqhkiG9w0BAQUFADCBmTELMAkG

---エンド証明書-----

key.pem:

-----RSA 秘密鍵の開始----- MIICWwBAAKBgQC+HN6jHJD1zoGLHYj1ycvg1yajll5zb3gExoWv7k+RbXLGuDEX

-----END RSA 秘密鍵-----

私がやろうとしていたことは

private static string HttpRequest(string url, string data)
        {
            HttpWebRequest rq = (HttpWebRequest)WebRequest.Create(url);


            //string privateKey = File.ReadAllText("c:\\key.pem");

            //privateKey = privateKey.Replace("-----BEGIN RSA PRIVATE KEY-----", "");
            //privateKey = privateKey.Replace("-----END RSA PRIVATE KEY-----", "");
            //privateKey = privateKey.Replace("\n", "");

            //Byte[] byteArr = Convert.FromBase64String(privateKey);

            //How do I use below .pem files here to authentica
            rq.ClientCertificates.Add(clientcert);
            rq.Method = "POST";
            rq.Proxy = null;
            rq.ContentType = "application/www-form-urlencoded";

            string dataToSend = data;

            byte[] byteArray = Encoding.UTF8.GetBytes(dataToSend);
            rq.ContentLength = byteArray.Length;

            string responseFromServer = null;

            try
            {
                Stream dataStream = rq.GetRequestStream();
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();

                WebResponse _WebResponse = rq.GetResponse();
                dataStream = _WebResponse.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);

                responseFromServer = reader.ReadToEnd();
            }
            catch (Exception ex)
            {


            }

            return responseFromServer;
        }
4

2 に答える 2

4

秘密鍵と pem 証明書を #pkcs12 形式に変換する必要があります。

openssl pkcs12 -inkey private.key -in client_certificate.pem -export -out client_certificate.p12

この後、C# コードでこの p12 ファイルを指定できます。

rq.ClientCertificates.Add(X509Certificate.CreateFromCertFile("c:\\client_certificate.p12"));

于 2017-04-17T09:24:41.053 に答える
0

証明書(公開鍵)をリクエストに追加してサーバーに送信する必要があります。私の知る限り、サーバーは秘密鍵を使用して要求を検証します。

公開鍵ファイルが機能しない場合は、ASN.1DER形式に変換する必要がある場合は単にロードしてみてください。

rq.ClientCertificates.Add(X509Certificate.CreateFromCertFile("c:\\cert.pem"));
于 2013-01-09T17:00:14.657 に答える