HttpWebRequest客户端认证

本文关键字:认证 客户端 HttpWebRequest | 更新日期: 2023-09-27 17:51:11

我需要将一些xml发送到具有客户端证书身份验证的https站点,但无法成功。

我有2 .pem文件从供应商提供如下:(我不能发送所有的数据如此切割)

cert.pem:

——开始证书MIIC0DCCAjmgAwIBAgIKAd8CIHEBAwIEpjANBgkqhkiG9w0BAQUFADCBmTELMAkG

——最终证书——

key.pem:

-----BEGIN RSA私钥-----MIICWwIBAAKBgQC + HN6jHJD1zoGLHYj1ycvg1yajll5zb3gExoWv7k + RbXLGuDEX

-----结束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;
        }

HttpWebRequest客户端认证

您需要将您的私钥和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"));

您需要通过将证书(公钥)添加到请求中将其发送到服务器。据我所知,服务器使用私钥来验证请求。

尝试简单地加载您的公钥文件,如果不工作,您需要将其转换为ASN.1 DER格式。

rq.ClientCertificates.Add(X509Certificate.CreateFromCertFile("c:''cert.pem"));