使用 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密钥库名称,即存放位置
-extX.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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以按照以下步骤使用 keytool 工具生成自签名的 SSL 证书: 1. 打开命令行窗口,并导航到 JDK 的 bin 目录下。 2. 输入以下命令以生成 SSL 证书: ```bash keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize 2048 ``` 其中,`mydomain` 是证书别名,`keystore.jks` 是证书库的名称。 3. 在运行上述命令后,会提示输入一些信息,如下所示: ```bash What is your first and last name? [Unknown]: example.com What is the name of your organizational unit? [Unknown]: IT What is the name of your organization? [Unknown]: Example Corp What is the name of your City or Locality? [Unknown]: Anytown What is the name of your State or Province? [Unknown]: CA What is the two-letter country code for this unit? [Unknown]: US Is CN=example.com, OU=IT, O=Example Corp, L=Anytown, ST=CA, C=US correct? [no]: yes Enter key password for <mydomain> (RETURN if same as keystore password): ``` 按照提示输入相关信息,其中 `CN`(Common Name)应该与您的域名相匹配。 4. 然后,系统会提示输入密钥库密码和密钥密码。这两个密码应该是不同的。如果您希望两个密码相同,可以按回车键跳过第二个密码的设置。 5. 生成证书后,可以使用以下命令查看证书的详细信息: ```bash keytool -list -v -keystore keystore.jks ``` 这将输出证书的详细信息,包括证书别名、证书类型、证书序列号、颁发者、有效期等。 6. 最后,将生成证书用于您的应用程序中。 注意:在生产环境中,应该使用信任的第三方机构颁发的证书。这些证书可以通过购买或免费获取。自签名的证书仅适用于开发和测试环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值