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