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

时间:2009-10-12 01:50:04

标签: tomcat ssl

我很茫然,因为我不是一个Tomcat人。我需要使用第三方的Web服务,他们需要通过SSL进行客户端身份验证,因此他们生成并颁发了SSL证书。不幸的是,只要他们支持它,并且无法就如何实际使用给我任何指导。我很难使用这个第三方,所以不幸的是我不得不忍受他们缺乏支持。

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

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

3 个答案:

答案 0 :(得分:3)

这是一个很长的答案: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属性。

答案 1 :(得分:3)

<强>更新

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

要使tomcat利用客户端身份验证,我们需要三个证书。即Tomcat的服务器证书,浏览器的客户证书和CA的证书,它将签署上述两个证书。在这里,我将展示如何在Windows中执行此操作。

有两种方法。

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

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

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

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

  

openssl genrsa -out Serverkey.key 1024

这将生成一个文件&#34; Serverkey.key&#34;。密钥大小为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的证书导入truststore,请使用以下命令。

  

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"
           />

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

答案 2 :(得分:0)

我不知道这是关于配置Tomcat,除了能够将系统属性传递给在Tomcat中运行的Web应用程序。

提供Web应用程序的供应商确实应该能够告诉您如何在与远程Web服务建立SSL连接时从其软件获取客户端连接以使用特定的客户端证书。

例如,他们可以让他们的应用程序为SSL连接实现自定义KeyManager,以便能够从可配置的位置查找客户端证书和私钥。

如果他们没有这样做,他们可能正在使用默认的SunX509 KeyManager。

对于默认的KeyManager,您显然可以使用keytool创建一个包含证书描述的客户端证书和私钥的密钥库。然后,您可以使用以下系统参数指定密钥库:

-Djavax.net.ssl.keyStore="/path/to/keystore"
-Djavax.net.ssl.keyStorePassword="<password>"

您需要配置Tomcat以传递这些属性。