Tomcat 配置https证书

HTTPS 是安全套接字层超文本传输协议,在http 的基础上加入了 SSL协议,需要使用证书来校验身份。 HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。其默认端口为:443。越来越多的网站使用了https,这里简介其相关配置。

一、使用jdk创建证书

这里在安装有 JDK 环境的情况下进行,利用 keytool 工具生成 tomcat 证书,可使用 --help 命令查看相关残数据说明:,具体如下:

 C:\Users\admin_tx>keytool --help
密钥和证书管理工具

命令:

 -certreq            生成证书请求
 -changealias        更改条目的别名
 -delete             删除条目
 -exportcert         导出证书
 -genkeypair         生成密钥对
 -genseckey          生成密钥
 -gencert            根据证书请求生成证书
 -importcert         导入证书或证书链
 -importpass         导入口令
 -importkeystore     从其他密钥库导入一个或所有条目
 -keypasswd          更改条目的密钥口令
 -list               列出密钥库中的条目
 -printcert          打印证书内容
 -printcertreq       打印证书请求的内容
 -printcrl           打印 CRL 文件的内容
 -storepasswd        更改密钥库的存储口令

使用 "keytool -command_name -help" 获取 command_name 的用法


 C:\Users\admin_tx>keytool -genkeypair --help
keytool -genkeypair [OPTION]...

生成密钥对

选项:

 -alias <alias>                  要处理的条目的别名
 -keyalg <keyalg>                密钥算法名称
 -keysize <keysize>              密钥位大小
 -sigalg <sigalg>                签名算法名称
 -destalias <destalias>          目标别名
 -dname <dname>                  唯一判别名
 -startdate <startdate>          证书有效期开始日期/时间
 -ext <value>                    X.509 扩展
 -validity <valDays>             有效天数
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

使用 "keytool -help" 获取所有可用命令

这里使用如下命令生成证书:

1
keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "E:\tomcat.keystore"

参数说明
-genkeypair 表示生成密钥对,
-alias 表示别名
-keyalg 表示密钥算法名称
-keystore 表示密钥保存的名称

然后安装提示输入,但需要注意的是 名字与姓氏 那个是填写域名的。 此外,尽量前后密码一致,避免后面出现密码错误的问题。

如下图:

这里随便写了个域名,是一个不存在的二级域名,为了能够访问,需要在 C:\Windows\System32\drivers\etc 路径下的 hosts 文件添加:

1
127.0.0.1 test.imtianx.cn

二、tomcat 配置 https 证书

通过上面的步骤,生成了密钥,修改tomcat配置文件:/conf/server.xml, 添加如下设置:

1
2
3
4
5
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\keystore\tomcat.keystore"
keystorePass="imtianx" />

其中,keystoreFile 指明密钥位置,keystorePass 指明密钥密码。
在该配置文件中有 https的 Connector 配置,被注释掉了。https 默认端口为 443

然后启动tomcat,即可在浏览器中输入:https://test.imtianx.cn/ 访问,由于是自己生成的,浏览器会提示不安全,在高级中选择 继续访问即可,如下:

三、域名绑定 第三方https证书

上面介绍了自己生成密钥配置https的方法,只适合本地测试,对于真实的域名无法使用。这里,选择第三方 https 证书提供商,在真实的环境中使用。

这里选择 阿里云 的 云盾证书服务 ,在其官网购买免费版——证书类型为 :免费型DV SSL,然后根据要求补全信息。待审核通过后在控制台下载对应环境的证书,这里提前申请了 mvvm.tech 这个域名。 由于个人习惯使用tomcat作为web服务器,下载 tomcat 的证书,包含如下内容:

  • 证书文件:214248632560457.pem
  • 证书私钥文件:214248632560457.key
  • PFX格式证书文件:214248632560457.pfx
  • PFX格式证书密码文件:pfx-password.txt

这里采用的是tomcat8.0,支持pfx格式的证书,无需格式转换。
将上述文件全部放到 tomcat 目录下的 cert 中,然后按照步骤二中的方式配置,其中 keystoreFilep指定为 cert 中 pfx 格式证书路径及名称,keystorePass 为 pfx-password.txt 中的密码。

1
2
keystoreFile="/home/apache-tomcat-8.0.46/cert/214248632560457.pfx"
keystorePass="214248632560457"

这里为了简单,建立个空项目,并将其导出 war ,放入 womcat/webapps 中,修改 /conf/server.xml,在 host 节点下添加如下映射文件:

1
2
3
4
5
<Host name="mvvm.tech" appBase="webapps" unpackWARs="true"
autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Alias>mvvm.tech</Alias>
<Context path="" docBase="./TestHttps" reloadable="false" />
</Host>

此外,需要在域名管理的后台添加与域名解析: 类型为 A 记录,值为 服务器 ip.

然后,开放 443端口,重启tomcat,在浏览器中输入:https://mvvm.tech 即可访问。如下图:

这里是在 CentOS中配置的,对于web环境配置不了解的,可点击此处查看。

如果在浏览器输入 mvvm.tech, 依然可以访问,以http的形式,可修改tomcat配置将其转发到 https 。
这里 对 https 使用 其默认的 443端口,对80及8009的端口 转发到 443,修改 redirectPort 参数,如下:

1
2
3
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

此外,需要对 web.xml进行修改,末尾添加如下内容:

1
2
3
4
5
6
7
8
9
10
<security-constraint>
<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即可。至此,https 配置结束。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器