Tomcat 8 配置ssl证书(.pfx)实现 https 访问

本文详细介绍如何在Tomcat 8中配置SSL证书以实现HTTPS访问,并覆盖从证书下载、上传到具体配置步骤,包括使用默认端口访问及HTTP自动跳转HTTPS的设置。

最近项目要验收,剩下软件安全那块内容(如下图),网站需要升级 https 访问,所以我们要从域名申请的网站里把ssl证书下载下来,并配置到 服务器中,对应用系统进行升级优化。由于域名是由同事负责申请并下载(tomcat)好的,我负责配置测试工作。完成这个网站 升级 https 工作,期间碰到了很多问题也走了很多弯路,网上的很多资料都是抄袭的(或不完整,很是郁闷)。不过最终也是完成了工作,正常最多半天可以完成的,我这边花了 1 天多的时间,因为查找资料碰到很多问题。在此特别记录以下网站升级过程。


特别说明

因为网站升级,需要升级到 域名、外网 ip 、端口 等内容。我假设如下

网站域名: www.java.cn

外网ip     :    120.0.0.1

端口        :    443、8443 (https端口,其中 443 为 https 默认端口)

tomcat版本:apache-tomcat-8.0.53

tomcat目录:D:\server\apache-tomcat-8.0.53

1、ssl证书下载(tomcat服务器)

接上一篇博客,如何申请阿里云免费SSL证书(可用于https网站)并下载下来

最后一步,将证书下载到本地

下载证书的时候,选择 tomcat 下载,下载后的内容如下(第一个文件为.pfx 格式的证书,第二个是密码 后面配置需要的 ):

2、ssl证书上传到 服务器。

在服务器上的应用服务器( tomcat8 )中, 创建一个 cert 文件夹,并进将 证书上传到 cert 目录

3、配置应用服务器(tomcat):修改 server.xml文件开启 https 并添加相关内容。

说明:修改前先备份 server.xmlD:\server\apache-tomcat-8.0.53\conf\server.xml ),

找到 server.xml ,打开并找到 https 配置相关部分。( 文件中第 77 行开始注释部分,默认https配置是被关闭的 ,升级https需要开启

这里我们拷贝相关的内容,把证书信息也配置上去。截图如下:

重要说明
1、keystoreFile 为ssl证书( pfx 格式)文件路径
2、keystorePass 为证书密钥,在pfx-password.txt 文件中可以找到。
3、port 为 https 访问端口。即使用 https 访问方网站时,后面跟上的端口号是 8443 .

配置代码( tomcat 8 与 8.5 适用):

<!-- http ~ https acces HTTP/1.1  org.apache.coyote.http11.Http11NioProtocol  -->
	<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="1000" acceptCount="1000" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
			   keystoreFile="D:\server\apache-tomcat-8.0.53\conf\cert\3317168_java.cn.pfx"
			   keystoreType="PKCS12"
			   keystorePass="123456"
			   ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256" />
	

好了,到此已经网站已经升级了 https 访问。

现在可以使用 https 访问网站(必须加上https端口才能访问):

https://www.java.cn:8443/Web

原来的访问方式(http两种方式访问,公网ip 或 域名),假设外网端口为 8080:

http://120.0.0.1:8080/Web

http://www.java.cn:8080/Web

4、配置应用服务器(tomcat):使用默认端口80、443访问应用系统

大家都知道,一般我们输入一个网址,就能打开一个网站并不需要输入端口号就可以正常访问,那是因为使用了默认端口配置。

一般的,http 访问默认端口(即不输入端口号)是 80 , https 默认端口 是 443 .

例如:输入 www.baidu.com ,就能访问到百度搜索的主页,看看浏览器和服务器都做了啥。

第一步:在浏览器中输入 www.baidu.com , 打开浏览器控制台(这里使用的是 google chrome浏览器)

发现浏览器第一次方式使用 http (80端口)访问,然后请求被转发到 https 访问地址上

因为服务器做了转发,自然而是 使用 https ( 443 ) 端口访问并返回到主页:

总结:显然 http 和 https 访问都是使用默认端口访问网站的,因为我们没有在任何地方输入端口访问。


一般项目升级基本都会要求使用 https 及默认端口访问网站(即像刚刚输入百度域名那样,就可以直接访问百度搜索主页):为了达到同样的目录,现在我们也修改相关配置文件

找到 tomcat 服务器的server.xmlD:\server\apache-tomcat-8.0.53\conf\server.xml ):

