博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tomcat配置HTTPS(此处验证了tomcat7和tomcat9)
阅读量:6242 次
发布时间:2019-06-22

本文共 3387 字,大约阅读时间需要 11 分钟。

hot3.png

    之前由于工作需要,项目需要从HTTP改成了HTTPS,配置过程也很简单,下面是详细步骤.

1. 生成证书

  1.1生成服务端证书
 
开始在jre的bin目录下启动dos窗口执行下执行命令:
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\tomcat.keystore -validity 18000
按照提示输入密码名称等参数
说明:keytool 是JDK提供的证书生成工具,所有参数的用法参见keytool –help
-genkey 创建新证书
-v 详细信息
-alias tomcat 以”tomcat”作为该证书的别名。这里可以根据需要修改
-keyalg RSA 指定算法
-keystore D:/tomcat.keystore 保存路径及文件名
 
-dname "CN=127.0.0.1,OU=,O=,L=,ST=,C=CN" 证书发行者身份,这里的CN要与发布后的访问域名一致,其他参数都可以忽略。由于是自己发行的证书,在浏览器访问,仍然会有警告提示。
-validity 18000证书有效期,单位为天
-storepass admin123 证书的存取密码
-keypass admin123 证书的私钥

    1.2 生成客户端证书 
    执行命令:keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore D:/client.p12 -validity 18000
    同样根据提示输入密码等参数.
说明:参数说明同上。这里的-dname 证书发行者身份可以和前面不同,到目前为止,这2个证书可以没有任何关系。下面要做的工作才是建立2者之间的信任关系。
 
    1.3 导出客户端证书 
    执行命令:keytool -export -alias client -keystore D:/client.p12 -storetype PKCS12 -storepass admin123 -rfc -file D:/client.cer
 
说明:-export 执行导出
 -file 导出文件的文件路径
 
    1.4 把客户端证书加入服务端证书信任列表 
    执行命令:keytool -import -alias client -v -file D:/client.cer -keystore D:/tomcat.keystore -storepass admin123
 
说明:参数说明同前。这里提供的密码是服务端证书的存取密码。
 
    1.5 导出服务端证书 
    执行命令:keytool -export -alias tomcat -keystore D:/tomcat.keystore -storepass admin123 -rfc -file D:/tomcat.cer
 
说明:把服务端证书导出。这里提供的密码也是服务端证书的密码。
 
    1.6 生成客户端信任列表
    执行命令:keytool -import -file D:/tomcat.cer -storepass admin123 -keystore D:/client.truststore -alias tomcat -noprompt

    通过list命令查看服务器的证书库  keytool -list -v -keystore bsm.keystore

2.Tomcat配置

    2.1修改conf/server.xml文件,找到对应的段落修改成以下
    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />
    <!--  tomcat7配置 -->
    <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" 
                SSLEnabled="true" 
                maxThreads="150" 
                scheme="https" 
                secure="true" 
                clientAuth="true" 
                sslProtocol="TLS" 
                keystoreFile="D:/tomcat.keystore" 
                keystorePass="admin123" 
                truststoreFile="D:/tomcat.keystore" 
                truststorePass="admin123"/>
    <!-- tomcat9配置 -->
    <Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="443" maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="./keystore/tomcat.keystore" 
           keystorePass="CloudSino" keyAlias="tomcat" 
           clientAuth="false" sslProtocol="TLS"/>
    clientAuth="true" 指定了双向证书认证  keyAlias="tomcat" 为证书的别名(生成证书时别名不是tomcat时需要指定)

    <Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

    2.2修改Tomcat 下conf/web.xml文件, 在</welcome-file-list>后面加入下面的节点,让服务器强制使用https(需要强转才加).

    <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>

    2.3 改成HTTPS连接后原来服务器上面的接口将无法访问,解决方法是在接口访问之前加入以下几句代码或者修改JVM启动参数(加入以下几个参数)

        双向认证:

        System.setProperty("javax.net.ssl.trustStore", "D:/client.truststore"); 
        System.setProperty("javax.net.ssl.trustStorePassword","admin123");
        System.setProperty("javax.net.ssl.keyStoreType","PKCS12");
        System.setProperty("javax.net.ssl.keyStore","D:/client.p12");
        System.setProperty("javax.net.ssl.keyStorePassword","admin123");
        单向认证:
        System.setProperty("javax.net.ssl.trustStore", "D:/client.truststore"); 

转载于:https://my.oschina.net/u/2350280/blog/1563250

你可能感兴趣的文章
北风设计模式课程---深入理解[代理模式]原理与技术
查看>>
php课程 4-14 数组如何定义使用
查看>>
winform托盘时,要运行一个实例,解决办法
查看>>
vagrant up 失败解决办法
查看>>
mysql AM/PM to 24 hours fromat
查看>>
远程唤醒UP Board
查看>>
网页打印
查看>>
Loading——spin.js
查看>>
Hadoop完全分布式环境搭建(四)——基于Ubuntu16.04安装和配置Hadoop大数据环境...
查看>>
Mule ESB工程的部署
查看>>
分离被碰撞物体, 求碰撞冲量
查看>>
js移动端 可移动滑块
查看>>
【kruscal】【最小生成树】poj3522 Slim Span
查看>>
jquery ajax提交表单数据的两种方式
查看>>
hdu 2102 A计划-bfs
查看>>
学习集合
查看>>
18校招借鉴
查看>>
JAVA第三次作业
查看>>
2017ICPC北京 J:Pangu and Stones
查看>>
Pandas 数据清洗保存
查看>>