【问题标题】:Client authentication in server Tomcat服务器 Tomcat 中的客户端身份验证
【发布时间】:2016-12-29 17:40:05
【问题描述】:

我想为相互认证配置 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

最后我将密钥库转换为 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 的服务器上运行时 谷歌浏览器显示红色三角形(此页面不安全(HTTPS 损坏))。

  1. 怎么了?
  2. 我应该将 client.jks 和 clienttruststore.jks 放在我的项目中的什么位置?

这张图显示问题:

【问题讨论】:

  • 在 chrome 上,您可以将证书添加为例外吗?(如果没有意义,您能否在问题中添加 chrome 页面的快照,我可以给您正确的步骤)记住它是一个自签名证书。所以浏览器会标记它。
  • 我编辑帖子并添加快照。如何将证书添加为例外?
  • 您的网站已经在 https 上运行,但浏览器不接受证书,因为它是自签名的,并且没有由公认的证书颁发机构 (CA) 签名。您需要由 CA 签名的证书及其根证书。试试这个链接mulesoft.com/tcat/tomcat-ssl。祝你好运。

标签: java tomcat authentication ssl


【解决方案1】:
  1. 您的证书是自签名的,这意味着它们不是由 CA 签名的,这意味着除非您手动批准,否则 Chrome 无法信任它们。

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

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

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2012-06-10
    • 2012-08-28
    • 2011-11-04
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多