【发布时间】:2017-06-27 17:44:13
【问题描述】:
我正在创建一个网站(使用 OpenResty,但我不认为这是相关的),它只接受带有客户端证书验证的 HTTPS 连接。我按照http://www.integralist.co.uk/posts/clientcertauth.html 生成我自己的证书颁发机构、证书签名请求和 CRT。然后我测试了当我使用 python 访问 URL 时,我的网络服务器正确地接受了这个 CRT
certName = "mycert"
cert = (certName + ".crt", certName + ".key")
response = requests.get(url, params=urlencode(payload), cert=cert, verify=False, stream=True)
现在,我正在尝试从 Google Chrome 访问相同的 URL。我使用设置 --> HTTPS/SSL --> 管理证书 --> 导入来导入我的 CRT 文件。但是,每当我访问 URL 时,总是会收到 400 Bad Request - 没有发送所需的 SSL 证书。通过查看 nginx 错误日志,我确认“客户端发送了不需要的 SSL 证书”
如何让 Chrome 使用特定 URL 的证书?
【问题讨论】:
-
对于客户端身份验证,您需要证书和私钥(在一个 certstore 条目中)。那个网页伤害了我的眼睛,但看起来你使用的是 openssl;如果是这样,您可以使用 openssl 将私钥和证书链组合成 pkcs12(又名 PFX)并将其导入 Chrome 使用的 Windows 商店,请参阅 stackoverflow.com/questions/808669/… 或 stackoverflow.com/questions/553149/…
-
请注意,这不会告诉 Chrome 将其用于“特定 URL”;它将用于使用此证书中的 CA 名称请求证书的任何服务器。由于您显然设置了自己的 CA,因此大概只有您控制的服务器会使用该 CA 名称请求证书。
标签: windows ssl nginx https ssl-certificate