tomcat 配置客户端证书认证

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

以下是具体的配置过程。

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

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

/usr/java/jdk1.6.0_43/bin/keytool -validity 36500 -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.6.0_43/bin/keytool -validity 36500 -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.6.0_43/bin/keytool -validity 36500 -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.6.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.6.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证书即可。

 

posted @ 2016-04-25 11:08  Beef Liu  阅读(3182)  评论(0编辑  收藏  举报