Tomcat從安裝到配置Https SSL證書
為什麼要寫本文?
今天一個群友在群裡問怎麼給Tomcat配置SSL,也就是HTTPS,他買的阿里雲的伺服器,自帶公網ip,還找到了免費的SSL證書
既然@我了,我就幫忙搞一搞唄,我就要了一個帶sudo的使用者,開始了踩坑之路
踩到坑的原因還是因為自己對Linux不夠了解,所以記下來,告誡自己戒驕戒躁
安裝Tomcat
演示用Centos 7,Tomcat版本8.5.50,需要先安裝JDK,這裡用的openjdk
下載Tomcat http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.50/bin/apache-tomcat-8.5.50.tar.gz
$ 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
vim bin/catalina.sh
在256行附近為JAVA_OPTS
新增指定預設隨機數-Djava.security.egd=file:/dev/./urandom
,儲存退出
重啟tomcat
$ bin/shutdown.sh
$ bin/startup.sh
$ tail -f logs/catalina.out
這次啟動就非常快了
訪問<127.0.0.1:8080>或者
安裝APR
檢視啟動日誌的時候,你可能會發現有個庫好像沒有找到
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
更細緻的安裝是使用原始碼,通過rpmbuild打成rpm包進行安裝,參考https://apr.apache.org/compiling_unix.html
修改Tomcat埠為80
http預設的埠是80,當我們只寫ip或域名時會預設訪問80埠,配置一下還挺有用的
$ vim conf/server.xml
在69行左右修改8080為80,儲存退出
重啟tomcat,命令與上邊一致,不再贅述
如果你和我一樣,使用的也是sudo使用者,啟動tomcat時沒加sudo,那麼此時你也要被坑了,“我訪問127.0.0.1”怎麼沒反應啊?
這是因為Linux預設非root使用者可直接使用的埠號要大於1024! 我今天就坑在這裡好久,之前一直使用root使用者一點事沒有,這才發現這個問題,改安全組、關防火牆、改配置一把梭沒查到問題,改到懷疑人生,使用sudo解決問題;不要盲目迷信root
配置Https SSL證書
首先從證書頒發機構網站下載證書檔案和密碼,證書檔案字尾.pfx
,密碼一般是pfx-password.txt
,有時使用pfx配置密碼會失敗,這裡就使用轉化pfx
為jks
檔案
先複製.pfx證書與密碼到當前目錄,這裡放在使用者家目錄中
轉換pfx證書為jks
$ cd ~
$ cat pfx-password.txt #檢視密碼,這裡可以複製一下,馬上會用到
$ keytool -importkeystore -srckeystore 你的證書.pfx -destkeystore domains.jks -srcstoretype PKCS12 -deststoretype JKS #這裡的domains.jks名稱你可以改成別的,只要以.jsk結尾就可以
輸入3次密碼,貼上剛才複製的密碼即可,ls
你會發現domain.jks已經生成
配置Server.xml
$ 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證書了
由於這是一次踩坑的記錄,再提幾嘴可能碰到的問題:
- ECS伺服器由安全組配置入站出站規則,預設入站全禁,出站全開,要注意配置80與443埠入站放行
- 某些地區的阿里ECS安全組只能使用
專用網路
,區別於經典網路
的公網與內網可單獨配置,專用網路
安全組預設標灰內網
為不可修改,通過查詢阿里的文件,發現專用網路
的安全組配置
在公網與內網中均會生效 - Linux非root使用者預設沒有1024以下埠使用的權力