修改 http 访问端口为默认端口: 80 ;redirectPort 为 443 .

修改后:

修改 https 访问端口为默认端口: 443

修改后:

注意改了 任意一处 redirectPort (https端口),其他地方也要改,端口保持一致。

好了,到此已经网站已经升级了 http及https 默认端口访问系统。

现在可以使用 https 访问网站(默认端口):

https://www.java.cn/Web

原来的访问方式(默认端口,http两种方式访问,公网ip 或 域名):

http://120.0.0.1/Web

http://www.java.cn/Web

注意,配置到这个时候,使用http + 域名访问,不会跳转到 https访问。请看第 5 步:

5、配置应用服务器:http 自动转为 https 访问配置

此操作步骤之前,网站虽然配置了https , 并可以访问。但是还是可以使用 http 直接访问的,如果原来的http也能访问(保留),就不需要此步骤了。原来的访问方式(http两种方式访问,公网ip 或 域名)。

如果网站为了安全,需要强制将 http 转为 https , 则需要做如下配置:

找到 tomcat 配置文件 web.xml ( ‪D:\server\apache-tomcat-8.0.53\conf\web.xml )

打开文件到底部,在  </webcome-file-list> 结束标签后面,加入如下代码:

<!--  http redirectTo https :   Authorization setting for SSL  --> 
	<login-config>  
		<auth-method>CLIENT-CERT</auth-method>  
		<realm-name>Client Cert Users-only Area</realm-name>  
	</login-config>  
	<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>

到此,在浏览器中输入http访问系统,将强制跳转到 https 进行访问。

现在可以使用 https 访问网站(默认端口):

https://www.java.cn/Web

原来的访问方式(默认端口,http两种方式访问,公网ip 或 域名):

http://120.0.0.1/Web    将跳转到   https://120.0.0.1/Web

http://www.java.cn/Web  将跳转到  https://www.java.cn/Web

效果图(仅供参考):

6、网站升级https中常见的问题

温馨提示:本文章只 针对 Tomcat 8 进行配置。

1)应用服务器配置好 https 端口及证书后,浏览器访问不了(不管是默认端口访问,还是其他端口)

一般情况下,主要原因是 windows 防火墙需要开启端口(内网端口),此外可能还需要做端口映射管理(外网与内网端口配置,如不清楚则要找网络管理员)

windows防火墙配置可访问端口:

请依次打开:控制面板   >  系统和安全 > Windows 防火墙

点击 window 防火墙,点击左侧菜单: 高级设置

在左侧:入站规则中,可以看到系统已经防火墙已经添加的端口及程序,

这里我们 添加 8443 端口为例:

单击右边新建规则,选择 端口 并下一步,输入端口并下一步

到此,windows防火墙配置完毕。

2)如果第一步仔细检查后没有问题,浏览器访问不了(不管是默认端口访问,还是其他端口)

此时很有可能是 应用服务器 ( tomcat ) 配置出现问题,需要打开应用服务器 的 logs 目录,查看日志检查问题。本人出现过配置https后访问不了的问题,由于网上的资料参差不齐或不完整导致配置错误。PS : tomcat 不同的版本,配置文件中的属性名或属性值都可能不太一样(这是问题的关键)。

3)Tomcat 其他版本配置

Tomcat 7 配置:

阿里云官方安装PFX格式证书

Tomcat配置SSL证书(PFX证书)

Tomcat 9 配置:

需要去网络中查询相关资料


感谢以下网友提供的资料:

Tomcat配置SSL证书(PFX证书)

Tomcat 8.5 配置https协议、http自动转向https(证书文件为 .pfx 格式)


