使用 JDK 自带的工具 keytool 生成受信任的证书实现 tomcat 的 https 访问

一、基础环境

操作系统:Windows 或 Linux

JDK 版本:1.8.0_191 (64位)

tomcat 版本:8.5.35 (64位)

二、解决问题

在开发环境或只有内网的生产环境中,没有域名和公网 IP 的情况下,无法向 CA 机构申请 SSL 证书,我们可以使用 JDK 自带的工具 keytool 生成证书来实现 tomcat 的的 https 访问。

三、操作步骤

1、将 tomcat 启动,看是否能够正常运行。

2、打开命令提示符或shell 执行以下命令:

keytool -genkeypair -alias tomcat -keyalg RSA -validity 3650 -keypass 123456 -keystore D:\tomcat.keystore -ext SAN=ip:192.168.40.65

命令的参数含义:

-genkeypair 生成密钥对
-alias 要处理的条目的别名
-keyalg 密钥算法名称
-validity 有效天数
-keypass 密钥口令
-keystore 密钥库名称,即存放位置
-ext X.509 扩展

3、输入命令后会弹出以下提示,按照提示操作即可。

设置密钥库的口令,一般可以设置为:123456 。您的名字与姓氏是什么?这里需要输入用户访问的地址,如果地址做了映射,需要输入映射之后的地址,如果没有映射,输入服务器地址即可。其他地方可以按照实际情况填写,也可以留空直接按回车。最后弹出一个警告和一行命令,将命令复制出来,直接执行即可。

4、输入命令后会弹出以下提示,按照提示操作即可。

输入源密钥库的口令后,程序自动完成迁移。

5、使用以下命令导出证书,会生成一个 cer 文件。

keytool -exportcert -rfc -alias tomcat -file D:\tomcat.cer -keystore D:\tomcat.keystore -storepass 123456

命令的参数含义:

-exportcert 导出证书
-rfc 以 RFC 样式输出
-alias 要处理的条目的别名
-file 输出文件名
-keystore 密钥库名称
-storepass 密钥库口令

6、导入到JRE 证书库,其中 %JAVA_HOME% 为 tomcat 使用的 JDK的 JAVA_HOME,最后输入 Y 按回车。

keytool -import -trustcacerts -alias tomcat -file D:\tomcat.cer -keystore %JAVA_HOME%\jre\lib\security\cacerts -storepass changeit

命令的参数含义:

-import 导入证书或证书链
-trustcacerts 信任来自 cacerts 的证书
-alias 要处理的条目的别名
-file 输入文件名
 -keystore 密钥库名称
-storepass 密钥库口令 (默认为changeit)

7、将生成 tomcat.keystore 复制到 tomcat 的 conf 目录下。

8、配置 tomcat/conf/server.xml  将下面的内容

<!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
 -->

替换为:

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

8、导入证书。找到生成 tomcat.cer 然后双击该证书,然后点击【安装证书】,点击【下一步】,【存储位置】选择【本地计算机】,点击【下一步】,选中【将所有的证书都放入下列存储】,然后单击【浏览】,选择【受信任的根证书颁发机构】,然后点击【确定】,点击【下一步】,点击【完成】。然后弹出提示【导入完成】。

9、重新启动 tomcat ,待启动完成后,打开 IE 浏览器,输入https://192.168.40.65:8443/ 即可通过 https 访问tomcat。

10、我们希望访问 http 地址,tomcat 自动 跳转到 https。打开tomcat/conf/web.xml 在 </welcome-file-list> 与 </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> 

保存后,重新启动tomcat 即可实现在地址栏中可以直接输入地址 “http” 会自动跳转成为 “https://” 。

11、如果想只输入 IP 地址,不加端口号直接访问服务的话。可以将端口号 8080 修改成 HTTP 协议的默认端口号 80。把端口号 8443 修改成 HTTPS 协议的端口号 443 即可。

参考资料:

1、https://blog.csdn.net/oicqxiesidilieric/article/details/8464834

2、https://www.cnblogs.com/luchangyou/p/5889161.html

猜你喜欢

转载自blog.csdn.net/u011046671/article/details/103203892