http升级至https
获取证书
升级到https第一步就是获取一张证书。证书是一个二进制文件,包含经过认证的网站公钥和一些元数据,需要自己购买。证书详细介绍
- 安装certbot
用的是免费的Let’s Encrypt,根据教程选择相应服务器工具和系统版本直接安装。
我用的是Ubuntu16.04+Tomcat9:
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot
- 生成证书:
sudo certbot certonly --webroot -w /opt/tomcat/webapps/flyme -d flyzy2005.cn -d www.flyzy2005.cn
/opt/tomcat/webapps/flyme是你项目的路径,-d(domain)后面接的是域名,多个就填多个。如果有多个项目路径,就接多个-w。
按照提示输入自己的email,再填一些信息就会帮你生成一个证书。
- 查看证书:
sudo certbot certificates
//output
Found the following certs:
Certificate Name: flyzy2005.cn
Domains: flyzy2005.cn www.flyzy2005.cn
Expiry Date: 2017-08-31 03:54:00+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/flyzy2005.cn/fullchain.pem
Private Key Path: /etc/letsencrypt/live/flyzy2005.cn/privkey.pem
更多的重新生成证书、废弃证书、删除证书等可以查看官方API。
生成JKS
- 拷贝副本
sudo cp /etc/letsencrypt/live/flyzy2005.cn/privkey.pem /opt/jks
sudo cp /etc/letsencrypt/live/flyzy2005.cn/fullchain.pem /opt/jks
- 生成.p12文件
sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out fullchain_and_key.p12 -name tomcat
- 生成.jks证书
sudo keytool -importkeystore -deststorepass yourJKSpass -destkeypass yourKeyPass -destkeystore MyDSKeyStore.jks -srckeystore fullchain_and_key.p12 -srcstoretype PKCS12 -srcstorepass yourPKCS12pass -alias tomcat
2个证书一共用到4个密码,可以全部设置一样的,方便配置。
配置tomcat
- 配置tomcat目录下conf/server.xml
<Connector port="443" protocol="org.apache.coyote.http11.HttpNio11Protocol"
URIEncoding="UTF-8" maxThreads="150" SSLEnabled="true"
scheme="https" secure="true" clientAuth="false"
sslProtocol="TLS"
keystoreFile="/opt/jks/MyDSKeyStore.jks"
keystorePass="yourJKSpass"
keyAlias="tomcat"
keyPass="yourKeyPass"/>
keystoreFile可以是/
开头的绝对路径,也可以是conf/MyDSKeyStore.jks这样相对路径(最终路径是/opt/tomcat/conf/MyDSKeyStore.jks)
protocol根据你的tomcat版本设置不同的protocol
https的默认端口是443,就像http的默认端口是80
- 让http请求自动转成https
1. 修改conf/server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
- 修改conf/web.xml
<web-app>
//...
//...
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<!-- auth-constraint goes here if you requre authentication -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
https://my.oschina.net/chaon/blog/717902
https://certbot.eff.org/docs/using.html#renewal
https://certbot.eff.org/#ubuntuxenial-other
http://www.ruanyifeng.com/blog/2016/08/migrate-from-http-to-https.html