nginx、apache2、tomcat的SSL設置

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文件,添加後在列表裏看到證書。

Cert list

接着訪問https://www.tester.com,Firefox會提此鏈接不可靠,因爲這個網站的證書是自簽發的。FF的官網裏對這一項給出了說明,這裏直接添加例外。

FF explanation

接着就能看到Nginx的歡迎首頁了。

Nginx page

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看到請求過程

req_process

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章