El problemo:我希望拥有自己的CA并发出签名证书,这些证书可以在内部用于测试通过HTTPS进行通信的Android应用和REST Web服务。我选择的服务器是Tomcat 7。 我已按照指南在Tomcat上根据其文档的Installing a Certificate from a Certificate Authority section使用keytool设置SSL:
keytool -genkey -alias tomcat -keystore keystore.jks
keytool -certreq -alias tomcat -file certreq.csr -keystore keystore.jks
要签署证书签名请求,我使用openssl:
openssl ca -config openssl.cnf -out server.crt -extensions android_ext \
-extfile android_ext.cnf -md sha256 -infiles certreq.csr
最后,我将CA证书和服务器证书导入密钥库:
keytool -import -alias root -keystore keystore.jks -trustcacerts -file cacert.crt
keytool -import -alias tomcat -keystore keystore.jks -file server.crt
之后我设置tomcat使用keystore.jks并启动它。如果我进入Firefox并尝试使用https进行导航,则会出现“安全连接失败”错误。
运行openssl s_client我得到this output。
运行keytool -printcert我得到this output。
如果我跑openssl verify -CAfile .\ca\cacert.pem .\server.crt
我得到:
。\ server.crt:好的
就我对SSL和证书的了解而言,我无法找到为什么当我通过Firefox时出现错误。最有趣的是,使用Chrome会给我一个“连接重置”错误。
我需要一些帮助,但可能会出现什么问题?有什么想法吗?
答案 0 :(得分:0)
La soluzione
所以经过两天试图找出可能出现的问题之后 - 我在这里作为最后的手段发布了 - 一位同事指出Chrome会逐步取消sha1签名证书 - 请查看this,{{ 3}}和this。并且显然默认情况下使用sha1标记openssl。因此,只需为具有更强签名的CA创建新证书并再次签名即可。以下是将来参考的命令:
openssl req -new -key .\private\cakey.pem.old -out .\ca\ca.csr -sha256 -config openssl.cnf
openssl x509 -req -days 8052 -sha256 -in .\ca\ca.csr -signkey .\private\cakey.pem -out ca\cacert.pem