2016-12-29 181 views
1

我想配置SSL以进行相互身份验证。服务器Tomcat中的客户端身份验证

我用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 

我创建了truststore并导入证书:

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 

最后我转换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支持。所以,我在服务器文件夹中配置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项目。它运作良好。

问题是当我的项目在URL上的服务器上运行时https://localhost:8443/myproject Google Chrome显示红色三角形(此页面不安全(破损的HTTPS))。

  1. 怎么了?
  2. 我在哪里把client.jks和clienttruststore.jks放在我的项目中?

此图为问题:

Snapshot of Chrome Page Showing Broken HTTPS

+0

在Chrome上,你是否可以添加证书作为例外?(如果它没有意义,请你为该问题添加一个快照,我可以给你正确的步骤)请记住它的一个自签名证书。所以浏览器会标记它。 – jay

+0

我编辑帖子并添加快照。如何将证书添加为例外? – Federico

+3

您的网站已在使用https,但浏览器不接受证书,因为它的自签名并未由认可的证书颁发机构(CA)签署。您需要由CA签名的证书以及其根证书。试试这个链接https://www.mulesoft.com/tcat/tomcat-ssl。祝你好运。 – jay

回答

1
  1. 你的证书是自签名的,这意味着它们不是由CA签名,这意味着除非你手动批准他们的Chrome不能信任他们。

  2. 生成证书时是否提供CN?它必须与您使用的主机名相匹配(在您的情况下,它是本地主机),如果CN不匹配,Chrome将不会允许SSL,除非您手动批准。

  3. 你说你想要相互认证,但你配置clientAuth="false"它应该是真的。至于密钥库,你应该使用相同的密钥库作为证书,因此当客户端连接到它的证书时,tomcat会验证相应的证书是否位于密钥库中。

希望它有帮助。

相关问题