Tomcat我用 LinuxLinux

02_Tomcat设置https安全访问

2018-02-25  本文已影响43人  明天你好向前奔跑

@Author Jacky Wang , 转载请注明出处http://www.jianshu.com/p/956dc7b245ad

一、阿里云申请SSL证书并部署到tomcat

阿里云免费SSL证书申请
选择Symantec后再选择增强型OV SSL后会显示出一个免费版DV SSL的选择,勾选后完成申请即可。

01.png

1. 下载证书

下载证书,并上传到相应的服务器中去,这里以tomcat服务器为例。下载完毕后的文件如下:

02.png

2. 安装证书

以下列举阿里云给出的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 文件夹中。找到 &lt;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即可。
上一篇 下一篇

猜你喜欢

热点阅读