该文主要记录如何在没有购买域名的状况下使用SSL/TLS协议,即地址前面的http变成了https。可是这样的SSL协议是会被浏览器认为是不安全的。在开发或者测试环境能够这样搞,生产环境下仍是乖乖的买个域名吧。html
首先到https://csr.chinassl.net/generator-csr.html这里生成SSL秘钥(私钥)和等会拿去生成SSL证书的CSR文件。里面内容能够随便填,域名啥的随便填都不要紧。保存好这两个文件。前端
拿刚才的CSR文件到https://csr.chinassl.net/free-ssl.html这里生成SSL证书。nginx
到这里为止,咱们只须要记住秘钥和SSL证书的存储路径,在nginx配置文件当中须要使用到。
假设存到这里吧。vim
/etc/ssl/my_domain/my_domain.ssl /etc/ssl/my_domain/my_domain.private
我这里只是改了文件的后缀而已,并不影响使用。文件的后缀名大家自行决定也能够。浏览器
先查看Nginx之前安装过的模块,避免编译后覆盖了以前添加的模块。进入到你的nginx安装包目录。执行如下命令安全
# ./objs/nginx -V nginx version: nginx/1.16.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --prefix=/usr/local/nginx --with-http_realip_module
主要看configure arguments
这一行,那么我以前的预编译命令就是以下,而若是没有自定义添加过任何模块那么这里应该为空的bash
./configure --prefix=/usr/local/nginx --with-http_realip_module
如今须要添加SSL模块,那么命令以下:微信
./configure --prefix=/usr/local/nginx --with-http_realip_module \ --with-http_ssl_module
而后执行make
命令,已经安装过安装过nginx的(即执行过make install
),就不要执行 make install
,否则把你以前安装好的nginx文件覆盖掉。
固然,未安装Nginx的就能够执行make install
命令了。session
cd /usr/local/nginx/sbin/ ./nginx -s stop mv ./nginx ./nginx.old cp nginx安装包目录/objs/nginx ./nginx
能够参考我公众号的文章:https://mp.weixin.qq.com/s/o7rkczakPNiys1KM7Z87EAdom
vim /usr/local/nginx/conf/nginx.conf
配置文件我只摘取了server模块,以下:
server { listen 80; server_name 127.0.0.1; location / { # 重定向到https rewrite ^/(.*) https://$host$1 permanent; } } server { listen 443 ssl; server_name 127.0.0.1; ssl_certificate /etc/ssl/my_domain/my_domain.ssl; # ssl证书存储路径 ssl_certificate_key /etc/ssl/my_domain/my_domain.private; # 秘钥存储路径 # ssl的一些配置 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #开启TLS协议 location / { root html; index index.html index.htm; } }
此时输入ip地址,你就能看到https
了。
当nginx的多个模块都须要使用SSL协议时,如PC端的前端项目使用了80端口转发,手机端使用了81端口转发。那么能够改为以下:
server { # PC端 listen 80; server_name 127.0.0.1; location / { # 重定向到https,https默认端口是443 rewrite ^/(.*) https://$host$1 permanent; } } server { # 手机端 listen 81; server_name 127.0.0.1; location / { # 重定向到https,指定跳转到8443端口 rewrite ^/(.*) https://$host:8443$1 permanent; } } server { listen 443 ssl; server_name 127.0.0.1; ssl_certificate /etc/ssl/my_domain/my_domain.ssl; # ssl证书存储路径 ssl_certificate_key /etc/ssl/my_domain/my_domain.private; # 秘钥存储路径 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #开启TLS协议 location / { root html; index index.html index.htm; } } server { listen 8443 ssl; server_name 127.0.0.1; ssl_certificate /etc/ssl/my_domain/my_domain.ssl; # ssl证书存储路径 ssl_certificate_key /etc/ssl/my_domain/my_domain.private; # 秘钥存储路径 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #开启TLS协议 location / { root html; index index.html index.htm; } }
https的默认端口是443,而没有root权限的用户启动时,nginx会提示没有权限使用443端口,此时则须要使用端口转发规则,把443转发到其它端口,如8443。那么须要root用户执行如下命令
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443 iptables -t nat -nL --line service iptables save
而后把nginx配置文件的监听端口改为8443 ssl
server { listen 80; server_name 127.0.0.1; location / { # 重定向到https,https默认端口是443,由于端口转发规则,转发到8443 rewrite ^/(.*) https://$host$1 permanent; } } server { listen 8443 ssl; server_name 127.0.0.1; ... }
OK,这就是最近工做上须要完成的一个功能,仍是本身太菜了。总结如下,但愿也能帮到别人。~Thanks♪(・ω・)ノ
我的博客网址: https://colablog.cn/
若是个人文章帮助到您,能够关注个人微信公众号,第一时间分享文章给您