前提

该文主要记录如何在没有购买域名的情况下使用SSL/TLS协议,即地址前面的http变成了https。但是这样的SSL协议是会被浏览器认为是不安全的。在开发或者测试环境可以这样搞,生产环境下还是乖乖的买个域名吧。

SSL证书

第一步

首先到https://csr.chinassl.net/generator-csr.html这里生成SSL秘钥(私钥)和等会拿去生成SSL证书的CSR文件。里面内容可以随便填,域名啥的随便填都没关系。保存好这两个文件。

第二步

拿刚才的CSR文件到https://csr.chinassl.net/free-ssl.html这里生成SSL证书。

到这里为止,我们只需要记住秘钥SSL证书的存储路径,在nginx配置文件当中需要使用到。

假设存到这里吧。

/etc/ssl/my_domain/my_domain.ssl
/etc/ssl/my_domain/my_domain.private

我这里只是改了文件的后缀而已,并不影响使用。文件的后缀名你们自行决定也可以。

Nginx添加SSL模块

先查看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这一行,那么我之前的预编译命令就是如下,而如果没有自定义添加过任何模块那么这里应该为空的

./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命令了。

更新Nginx启动文件

方式一:停止Nginx服务更新

cd /usr/local/nginx/sbin/
./nginx -s stop
mv ./nginx ./nginx.old
cp nginx安装包目录/objs/nginx ./nginx

方式二:热部署更新

可以参考我公众号的文章:https://mp.weixin.qq.com/s/o7rkczakPNiys1KM7Z87EA

配置文件

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了。

扩展知识

多个SSL模块

当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;
}
}

443端口转发

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/

如果我的文章帮助到您,可以关注我的微信公众号,第一时间分享文章给您

如何在Nginx不绑定域名下使用SSL/TLS证书?的更多相关文章

  1. Hexo瞎折腾系列(7) - Coding Pages申请SSL/TLS证书错误

    问题 今天我的个人站点SSL/TLS证书到期,我的证书是由Coding Pages提供的,每次申请成功后有效期是三个月,证书到期后可以继续免费申请.但是当我登陆进入Coding Pages服务的后台并 ...

  2. 新开源HTML5单文件网页版ACME客户端,可在线申请Let's Encrypt、ZeroSSL免费HTTPS多域名通配符泛域名SSL/TLS证书(RSA/ECC/ECDSA)

    目录 开源项目的起源 项目地址 使用方法 第一步:选择Let's Encrypt.ZeroSSL或其他证书颁发机构 第二步:证书配置,填写域名 第三步:完成域名所有权的验证 第四步:下载保存证书PEM ...

  3. PKI体系下的 SSL TLS HTTPS 详解

    背景: SSL(Secure Socket Layer 安全套接层)是一个加密函数库,它可以将应用层上所有明文传输的数据,通过调用SSL库,即可摇身一变成为安全通信连接,SSL最初是由网景公司(Net ...

  4. iOS https认证 && SSL/TLS证书申请

    1.下面列出截止2016年底市面上常见的免费CA证书: 腾讯云SSL证书管理(赛门铁克TrustAsia DV SSL证书)阿里云云盾证书服务(赛门铁克DV SSL证书)百度云SSL证书服务Let's ...

  5. Nginx三部曲(3)SSL

    我们将告诉你 Nginx 的运作模式.蕴含的概念,怎样通过调优 Nginx 来提高应用性能,或是如何设置它的启动和运行. 这个教程有三个部分: 基本概念 —— 这部分需要去了解 Nginx 的一些指令 ...

  6. HTTPS=HTTP + SSL / TLS

    以下的两个链接作为本次编辑的参考 https://www.bennythink.com/school-1.htmlhttps://www.bennythink.com/school-2.html 应一 ...

  7. 证书锁定SSL/TLS Pinning

    前言 APP端抓包中, 设置抓包代理后会发现部分APP(如app store.Facebook)直接无法访问,其他部分app又功能正常,为什么呢?这涉及 ssl-pinning,证书锁定. 证书锁定( ...

  8. Nginx 下配置SSL证书的方法

    1.Nginx 配置 ssl 模块 默认 Nginx 是没有 ssl 模块的,而我的 VPS 默认装的是 Nginx 0.7.63 ,顺带把 Nginx 升级到 0.7.64 并且 配置 ssl 模块 ...

  9. Nginx下配置SSL模块,支持https

    Http与Https的区别 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效 ...

随机推荐

  1. 使用Flutter重构斗鱼APP

    Github源码地址:https://github.com/yukilzw/dy_flutter flutter重构的斗鱼直播APP 首页.娱乐为Material组件开发:直播间.鱼吧为纯自定义编写 ...

  2. CAS学习过程中的一些记录

    1 inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { 2 int ...

  3. 利用Python特殊变量__dict__快速实现__repr__的一种方法

    在<第8.15节 Python重写自定义类的__repr__方法>.<Python中repr(变量)和str(变量)的返回值有什么区别和联系>.<第8.13节 Pytho ...

  4. Python正则表达式re.match(r"(..)+", "a1b2c3")匹配结果为什么是”c3”?

    在才开始学习正则表达式处理时,老猿对正则表达式:re.match(r"(-)+", "a1b2c3") 返回的匹配结果为"c3"没有理解,学 ...

  5. flask-mail 机制

    上课无聊,总结下学习的flask-mail 机制 flask-mail 了解 flask-mail 机制中可以用pip 安装也可以用pycharm里面直接安装. flask-mail是一个能调用smt ...

  6. 利用promise实现间隔1s打印1,2,3

    利用promise结合数组的rduce方法 let arr = [1, 2, 3]; arr.reduce((pre, cur) => { return pre.then(() => { ...

  7. 【AtCoder AGC023F】01 on Tree(贪心)

    Description 给定一颗 \(n\) 个结点的树,每个点有一个点权 \(v\).点权只可能为 \(0\) 或 \(1\). 现有一个空数列,每次可以向数列尾部添加一个点 \(i\) 的点权 \ ...

  8. 博流BL602&BL604开发板介绍

    在2020松山湖论坛上,博流智能科技(南京)有限公司销售副总裁刘占领介绍了基于RISC-V核的低功耗.高可靠Wi-Fi+BLE二合一SoC芯片BL602.主要应用领域包括人工智能与工业互联网,特别是电 ...

  9. 11g RAC开启归档模式

    1.关闭集群数据库 [oracle@rac01-+ASM1 ~]$ srvctl stop database -d rac 2.开启节点一数据库到mount状态 SQL> startup mou ...

  10. Spring自带的定时任务框架Schedule的优缺点及使用

    spring自带的定时任务框架的有点:简单,拆箱即用 spring自带的定时任务框架的缺点: 不支持集群:为避免重复执行的问题 不支持生命周期统一管理:不重启服务情况下关闭,启动任务 不支持分片任务: ...