更新:
尝试以下方式在Tomcat中启用客户端身份验证。
为了使 tomcat 能够利用客户端身份验证,我们需要三个证书。即 Tomcat 的服务器证书、浏览器的客户端证书和将签署上述两个证书的 CA 证书。在这里,我将展示如何在 Windows 中执行此操作。
有两种方法。
-
您应该有一个 CSR 文件,即证书签名请求。您可以将其提交给证书颁发机构,例如 Verisign 或 Comodo 或许多其他类似的机构。他们会给你证书。或者
-
您可以创建自己的证书颁发机构并签署证书。但建议仅供个人使用。
您应该安装 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"
/>
现在,将客户端的 P12 格式证书导入浏览器。然后,启动 tomcat 服务器并尝试访问 https://localhost:8443。您可以访问blog 获取此答案的详细版本。希望这会有所帮助。