2024-07-29 更新
Tomcat 8.5 配置SSL证书,注意版本 8.5 和 8.0 有些内容不太一样
注意:最近软件安全测试检测 tomcat 漏洞,当前版本为 8.0.53 !!!
注意:最近软件安全测试检测 tomcat 漏洞,当前版本为 8.0.53 !!!
注意:最近软件安全测试检测 tomcat 漏洞,当前版本为 8.0.53 !!!
【安全无漏洞版本,建议升级 :apache-tomcat-8.5.100  】
 

apache-tomcat-8.5.100 https证书配置:

<!-- http端口 -->
<Connector port="8900" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8901"
               maxParameterCount="1000"
               />


<!-- 配置证书文件信息  -->
<Connector port="8901" protocol="org.apache.coyote.http11.Http11NioProtocol"
               SSLEnabled="true" maxThreads="150" maxParameterCount="1000">
        <SSLHostConfig> 
			<!--证书文件所在的目录  -->                             
            <Certificate certificateKeystoreFile="E:\server\certs\xxxx.zsnbiot.cn_tomcat\xxxx.zsnbiot.cn.pfx" 
                         certificateKeystoreType="PKCS12" 
						 certificateKeystorePassword="1234567890" /> 
            <!--配置类型    刚才password文件里面的密码 -->    
        </SSLHostConfig>
    </Connector>


<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8909" protocol="AJP/1.3" redirectPort="8901" secretRequired="false" />

Tomcat 9 中配置使用 PFX 格式的 SSL 证书,需要通过修改 `server.xml` 文件中的 `<Connector>` 配置实现PFX 是一种包含私钥和证书的二进制格式,通常以 `.pfx` 或 `.p12` 为扩展名。Tomcat 使用 Java 的 `keystore` 功能来加载 PFX 文件,因此需要指定正确的 `keystoreType` 和相关参数。 ### 配置步骤 #### 1. 准备 PFX 证书文件 确保你已经拥有了 `.pfx` 格式的 SSL 证书,并知道其密码。例如:`my_certificate.pfx`,密码为 `my_password`。 #### 2. 修改 `server.xml` 文件 在 Tomcat 的 `conf` 目录下找到 `server.xml` 文件,并找到或添加一个 `<Connector>` 配置块。以下是基于 PFX 格式证书的典型配置示例: ```xml <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/path/to/your/my_certificate.pfx" keystoreType="PKCS12" keystorePass="my_password" sslEnabledProtocols="TLSv1.2,TLSv1.3" clientAuth="false" sslProtocol="TLS" /> ``` - `keystoreFile`:PFX 文件的路径,可以是绝对路径或相对路径。 - `keystoreType`:设置为 `PKCS12`,因为 PFX 文件通常使用 PKCS#12 格式。 - `keystorePass`:PFX 文件的密码。 - `sslEnabledProtocols`:建议启用较新的协议,如 `TLSv1.2` 和 `TLSv1.3`,以确保安全性。 - `sslProtocol`:设置为 `TLS`,表示使用 TLS 协议进行加密通信。 - `clientAuth`:是否启用客户端证书认证,通常设为 `false`,除非有特殊需求。 #### 3. 重启 Tomcat 保存对 `server.xml` 的修改后,重启 Tomcat 服务以使配置生效: ```bash # 停止 Tomcat /path/to/tomcat/bin/shutdown.sh # 启动 Tomcat /path/to/tomcat/bin/startup.sh ``` #### 4. 验证 HTTPS 配置 使用浏览器或命令行工具(如 `curl`)访问 `https://your-domain`,确保网站能够通过 HTTPS 正常访问,并且没有证书错误。 --- ### 注意事项 - 确保 Tomcat 使用的 Java 版本支持 TLS 1.2 或更高版本,建议使用 Java 8 或更高版本。 - 如果 PFX 文件中包含多个证书(例如中间证书),确保它们已正确排序,以避免证书链不完整的问题。 - 如果证书文件路径为相对路径,应相对于 Tomcat 的 `CATALINA_HOME` 目录。 --- ### 示例代码 以下是一个完整的 `<Connector>` 配置示例,供参考: ```xml <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/opt/tomcat/conf/my_certificate.pfx" keystoreType="PKCS12" keystorePass="your_pfx_password" sslEnabledProtocols="TLSv1.2,TLSv1.3" clientAuth="false" sslProtocol="TLS" /> ``` --- ###
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值