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

使用SSL的Tomcat客户端身份验证,tomcat,ssl,Tomcat,Ssl,我不知所措,因为我不是一个喜欢雄猫的人。我需要使用第三方的web服务,他们需要通过SSL进行客户端身份验证,所以他们生成并向我颁发了SSL证书。不幸的是,这是他们所支持的,不能给我任何关于如何实际使用它的指导。我一直在使用这个第三方,所以不幸的是,我不得不忍受他们缺乏支持 因此,我所拥有的是一个供应商为我们提供的Java应用程序(显然他从未处理过这个问题),一个在CentOS 5.3上运行6.0.20的Tomcat应用程序服务器,以及来自第三方的SSL证书 在这一点上我需要做什么?我能在网上找到

我不知所措,因为我不是一个喜欢雄猫的人。我需要使用第三方的web服务,他们需要通过SSL进行客户端身份验证,所以他们生成并向我颁发了SSL证书。不幸的是,这是他们所支持的,不能给我任何关于如何实际使用它的指导。我一直在使用这个第三方,所以不幸的是,我不得不忍受他们缺乏支持

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


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

下面是一个很长的答案:

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


如果配置tomcat是个问题,那么您读过了吗?特别要注意Connector元素的clientAuth属性。

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

提供web应用程序的供应商应该能够告诉您如何从他们的软件获得客户端连接,以便在与远程web服务建立SSL连接时使用特定的客户端证书

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

如果他们没有这样做,他们可能正在使用默认的SunX509密钥管理器

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

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

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

更新:

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

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

有两种方法

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

  • 您可以创建自己的证书颁发机构并签署证书。但建议仅为个人使用而执行此操作

  • 您应该安装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的证书导入truststore,请使用以下命令

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

    您可以根据需要提供别名。请注意在执行上述命令后被询问时给出的密码。我们将在server.xml文件中使用该密码。这同样适用于下面的命令

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

    keytool-importkeystore-destkeystore-tomcat.keystore-srckeystore-ServerCert.p12-srcstoretypkcs12-别名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. 有关此答案的详细版本,请访问。希望这有帮助。

    所以我所要做的就是生成一个密钥库(我想不使用端口属性),当我的应用程序访问第三方(比如,通过SOAP)时,它将接收SSL身份验证请求并发送我的客户端SSL?如果它们