我想配置 SSL 以进行相互验证。
我使用 eclipse + tomcat 8。
我做这些段落:
我是这样创建私钥的:
openssl genrsa -des3 -out client_key.pem 2048
openssl genrsa -des3 -out server_key.pem 2048
我创建了自签名证书:
openssl req -new -x509 -key client_key.pem -out client.pem -days 365 -config <path to>\openssl.cnf
openssl req -new -x509 -key server_key.pem -out server.pem -days 365 -config <path to>\openssl.cnf
我创建了信任库并导入了证书:
keytool –importcert -trustcacerts –keystore clienttruststore.jks –storetype jks –storepass <truststore_password> -file <path-to-file>\server.pem
keytool –importcert -trustcacerts –keystore servertruststore.jks –storetype jks –storepass <server_truststore_password> -file <path-to-file>\client.pem
我把服务端和客户端的证书和私钥分别组合起来:
openssl pkcs12 –export –inkey client_key.pem –in client.pem –out client.p12
openssl pkcs12 –export –inkey server_key.pem –in server.pem –out server.p12
最后我将 keystore 转换为 pkcs12 格式:
keytool –importkeystore –srckeystore client.p12 –srcstoretype pkcs12 –destkeystore client.jks –deststoretype jks
keytool –importkeystore –srckeystore server.p12 –srcstoretype pkcs12 –destkeystore server.jks –deststoretype jks
在此之后,我在 Tomcat 上配置了配置 SSL/TLS 支持。因此,我在 Servers 文件夹中配置了 server.xml 并以这种方式设置连接器:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="path\to\server.jks" keystorePass="*******" keystoreType="JKS"
truststoreFile="path\to\servertruststore.jks" truststorePass="********" truststoreType="JKS" />
最后,我清理并构建了项目。
我在 Eclipse 中创建了一个名为“myproject”的动态 Web 项目。它运作良好。
问题是当 myproject 在 URL https://localhost:8443/myproject
的服务器上运行时
Google Chrome 显示红色三角形(此页面不安全(损坏的 HTTPS))。
- 怎么了?
- 我应该将 client.jks 和 clienttruststore.jks 放在项目的什么位置?
这张图显示了问题:
最佳答案
您的证书是自签名的,这意味着它们不是由 CA 签名的,这意味着除非您手动批准它们,否则 Chrome 无法信任它们。
生成证书时您是否提供了 CN?它必须与您使用的主机名相匹配(在您的情况下为 localhost),如果 CN 不匹配,除非您手动批准,否则 Chrome 将不允许使用 SSL。
你说你想要相互认证,但是你配置了
clientAuth="false"
应该是真的。至于 keystore ,您应该为证书使用相同的 keystore ,因此当客户端连接到它的证书时,tomcat 将验证相应的证书是否位于 keystore 中。
希望对您有所帮助。
关于java - 服务器 Tomcat 中的客户端身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41384650/