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看到请求过程