zoukankan      html  css  js  c++  java
  • 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证书即可。

  • 相关阅读:
    【Git】分支管理
    【Java】jprofiler工具初上手
    【中间件】JMS
    【Idea】编译问题Intellij Error: Internal caches are corrupted or have outdated format
    【测试】测试用例选择
    【DevOps】
    【Unix】z/OS系统
    【数据库】表空间释放
    【数据库pojo类】Oracle数据库中各数据类型在Hibernate框架中的映射
    基于闭包实现的显示与隐藏
  • 原文地址:https://www.cnblogs.com/got-my-way/p/4110394.html
Copyright © 2011-2022 走看看