Nginx 从入门到入坟(十二)- Nginx 添加 SSL 证书
1. Nginx的安全控制
关于 Web 服务器的安全是比较大的一个话题,里面所涉及的内容很多,Nginx 反向代理是如何来提升 Web 服务器的安全呢?这里就要说一下安全隔离
的概念了。
通过代理分开了客户端到应用程序服务器端的连接,实现了安全措施。在反向代理之前设置防火墙,仅留一个入口供代理服务器访问,这就是安全隔离。
1.1 如何使用SSL对流量进行加密
通俗来说就是将我们常用的 http 请求转变成 https 请求,那么这两个之间的区别简单的来说两个都是 http 协议,只不过 https 是身披 SSL 外壳的 http。
https 是一种通过计算机网络进行安全通信的传输协议。它经由 http 进行通信,利用 SSL/TLS 建立全通信,加密数据包,确保数据的安全性。
- SSL(Secure Sockets Layer):安全套接层;
- TLS(Transport Layer Security):传输层安全;
上述这两个是为网络通信提供安全及数据完整性的一种安全协议,TLS 和 SSL 在传输层和应用层对网络连接进行加密。
总结来说为什么要使用 https:
http协议是明文传输数据,存在安全问题,而https是加密传输,相当于http+ssl,并且可以防止流量劫持。
Nginx 要想使用 SSL,需要满足一个条件即需要添加一个模块--with-http_ssl_module
,而该模块在编译的过程中需要 OpenSSL 的支持。
1.2 Nginx添加SSL的支持
完成--with-http_ssl_module
模块的增量添加:
- 将原有
/usr/local/nginx/sbin/nginx
进行备份; - 拷贝 Nginx 之前的配置信息;
- 在 Nginx 的安装源码进行配置指定对应模块
./configure --with-http_ssl_module
; - 通过
make
模板进行编译; - 将
objs
下面的nginx
移动到/usr/local/nginx/sbin
下; - 在源码目录下执行
make upgrade
进行升级,这个可以实现不停机添加新模块的功能。
1.3 Nginx的SSL相关指令
ssl:该指令用来在指定的服务器开启HTTPS,可以使用 listen 443 ssl,后面这种方式更通用些。
语法 | ssl on | off; |
---|---|
默认值 | ssl off; |
位置 | http、server |
1 | server{ |
ssl_certificate:为当前这个虚拟主机指定一个带有PEM格式证书的证书。
语法 | ssl_certificate file; |
---|---|
默认值 | - |
位置 | http、server |
ssl_certificate_key:该指令用来指定PEM secret key文件的路径。
语法 | ssl_ceritificate_key file; |
---|---|
默认值 | - |
位置 | http、server |
ssl_session_cache:该指令用来配置用于SSL会话的缓存。
语法 | ssl_sesion_cache off|none|[builtin[:size]] [shared:name:size] |
---|---|
默认值 | ssl_session_cache none; |
位置 | http、server |
- off:禁用会话缓存,客户端不得重复使用会话;
- none:禁止使用会话缓存,客户端可以重复使用,但是并没有在缓存中存储会话参数;
- builtin:内置 OpenSSL 缓存,仅在一个工作进程中使用;
- shared:所有工作进程之间共享缓存,缓存的相关信息用 name 和 size 来指定;
ssl_session_timeout:开启SSL会话功能后,设置客户端能够反复使用储存在缓存中的会话参数时间。
语法 | ssl_session_timeout time; |
---|---|
默认值 | ssl_session_timeout 5m; |
位置 | http、server |
ssl_ciphers:指出允许的密码,密码指定为OpenSSL支持的格式。
语法 | ssl_ciphers ciphers; |
---|---|
默认值 | ssl_ciphers HIGH:!aNULL:!MD5; |
位置 | http、server |
ssl_prefer_server_ciphers:该指令指定是否服务器密码优先客户端密码。
语法 | ssl_perfer_server_ciphers on|off; |
---|---|
默认值 | ssl_perfer_server_ciphers off; |
位置 | http、server |
1.4 生成证书
- 方式一:使用阿里云/腾讯云等第三方服务进行购买(阿里云购买链接);
- 方式二:使用 openssl 生成证书;
使用openssl version
命令确定当前系统是否安装 openssl。
按照下面的步骤进行生成:
1 | mkdir /root/cert |
1.5 开启SSL实例
1 | server { |
将 http 重定向 https:
1 | server { |
参考文献
【1】https://www.bilibili.com/video/BV1ov41187bq?p=91&vd_source=e66fcf471e44c7ac45f918fd1f1e7a77
【2】https://blog.csdn.net/weixin_44060108/article/details/121245182
【3】https://blog.csdn.net/weixin_38615720/article/details/92827012?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-92827012-blog-123139998.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-92827012-blog-123139998.pc_relevant_antiscanv2&utm_relevant_index=2