tomcat 配置客户端证书认证

时间:2021-07-15 03:18:26

在完成配置客户端证书认证后,浏览器以https访问服务器的时候,会提示选择证书,之后,服务器端会验证证书。也就意味着只有拥有有效证书的客户端才能打开该网站。

以下是具体的配置过程。

1. 在服务器端生成相关证书

(1) 生成服务器证书容器。

/usr/java/jdk1..0_43/bin/keytool -validity  -genkey -v -alias server_test -keyalg RSA -keystore server.keystore -dname "CN=105.12.201.31,OU=test,O=test,L=shanghai,ST=shanghai,c=cn" -storepass test001 -keypass test001

其中,

validity 指定了有效期多少天,

dname 设定了签名中包含的一些信息,其中注意,据说CN指定的ip地址需和访问的ip一致(未测试过不相同的时候是否就会拒绝)。

keyalg 指定签名的算法,RSA或者DSA

storepass和keypass分别指定容器存储密码和读取密码。设置成相同的密码,因为tomcat里只有一个密码的设置。

(2) 生成信赖的客户端证书容器

/usr/java/jdk1..0_43/bin/keytool -validity  -genkey -v -alias server_test_trust -keyalg RSA -keystore server_trust.keystore -dname "CN=105.12.201.31,OU=test,O=test,L=shanghai,ST=shanghai,c=cn" -storepass test002 -keypass test002

(3) 生成客户端用秘钥对

/usr/java/jdk1..0_43/bin/keytool -validity  -genkeypair -v -alias client_1 -keyalg RSA -storetype PKCS12 -keystore client_1.p12 -dname "CN=client_1,OU=test,O=test,L=shanghai,ST=shanghai,c=cn" -storepass test003 -keypass test003

导出客户端用证书

/usr/java/jdk1..0_43/bin/keytool -export -v -alias client_1 -keystore client_1.p12 -storetype PKCS12 -storepass test003 -rfc -file client_1.cer

(4) 将客户端用的证书导入至服务端信赖的客户端的证书容器

/usr/java/jdk1..0_43/bin/keytool -import -v -alias client_1 -file client_1.cer -keystore server_trust.keystore -storepass test002

2. 修改tomcat的配置文件 conf/server.xml

找到原先的https的配置部分,默认是处于注释状态,将它放开

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
/>

修改为:

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="${catalina.base}/keystore/server.keystore" keystorePass="test001"
truststoreFile="${catalina.base}/keystore/server_trust.keystore" truststorePass="test002"
/>

3. web app中设置强制SSL访问

  WEB-INF/web.xml中

    <!-- 强制SSL,即http请求自动跳转成https -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern><!-- 全站使用SSL -->
</web-resource-collection>
<user-data-constraint>
<description>SSL required</description>
<!-- CONFIDENTIAL: 确保传输数据不被修改,不能被查看 -->
<!-- INTEGRAL: 确保传输数据不被修改 -->
<!-- NONE: 不做特殊限制-->
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

4. 客户端PC导入上面生成的 client_test.cer 以及 client_test.p12 后,重启浏览器,即可访问

  初次访问会弹出选择证书的对话框,选中导入的cer证书即可。