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

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