2017-03-15 94 views
0

我正在创建一个网站(与OpenResty,但我不认为是相关的),它只接受客户端证书验证的HTTPS连接。我遵循http://www.integralist.co.uk/posts/clientcertauth.html来生成我自己的证书颁发机构,证书签名请求和CRT。然后我测试了一下,当我去到一个URL与Python谷歌浏览器使用证书的网站

certName = "mycert" 
cert = (certName + ".crt", certName + ".key") 
response = requests.get(url, params=urlencode(payload), cert=cert, verify=False, stream=True) 

现在我的网络服务器正确地接受这个CRT,我试图访问来自谷歌Chrome相同的URL。我使用设置 - > HTTPS/SSL - >管理证书 - >导入导入我的CRT文件。但是,每当我转到URL时,我总是收到400个错误请求 - 没有发送所需的SSL证书。通过查看nginx错误日志,我确认“客户端没有发送所需的SSL证书”

如何让Chrome浏览器使用特定URL的证书?

+0

对于客户端身份验证您所需要的证书和私钥(在一个的CertStore条目)。该网页伤害了我的眼睛,但它看起来像你使用openssl;如果是这样,你可以使用openssl将私钥和证书链合并到pkcs12(又名PFX)中,并将其导入Chrome使用的Windows商店中,请参阅http://stackoverflow.com/questions/808669/convert-a-cert- pem-certificate-to-a-pfx-certificate或http://stackoverflow.com/questions/553149/is-it-possible-to-convert-an-ssl-certificate-from-a-key-file-to- a-pfx –

+0

请注意,这并不表示Chrome会将其用于“特定网址”;它将用于任何请求在此证书中使用CA名称的证书的服务器。由于您显然设置了自己的CA,可能只有您控制的服务器才会使用该CA名称申请证书。 –

回答

0

这里有几件事要解决。

  1. 您是否已将CA证书安装在相应的CA存储中?
  2. 您将需要导入客户端证书以及当前用户存储中的私钥。文件扩展名是.pfx。您目前正在收到400错误,因为浏览器认为它没有任何客户端证书可以使用。
  3. 您不能指定chrome将特定的证书用于特定的URL。

参见上TLS相互验证是如何工作的我这篇文章:https://blogs.msdn.microsoft.com/kaushal/2015/05/27/client-certificate-authentication-part-1/