今天一個羣友在羣裏問怎麼給Tomcat配置SSL,也就是HTTPS,他買的阿里雲的服務器,自帶公網ip,還找到了免費的SSL證書html
既然@我了,我就幫忙搞一搞唄,我就要了一個帶sudo的用戶,開始了踩坑之路java
踩到坑的緣由仍是由於本身對Linux不夠了解,因此記下來,告誡本身戒驕戒躁linux
演示用Centos 7,Tomcat版本8.5.50,須要先安裝JDK,這裏用的openjdkapache
下載Tomcat http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.50/bin/apache-tomcat-8.5.50.tar.gzvim
$ cd ~ $ wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.50/bin/apache-tomcat-8.5.50.tar.gz #下載到家目錄 $ tar zxvf apache-tomcat-8.5.50.tar.gz #解壓tomcat $ cd apache-tomcat-8.5.50 $ bin/startup.sh #啓動tomcat $ tail -f logs/catalina.out #查看日誌輸出
你會發現Linux下tomcat啓動特別慢,緣由在於Tomcat獲取隨機數使用/dev/./random在不能產生新的隨機數時會阻塞程序,參考Linux中的隨機數文件 /dev/random /dev/urandom,知道問題在哪裏咱們修改一下bin/catalina.sh
,使其使用非阻塞的/dev/urandom
tomcat
vim bin/catalina.sh
在256行附近爲JAVA_OPTS
添加指定默認隨機數-Djava.security.egd=file:/dev/./urandom
,保存退出安全
重啓tomcatbash
$ bin/shutdown.sh $ bin/startup.sh $ tail -f logs/catalina.out
此次啓動就很是快了服務器
訪問<127.0.0.1:8080>或者
查看啓動日誌的時候,你可能會發現有個庫好像沒有找到
The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path
APR用官網的說法是:Tomcat can use the [Apache Portable Runtime](https://apr.apache.org/) to provide superior scalability, performance, and better integration with native server technologies.
簡單來講,APR是針對操做系統優化,大幅度提高服務器性能的運行時環境
最簡單的解決辦法是安裝apr-devel
,更多細節參考http://tomcat.apache.org/tomcat-8.5-doc/apr.html
$ sudo yum install -y apr-devel
http默認的端口是80,當咱們只寫ip或域名時會默認訪問80端口,配置一下還挺有用的
$ vim conf/server.xml
在69行左右修改8080爲80,保存退出
重啓tomcat,命令與上邊一致,再也不贅述
若是你和我同樣,使用的也是sudo用戶,那麼此時你可能要被坑了,「我訪問127.0.0.1」怎麼沒反應啊?
這是由於Linux默認非root用戶可直接使用的端口號要大於1024! 我今天就坑在這裏很久,以前一直使用root用戶一點事沒有,這才發現這個問題,改安全組、關防火牆、改配置一把梭沒查到問題,改到懷疑人生
首先從證書頒發機構網站下載證書文件和密碼,證書文件後綴.pfx
,密碼通常是pfx-password.txt
,有時使用pfx配置密碼會失敗,這裏就使用轉化pfx
爲jks
文件
先複製.pfx證書與密碼到當前目錄,這裏放在用戶家目錄中
$ cd ~ $ cat pfx-password.txt #查看密碼,這裏能夠複製一下,立刻會用到 $ keytool -importkeystore -srckeystore 你的證書.pfx -destkeystore domains.jks -srcstoretype PKCS12 -deststoretype JKS #這裏的domains.jks名稱你能夠改爲別的,只要以.jsk結尾就能夠
輸入3次密碼,粘貼剛纔複製的密碼便可,ls
你會發現domain.jks已經生成
$ cp domains.jks ~/apache-tomcat-8.5.50/conf $ cd ~/apache-tomcat-8.5.50 $ vim conf/server.xml
在大約87行,修改原來的8443爲443, protocol能夠使用其它高版本協議,詳情參考http://tomcat.apache.org/tomcat-8.5-doc/config/http.html#SSL_Support
如圖,keystoreFile處填寫jks的絕對路徑,keystorePass填寫證書密碼(剛纔生成jks時填寫的與pfx相同的密碼)
<!-- 開啓ssl支持,請注意其它接口轉發應修改redirectPort爲443 --> <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" keystoreFile="/你的目錄/apache-tomcat-8.5.50/conf/domains.jks" keystorePass="證書密碼" clientAuth="false" sslProtocol="TLS" connectionTimeout="20000" />
修改默認配置的8443爲443,使其它端口轉發到443端口擁有加密功能
在vim中輸入,通常應該成功替換6處(含註釋)
:1,$s/8443/443/g
保存退出,重啓Tomcat
通常來講看到這裏,你的Tomcat應該已經綁上Https證書了
因爲這是一次踩坑的記錄,再提幾嘴可能碰到的問題:
專用網絡
,區別於經典網絡
的公網與內網可單獨配置,專用網絡
安全組默認標灰內網
爲不可修改,經過查詢阿里的文檔,發現專用網絡
的安全組配置
在公網與內網中均會生效