nginx的SSL配置
1.檢查nginx是否支持SSL
nginx -V
如果出現以下兩行內容,則無需編譯添加SSL功能
nginx version: nginx/1.13.10
built with OpenSSL 1.1.0g 2 Nov 2017 (running with OpenSSL 1.1.0h 27 Mar 2018)
TLS SNI support enabled
2.用OpenSSL生成CA證書
mkdir /usr/share/nginx/certs
這裏假設nginx安裝在/usr/share/nginx目錄下
cd /usr/share/nginx/certs
openssl genras -out srvPri.key 2048
用RSA算法(2048bit的密鑰長度)生成服務器的私鑰
openssl req -new -key srvPri.key -out srvReq.csr
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:zhejiang
Locality Name (eg, city) []:hangzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:CETC52
Organizational Unit Name (eg, section) []:sec
Common Name (e.g. server FQDN or YOUR name) []:www.tester.com #這條是必填項,並且和服務器域名相同
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
openssl req -x509 -key srvPri.key -in srvReq.csr -out srvCA.crt -days 365
根據剛纔生成的私鑰生成證書請求,並申請一張自簽發的根CA證書
3.修改SSL的配置文件
vi /etc/nginx/nginx.conf
在其中的http部分裏添加以下內容
server {
# https的默認端口443
listen 443;
# 域名,這裏與證書裏的域名相同
server_name www.tester.com;
# ssl開關
ssl on;
# ssl CA證書
ssl_certificate /usr/share/nginx/certs/srvCA.crt;
# ssl 私鑰證書
ssl_certificate_key /usr/share/nginx/certs/srvPri.key;
# 支持的ssl協議
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
# 密鑰協商時server的加密算法優先於客戶端
ssl_prefer_server_ciphers on;
# 這裏確定server的根目錄
root /var/www/html;
# 這部分針對php代碼解析,如果不用php做CGI可以不加
location ~ \.php$ {
root /var/www/html;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
4.Firefox添加自簽發證書
進入Firefox的Preference==>Advanced==>Certificates選擇View Certificates,點擊Import選擇之前生成的srvCA.crt文件,添加後在列表裏看到證書。
接着訪問https://www.tester.com,Firefox會提此鏈接不可靠,因爲這個網站的證書是自簽發的。FF的官網裏對這一項給出了說明,這裏直接添加例外。
接着就能看到Nginx的歡迎首頁了。
Apache2的SSL配置
1.生成公私鑰文件
該部分參考上一部分內容
2.修改ports.conf監聽端口443
ports.conf一般位於/etc/apache2/下,正常情況下修改 Listen 80 443
,當文件內容如下時可以不做修改:
3.修改default-ssl.conf爲正確的公私鑰
default-ssl.conf一般位於/etc/apach2/sites-available下,將SSL服務端cert相關的公私鑰配置好:
4.修改000-default.conf完成https強制跳轉
000-default.conf一般位於/etc/apache2/sites-available下,通過添加rewrite可以實現HSTS(HTTP Strict Transport Security),即強制瀏覽器使用https與服務器通信,具體修改內容如下:
5.啓動相關模塊
sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2ensite default-ssl
6.驗證配置結果
最終,我們打開FF,可以將自簽發證書加入到受信任的CA中,也可以爲服務器地址添加例外。效果如下:
Tomcat的SSL配置
1.生成keystore文件
該文件類似於Openssl中的證書申請文件,用於產生下一步的證書。
keytool -v -genkey -alias tomcat -keyalg RSA -keystore /root/tomcat.keyst
Enter keystore password: 112233
Re-enter new password: 112233
What is your first and last name? localhost
-- SNIP --
keytool -exportcert -alias tomcat -keystore /root/tomcat.keyst -file /root/tomcat.cer
Enter keystore password: 112233
Certificate stored in file </root/tomcat.cer>
2.配置tomcat的server.xml文件
vi /etc/tomcat8/server.xml
首先設置https跳轉(當訪問http://xx.xx.xx:8090時自動跳轉8443端口)
<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改連接標籤裏的屬性
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150"
SSLEnabled="true"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keystoreFile="/root/tomcat.keyst"
keystorePass="112233">
</Connector>
3.配置tomcat的web.xml文件
vi /etc/tomcat8/web.xml
這裏設置可以訪問的目錄
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<!-- 可以訪問根目錄下所有文件 -->
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
登陸站點,可以用F12看到請求過程