详解Nginx + Tomcat HTTPS/SSL 配置(2)

  证书分很多种格式,例如X.509(.crt文件)、PKCS #7(.p7s文件)等等。不同的网站服务器可能要求不同格式的证书。很多时候,给我们的证书签名的是二级证书机构,它上面还有根证书机构。所以你在购买签名过的证书以后,它还会给你一个它自己的证书叫做“Intermediate CA(中间证书)”,格式和你自己的证书是一样的。在部署证书的时候你需要同时部署你自己的证书还有中间证书,这就叫做Certificate Chain。好的证书发行机构会提供多种证书供你选择下载,建议下载同时下载X.509还有 PKCS #7两种格式。不要忘记下载 X.509格式的中间证书。PKCS #7格式的不要是因为这个格式自带了各种中间证书。

  2. 部署证书到Tomcat

  Tomcat要求的是包含签名过证书的keystore文件和keystore密码。所以我们要先把证书导入keystore

  2.1 导入证书到KeyStore

$JAVA_HOME/bin/keytool -import -alias oschina -trustcacerts -file oschina.p7s -keystore oschina.keystore

  上面的命令中 alias “oschina” 和之前申请证书的时候输入的 alias 要一致。

  2.2 修改Tomcat配置

<Connector SSLEnabled="true" acceptCount="100" clientAuth="false"
disableUploadTimeout="true" enableLookups="false" maxThreads="25"
port="8443" keystoreFile="/oschina/webapp/oschina.keystore" keystorePass="xxxxxxx"
protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true" sslProtocol="TLS" />

  3. 部署证书到Nginx

  Nginx和Tomcat不一样,它要求的是证书文件 .crt 和私钥 .key 。遗憾的是,我们的私钥在keystore里面,而JDK自带的keytool并不提供私钥的导出功能,所以我们得借助第三方工具来导出私钥。

  3.1 导出私钥(key)

  有一个开源的私钥导出工具叫做 java-exportpriv 。它是一个简单的java程序,你下载以后参考它的说明,编译,然后运行即可,非常简单,我就不多罗嗦了。

  3.2 创建certificate chain

  和Apache不一样,Nginx没有Certificat Chain这个参数,所以你要把你的证书和中间证书合并。合并证书很简单,创建一个先的文件 oschina-chain.crt,内容如下:

  -----BEGIN CERTIFICATE-----

  这里是你证书的内容

  -----END CERTIFICATE-----

  -----BEGIN CERTIFICATE-----

  这里是中间证书的内容

  -----END CERTIFICATE-----

  3.3 修改Nginx配置文件 

server {
listen 443 ssl;
server_name localhost;
ssl on;
ssl_certificate /oschina/webapp/oschina-chain.crt;
ssl_certificate_key /oschina/webapp/oschina.key;

location / {
include proxy.conf;
proxy_pass https://61.145.122.155:443;
}

}

  4. 验证证书是否安装正确

  首先当然是自己用HTTPS的方式访问自己的网站,看看浏览器是否报错或者报警,记得要把各种浏览器都试一遍。然后用 在线工具来测试你的网站HTTPS的配置是否正确,如果都测试通过,那么就大功搞成啦!

  原文地址:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/10891.html