02_Tomcat设置https安全访问
2018-02-25 本文已影响43人
明天你好向前奔跑
@Author Jacky Wang , 转载请注明出处http://www.jianshu.com/p/956dc7b245ad
一、阿里云申请SSL证书并部署到tomcat
阿里云免费SSL证书申请
选择Symantec后再选择增强型OV SSL后会显示出一个免费版DV SSL的选择,勾选后完成申请即可。
1. 下载证书
下载证书,并上传到相应的服务器中去,这里以tomcat服务器为例。下载完毕后的文件如下:
02.png2. 安装证书
以下列举阿里云给出的https证书设置帮助文档:
Tomcat支持JKS格式证书,从Tomcat7开始也支持PFX格式证书,两种证书格式任选其一。
文件说明:
1. 证书文件214402563650362.pem,包含两段内容,请不要删除任何一段内容。
2. 如果是证书系统创建的CSR,还包含:证书私钥文件214402563650362.key、PFX格式证书文件214402563650362.pfx、PFX格式证书密码文件pfx-password.txt。
--------------------------------------------------------------------------------------------------------------------------------
1、证书格式转换
在Tomcat的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,附件中只包含214402563650362.pem文件,还需要将私钥文件拷贝到cert目录,命名为214402563650362.key;如果是系统创建的CSR,请直接到第2步。
到cert目录下执行如下命令完成PFX格式转换命令,此处要设置PFX证书密码,请牢记:
openssl pkcs12 -export -out 214402563650362.pfx -inkey 214402563650362.key -in 214402563650362.pem
2、PFX证书安装
找到安装Tomcat目录下该文件server.xml,一般默认路径都是在 conf 文件夹中。找到 <Connection port="8443"标签,增加如下属性:
keystoreFile="cert/214402563650362.pfx"
keystoreType="PKCS12"
#此处的证书密码,请参考附件中的密码文件或在第1步中设置的密码
keystorePass="证书密码"
完整的配置如下,其中port属性根据实际情况修改:
<Connector port="8443"
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="cert/214402563650362.pfx"
keystoreType="PKCS12"
keystorePass="证书密码"
clientAuth="false"
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
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"/>
3、JKS证书安装
( 1 ) 使用java jdk将PFX格式证书转换为JKS格式证书(windows环境注意在%JAVA_HOME%/jdk/bin目录下执行)
keytool -importkeystore -srckeystore 214402563650362.pfx -destkeystore your-name.jks -srcstoretype PKCS12 -deststoretype JKS
回车后输入JKS证书密码和PFX证书密码,强烈推荐将JKS密码与PFX证书密码相同,否则可能会导致Tomcat启动失败。
( 2 ) 找到安装 Tomcat 目录下该文件Server.xml,一般默认路径都是在 conf 文件夹中。找到 <Connection port="8443"标签,增加如下属性:
keystoreFile="cert/your-name.jks"
keystorePass="证书密码"
完整的配置如下,其中port属性根据实际情况修改:
<Connector port="8443"
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="cert/your-name.jks"
keystorePass="证书密码"
clientAuth="false"
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
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"/>
( 注意:不要直接拷贝所有配置,只需添加 keystoreFile,keystorePass等参数即可,其它参数请根据自己的实际情况修改 )
4、 重启 Tomcat。
5、 通过 https 方式访问您的站点,测试站点证书的安装配置,如遇到证书不信任问题
正确配置示例:
事实上,tomcat8按照如上文档配置会有很多问题,下面贴出我的配置。
2.1 JKS格式证书安装
Tomcat 8.5.23
1. 将下载下来的4个文件上传到/usr/local/server/tomcats/smart-refrigerator-tomcat/conf/cert/下。
214402563650362.key 214402563650362.pem 214402563650362.pfx pfx-password.txt
2. 将PFX各式证书转换为JKS格式证书。
keytool -importkeystore -srckeystore 214402563650362.pfx -destkeystore 214402563650362.jks -srcstoretype PKCS12 -deststoretype JKS
3. 找到conf/server.xml新增如下配置。
将
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
修改为:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/usr/local/server/tomcats/smart-refrigerator-tomcat/conf/cert/214402563650362.jks"
type="RSA" certificateKeystorePassword="214402563650362"/>
</SSLHostConfig>
</Connector>
-------------------------------------------------------------------------------------------------
将
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
修改为
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
重启tomcat访问即可。
2.2 PFX格式证书安装
与上面方法相同,无需转换格式,上传文件到指定位置,修改server.xml即可。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="D:/apache-tomcat-8.5.15/cert/xxx.pfx"
certificateKeystoreType="PKCS12" certificateKeystorePassword="xxx" />
</SSLHostConfig>
</Connector>
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
在将PFX证书转化为JKS证书时,建议将两者证书密码设为一致,上述两种方式的certificateKeystorePassword即为所设置的密码。
二、使用JDK生成本地证书,部署到Tomcat
本机测试:
1. 修改hosts文件
C:\Windows\System32\drivers\etc\hosts
127.0.0.1 www.jacky.com
2. 生成证书
keytool -genkey -alias youralias -keyalg RSA -keysize 1024 -keypass 123456 -validity 365 -keystore D:\develop\05_server\cas-tomcat\conf\cert\mycas.keystore -storepass 123456
注意:
1. 这一步在 输入您的名字与姓氏是什么? 的时候,最好和域名保持一致!
2. keypass 和 storepass 两个密码要一致
03.png
3. 导出证书
keytool -export -alias youralias -keystore D:\develop\05_server\cas-tomcat\conf\cert\mycas.keystore -file D:\develop\05_server\cas-tomcat\conf\cert\mycas.crt -storepass 123456
注意:
这里的-storepass输入的就是生成证书时候的storepass
04.png
4. 客户端导入证书到jre
keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file D:\develop\05_server\cas-tomcat\conf\cert\mycas.crt -alias youralias
注意:
这里要输入的密钥库口令不是上面的keypass,而是jdk强制的密码changeit
05.png
5. 部署tomcat
修改server.xml
新增配置:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="D:\develop\05_server\cas-tomcat\conf\cert\mycas.keystore" keystorePass="123456"
clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8">
</Connector>
修改配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
为:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
注意:
不要端口冲突,下面修改的配置可以使http请求也能成功跳转到https请求上。
8443不是https的默认端口号,443才是,如果想不在域名后加上端口号访问,修改为443即可。