• Tomcat配置SSL连接


    1.服务器端单项认证

    在Tomcat的server.xml文件中,已经提供了现成的配置SSL连接器的代码,只要把<Connector>元素的注释去掉即可:

    <!—  Define a SSL HTTP/1.1 Connector on port 8443  This connector uses the JSSE configuration, when using APR, the   connector should be using the OpenSSL style configuration  described in the APR documentation   -->  

    <Connector port="8443"  protocol="HTTP/1.1"   SSLEnabled="true"     maxThreads="150" scheme="https"  secure="true"  clientAuth="false" sslProtocol="TLS"  keystoreFile="F:/server.keystore"  keystorePass="123456" /> 

    实际上,基于SSL的HTTPS使用的默认端口是443。但Tomcat在这里将HTTPS端口设置为8443。<Connector>配置里的一些属性参数如下表:

    clientAuth如果设为true(即双向认证)

    keystoreFile指定keystore文件的存放位置

    keystorePass指定keystore的密码

    2.服务器和客户端双向认证

    Server需要:

    1)KeyStore: 其中保存服务端的私钥

    2)Trust KeyStore:其中保存客户端的授权证书

    同样,Client需要:

    1)KeyStore:其中保存客户端的私钥

    2)Trust KeyStore:其中保存服务端的授权证书

    生成key和证书

    1)生成服务端私钥,并且导入到服务端KeyStore文件中

    keytool -genkey -alias serverkey -keystore serverKey.keystore

    2)根据私钥,导出服务端证书

    keytool -export -alias serverkey -keystore serverKey.keystore -file server.crt

    server.crt就是服务端的证书

    3)将服务端证书,导入到客户端的Trust KeyStore中

    keytool -import -alias serverkey -file server.crt -keystore serverCrt.keystore

    tclient.keystore是给客户端用的,其中保存着受信任的证书

    采用同样的方法,生成客户端的私钥,客户端的证书,并且导入到服务端的Trust KeyStore中

    1)keytool -genkey -alias clientkey -keystore clientKey.keystore

    2)keytool -export -alias clientkey -keystore clientKey.keystore -file client.crt

    3)keytool -import -alias clientkey -file client.crt -keystore clientCrt.keystore

    如此一来,生成的文件分成两组

    服务端保存:serverKey.keystore clientCrt.keystore

    客户端保存:clientKey.keystore serverCrt.kyestore

    client采用clientKey.keystore中的clientkey私钥进行数据加密,发送给server

    server采用clientCrt.keystore中的client.crt证书(包含了clientkey的公钥)对数据解密,如果解密成功,证明消息来自client,进行逻辑处理

    server采用serverKey.keystore中的serverkey私钥进行数据叫米,发送给client

    client采用serverCrt.kyestore中的server.crt证书(包含了serverkey的公钥)对数据解密,如果解密成功,证明消息来自server,进行逻辑处理

    如果过程中,解密失败,那么证明消息来源错误。不进行逻辑处理。这样就完成了双向的身份认证。

    tomcat配置:

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

         keystoreFile="f:/serverKey.keystore" keystorePass="123456" keystoreType="JKS" 

        truststoreFile="f:/clientCrt.keystore" truststorePass="123456" truststoreType="JKS"

      />

    truststoreFile指定truststore(受信任的客户端证书库)文件的存放位置

    truststorePass指定truststore(受信任的客户端证书库)的密码

    1. 对单个WEB项目使用默认SSL安全访问

    要使你自己的WEB程序应用SSL安全访问,请遵循如下配置

    在你应用的 web.xml 文件的 <web-app></web-app> 中加入如下配置

    <login-config>

                 <!-- Authorization setting for SSL -->

            <auth-method>CLIENT-CERT</auth-method>

            <realm-name>Client Cert Users-only Area</realm-name>

        </login-config>

        <security-constraint>

                 <!-- Authorization setting for SSL -->

            <web-resource-collection >

                <web-resource-name >SSL</web-resource-name>

                <url-pattern>/*</url-pattern>

            </web-resource-collection>

            <user-data-constraint>

                <transport-guarantee>CONFIDENTIAL</transport-guarantee>

            </user-data-constraint>

    </security-constraint>

    你会发现,即使使用 http://....:8080 来访问你的应用程序,它也会重定向为 https://....8443 访问,也就是说,你的应用已经强制使用SSL安全访问层。

  • 相关阅读:
    php程序去除文件 bom头
    类继承接口后,实现接口的方法
    virtual和abstract的使用场景分别是什么?待更新。
    get请求和post请求的总结
    ES6新语法,持续更新
    display:flex中的不懂的问题,待处理
    css相邻兄弟选择器(+),伪类(:hover),伪元素(::after)
    HTML中的input的type类型
    命令行打开程序的集合
    sqlserver 常用的语句
  • 原文地址:https://www.cnblogs.com/qixing/p/3286641.html
Copyright © 2020-2023  润新知