Java 服务器Tomcat中的客户端身份验证

Java 服务器Tomcat中的客户端身份验证,java,tomcat,authentication,ssl,Java,Tomcat,Authentication,Ssl,我想为相互身份验证配置SSL 我使用eclipse+Tomcat8 我这样做是为了: 我以这种方式创建了私钥: openssl genrsa -des3 -out client_key.pem 2048 openssl genrsa -des3 -out server_key.pem 2048 <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThr

我想为相互身份验证配置SSL

我使用eclipse+Tomcat8

我这样做是为了:

我以这种方式创建了私钥:

openssl genrsa -des3 -out client_key.pem 2048
openssl genrsa -des3 -out server_key.pem 2048
<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" />
我创建了自签名证书:

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
最后,我将密钥库转换为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,并按以下方式设置连接器:

openssl genrsa -des3 -out client_key.pem 2048
openssl genrsa -des3 -out server_key.pem 2048
<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 e clienttruststore.jks放在我的项目中的什么位置
  • 此图显示问题:

  • 您的证书是自签名的,这意味着它们不是由CA签署的,这意味着Chrome无法信任它们,除非您手动批准它们

  • 您在何时生成证书时提供了CN?它必须匹配您正在使用的主机名(在您的情况下是localhost),如果CN不匹配,除非您手动批准,否则Chrome将不允许SSL

  • 您说过希望进行相互身份验证,但您配置的
    clientAuth=“false”
    应该是true。至于密钥库,您应该为证书使用相同的密钥库,因此当客户端连接到它的证书时,tomcat将验证相应的证书是否位于密钥库中


  • 希望有帮助。

    在chrome上,您是否可以将证书作为例外添加?(如果没有意义,请您在问题中添加chrome页面的快照,我可以为您提供正确的步骤)记住这是一个自签名证书。因此浏览器会将其标记。我编辑帖子并添加快照。如何将证书添加为例外?您的网站已在使用https,但浏览器不接受该证书,因为该证书是自签名的,并且未经认可的证书颁发机构(CA)签名。您需要由CA签署的证书及其根证书。试试这个链接。祝你好运