使用SSL的Tomcat客户端身份验证

dra*_*ank 6 ssl tomcat

我不知所措,因为我不是一个Tomcat人.我需要使用第三方的Web服务,他们需要通过SSL进行客户端身份验证,因此他们生成并颁发了SSL证书.不幸的是,这是他们支持它,并不能给我任何方向如何实际使用它.我坚持使用这个第三方,所以不幸的是我不得不忍受他们缺乏支持.

所以我所拥有的是供应商为我们提供的Java应用程序(显然从未必须处理过这个问题),在CentOS 5.3上运行6.0.20的Tomcat应用服务器,以及来自第三方的SSL证书.

在这一点上我需要做什么?我在网上找到的就是如何设置密钥库,以便我的应用程序可以对连接到它的东西使用客户端身份验证,而不是在需要连接到其他人时,或者如何在端口8443上使用SSL(我知道如何做已经设置).

Shr*_*yas 8

更新:

尝试以下方法在 Tomcat 中启用客户端身份验证。

为了让 tomcat 充分利用 Client Authentication,我们需要三个证书。即用于 Tomcat 的服务器证书、用于浏览器的客户端证书和将签署上述两个证书的 CA 证书。在这里,我将展示如何在 Windows 中执行此操作。

有两种方法。

  1. 您应该有一个 CSR 文件,即证书签名请求。您可以将其提交给VerisignComodo或许多其他类似的证书颁发机构。他们会给你证书。或者

  2. 您可以创建自己的证书颁发机构并签署证书。但建议仅用于个人用途。

您应该安装 Java 和 OpenSSL 以执行以下步骤。

要生成证书签名请求,您应该拥有密钥。要生成密钥,请在 CMD 中键入以下命令。

openssl genrsa -out Serverkey.key 1024

这将生成一个文件“Serverkey.key”。密钥大小为 1024。您可以根据需要提供它。

现在借助以下命令生成 CSR 文件。

openssl req -new -key Serverkey.key -out ServerReq.csr -config /path/to/openssl.cnf

执行此命令后,系统会要求您提供一些信息。之后,您将在目录中找到 CSR 文件。您可以将此文件提交给 CA。如果您这样做是为了个人使用,并且您想要拥有自己的 CA,请在上面给出的两个命令的帮助下为您的 CA 创建一个密钥和 CSR。获得 CA 的 CSR 后,您可以在以下命令的帮助下使用 CA 的密钥进行签名。

openssl x509 -req -days 365 -in CAReq.csr -signkey CAKey.key -out CA.crt

拥有 CA 证书后,您可以使用它来签署其他证书。

openssl x509 -req -days 365 -CA CA.crt -CAkey CAKey.key -CAcreateserial -in ServerReq.csr -out Server.crt

您也可以对客户端证书使用相同的命令。

我们这里的客户端浏览器将接受 P12 格式的证书。P12 格式是一个包含您的证书和密钥的文件。

要将 CRT 转换为 P12,请使用以下命令。

openssl pkcs12 -export -in Server.crt -inkey ServerKey.key -chain -CAfile CA.crt -out ServerCert.p12

在 tomcat 中,有一个信任库将拥有 CA 的证书,另一个信任库将拥有服务器的密钥和证书(p12 文件)。

要将 CA 的证书导入信任库,请使用以下命令。

keytool -import -alias CertAuth -keystore caCerts.jks -file CA.crt

您可以随意指定别名。请注意您在执行上述命令后询问时提供的密码。我们将在 server.xml 文件中使用该密码。同样适用于以下命令。

要将 p12 格式证书导入密钥库,请使用以下命令。

keytool -importkeystore -destkeystore tomcat.keystore -srckeystore -ServerCert.p12 -srcstoretype PKCS12 -alias 1

现在,将 tomcat 的 server.xml 更改如下。

<Connector port="8443" 
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           SSLEnabled="true" scheme="https" secure="true"
           truststoreFile="path/to/truststorefile" truststorePass="password" 
           keystoreFile="path/to/keystorefile" keystorePass="password"
           clientAuth="true" sslProtocol="TLS"
           />
Run Code Online (Sandbox Code Playgroud)

现在,将客户端的 P12 格式证书导入浏览器。然后,启动tomcat服务器,尝试访问https://localhost:8443。您可以访问博客以获取此答案的详细版本。希望这可以帮助。


Jer*_*amp 4

这是很长的答案:http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html

不要相信我的话,但我相信,作为客户端,当服务器请求时,客户端身份验证将自动执行。

如果配置 tomcat 是个问题,您是否阅读过http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html?特别要注意 Connector 元素的 clientAuth 属性。