赞
踩
最近项目要验收,剩下软件安全那块内容(如下图),网站需要升级 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
接上一篇博客,如何申请阿里云免费SSL证书(可用于https网站)并下载下来
最后一步,将证书下载到本地
下载证书的时候,选择 tomcat 下载,下载后的内容如下(第一个文件为.pfx 格式的证书,第二个是密码 后面配置需要的 ):
在服务器上的应用服务器( tomcat8 )中, 创建一个 cert 文件夹,并进将 证书上传到 cert 目录
说明:修改前先备份 server.xml ( D:\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
大家都知道,一般我们输入一个网址,就能打开一个网站并不需要输入端口号就可以正常访问,那是因为使用了默认端口配置。
一般的,http 访问默认端口(即不输入端口号)是 80 , https 默认端口 是 443 .
例如:输入 www.baidu.com ,就能访问到百度搜索的主页,看看浏览器和服务器都做了啥。
第一步:在浏览器中输入 www.baidu.com , 打开浏览器控制台(这里使用的是 google chrome浏览器)
发现浏览器第一次方式使用 http (80端口)访问,然后请求被转发到 https 访问地址上
因为服务器做了转发,自然而是 使用 https ( 443 ) 端口访问并返回到主页:
找到 tomcat 服务器的server.xml ( D:\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
此操作步骤之前,网站虽然配置了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>
现在可以使用 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
效果图(仅供参考):
1)应用服务器配置好 https 端口及证书后,浏览器访问不了(不管是默认端口访问,还是其他端口)
一般情况下,主要原因是 windows 防火墙需要开启端口(内网端口),此外可能还需要做端口映射管理(外网与内网端口配置,如不清楚则要找网络管理员)
windows防火墙配置可访问端口:
请依次打开:控制面板 > 系统和安全 > Windows 防火墙
点击 window 防火墙,点击左侧菜单: 高级设置
在左侧:入站规则中,可以看到系统已经防火墙已经添加的端口及程序,
这里我们 添加 8443 端口为例:
单击右边新建规则,选择 端口 并下一步,输入端口并下一步
到此,windows防火墙配置完毕。
2)如果第一步仔细检查后没有问题,浏览器访问不了(不管是默认端口访问,还是其他端口)
此时很有可能是 应用服务器 ( tomcat ) 配置出现问题,需要打开应用服务器 的 logs 目录,查看日志检查问题。本人出现过配置https后访问不了的问题,由于网上的资料参差不齐或不完整导致配置错误。PS : tomcat 不同的版本,配置文件中的属性名或属性值都可能不太一样(这是问题的关键)。
3)Tomcat 其他版本配置
Tomcat 7 配置:
Tomcat 9 配置:
需要去网络中查询相关资料
感谢以下网友提供的资料:
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" />
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。