为什么使用仅公开公钥的证书时 TLS 握手失败?

维维克·夏尔马

TLS 握手在使用仅公开公钥的证书时失败,但在使用另一个公开私钥的证书时有效。当我们使用仅公开公钥的证书时,它会给出“400 Bad Request No required SSL certificate was sent”

这里的一个关键区别是,使用公开私有的第二个证书,我们授予网络服务权限,但由于第一个证书不公开私钥,我们无法授予网络服务权限。这两个证书都已正确安装在商店中。

以下是示例代码:

public string TestCall() { 
    try { 
        string url = "Some URL"; 
        string apiKey = "Key Information"; 
        string secret = "Key Secret"; 
        string payload = "Timestamp";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "POST";
        request.ContentType = "application/json";
        request.SendChunked = false;
        request.AllowAutoRedirect = true;
        request.Date = DateTime.UtcNow;

        var keyStore = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine);
        keyStore.Open(OpenFlags.ReadOnly);

        X509Certificate clientCertificate = keyStore.Certificates.Find(X509FindType.FindByThumbprint, ConfigurationManager.AppSettings["ThumbPrint"], true)[0];
        request.ClientCertificates.Add(clientCertificate);

        var authProvider = new HmacAuthProvider();
        var headers = authProvider.GenerateAuthHeaders(apiKey, secret, payload, url);
        foreach (var header in headers)
        {
            request.Headers.Add(header.Key, header.Value);
        }

        var response = (HttpWebResponse)request.GetResponse();
        var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
        return responseString;
    }
    catch (Exception ex)
    {
        return ex.Message + " " + ex.StackTrace.ToString();
    }
}

知道这里缺少什么,没有私钥的证书没有到达服务器。

地穴32

基于证书的身份验证需要拥有相应证书的私钥。您不能仅使用公共证书(没有私钥)进行客户端身份验证,您需要私钥,因为它用于签署 TLS 握手数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TLS与客户端证书握手失败

在JDK 11下使用TLS 1.3的握手失败

TLS连接握手失败

tls:使用streadway / amqp为RabbitMQ启用tls时握手失败

TLS握手失败,并显示远程错误:tls:证书服务器错误=订购者

"SSL 握手失败:[('SSL 例程','tls_process_server_certificate','证书验证失败')]")>]>

使用HAProxy Ingress Controller时,TLS握手间歇性失败

证书管理器 - 集群颁发者错误 - tls:握手失败

使用Go / TLS发送电子邮件会导致“远程错误:握手失败”响应

PFSense OpenVPN TLS 握手失败

Hyperledger结构:TLS握手失败,并显示错误远程错误:tls:错误的证书服务器=订购者remoteaddress

最近的Java升级是否导致使用椭圆曲线服务器证书的TLS握手失败?

为什么 nodeMCU tls mbed 库从 Pushbullet API 服务器收到错误 40(握手失败)?

TLS握手步骤

TLS 握手失败错误 w/OpenSSL 1.1.x

通过Istio入口网关的TLS握手失败(tlsMode = passthrough)

docker push失败:net / http:TLS握手超时

与SSL的mysql jdbc连接在tls握手级别失败

启用筏模式后,TLS握手失败

FreeBSD 11端口acme-client的tls握手失败

使用Gatling进行负载测试时TLS握手超时

使用Office 365设置标准Go net / smtp失败,并显示“错误tls:第一条记录看起来不像TLS握手”

TLS / SSL握手(证书等)中泄漏了哪些信息?

为什么握手失败(Java SSL)

TLS握手类型174是什么意思?

Java TLS:在客户端握手时禁用SNI

从api同时请求数据时TLS握手超时

使用Logstash时SSL握手失败

ssl握手失败,使用scrapy代理