代码之家  ›  专栏  ›  技术社区  ›  dragonmantank

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

  •  6
  • dragonmantank  · 技术社区  · 16 年前

    我迷路了,因为我不是个胆小鬼。我需要使用第三方的Web服务,它们需要通过SSL进行客户端身份验证,因此它们生成并向我颁发了一个SSL证书。不幸的是,这是他们所支持的,并且不能给我任何指导 使用 它。我一直在使用第三方,所以不幸的是,我不得不忍受他们缺乏支持。

    因此,我有一个Java应用程序,一个供应商正在为我们提供(显然从来没有处理过),一个Tomcat应用服务器在CITOS 5.3上运行60.20,来自第三方的SSL证书。

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

    3 回复  |  直到 10 年前
        1
  •  3
  •   Jeremy Huiskamp    16 年前

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

        2
  •  3
  •   Shreyas    10 年前

    更新:

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

    为了使Tomcat利用客户机身份验证的优势,我们需要三个证书。即Tomcat的服务器证书、浏览器的客户端证书和将签署上述两个证书的CA证书。在这里,我将在窗口演示如何操作。

    有两种方法。

    1)您应该有一个CSR文件,即证书签名请求。您可以像这样提交给证书颁发机构 Verisign Comodo 或者像他们一样的很多人。他们会给你提供证书的。或

    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。在您将CSR用于CA之后,您可以在下面的命令的帮助下使用CA的密钥进行签名。

    openssl x509-req-days 365-in ca req.csr-signkey ca key.key-out ca.crt

    一旦您拥有了CA证书,就可以使用它来签署其他证书。

    openssl x509-req-days 365-ca ca.crt-ca key ca key.key-cacreateserial-in server req.csr-out server.crt

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

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

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

    openssl pkcs12-export-in server.crt-in key server key.key-chain-cafile ca.crt-out servercert.p12

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

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

    keytool-导入-别名certauth-keystore cacerts.jks-文件ca.crt

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

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

    keytool-importkeystore-destkeystore tomcat.keystore-srckeystore-servercert.p12-srcstoretype pkcs12-别名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 关于这个答案的详细版本。希望这有帮助。

        3
  •  1
  •   William Rose    16 年前

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

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

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

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

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

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

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