Nginx1.22实现内网自签证书

HTTPS(全称:HyperText Transfer Protocol Secure)是HTTP(超文本传输协议)的安全版本。本质上,HTTPS在HTTP的基础上,通过SSL/TLS协议提供了数据加密、完整性保护和身份验证,以确保网络数据传输的安全性。HTTPS被广泛用于互联网上的安全通信,特别是在线交易和处理敏感信息时,本文以Nginx为例部署自签发https证书。

前情提要

本次实验仅仅用于实验测试有ssl需求的实验,生产环境建议不要用

本次实验环境是Rocky8.9(和centos 8 stream 大差不差)

安装nginx

1
2
3
4
5
6
7
dnf update -y
dnf module list nginx
dnf remove @nginx
dnf module reset nginx
dnf module install nginx:1.22 -y
systemctl enable --now nginx
nginx -V

查看是否有--with-http_ssl_module

--with-http_ssl_module 是 Nginx 配置选项之一,用于启用 Nginx 的 SSL 功能模块。当 Nginx 编译时包含了 --with-http_ssl_module 选项时,表示 Nginx 将支持处理 HTTPS 请求,即通过 SSL/TLS 加密协议保护数据传输。

image-20240406194001867

安装openssl

OpenSSL 是一个开放源代码的加密库,广泛用于安全通信、加密和解密数据。它提供了一组功能丰富的工具和库,用于处理安全通信所需的各种加密操作。

1
2
dnf install openssl
dnf install openssl-devel

生成证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#没有就创建sslkey文件夹
cd /etc/nginx/sslkey

#创建本地私有密钥
openssl genrsa -out ssl.key 2048

#按提示输入即可
openssl req -new -key ssl.key -out ssl.csr

----------------------------------------------------------------
国家名称(2字母代码)[XX]:CN
Country Name (2 letter code) [XX]:CN

州或省名(全称)[]:Guangdong
State or Province Name (full name) []:Guangdong

地区名称(如城市)[默认城市]:广州
Locality Name (eg, city) [Default City]:Guangzhou

组织机构名称(如公司)【默认公司有限公司】:qianyios
Organization Name (eg, company) [Default Company Ltd]:qianyios

组织单位名称(如section) []:NONE
Organizational Unit Name (eg, section) []:NONE

通用名称(例如,您的名字或服务器主机名)[]:qianyios
Common Name (eg, your name or your server's hostname) []:qianyios

邮箱地址[]:abc@qq.com
Email Address []:abc@qq.com

请输入以下“额外”属性
Please enter the following 'extra' attributes

与您的证书请求一起发送
to be sent with your certificate request

挑战密码[]:123456
A challenge password []:123456

可选的公司名称[]:NONE
An optional company name []:NONE

----------------------------------------------------------------

#创建证书crt
openssl x509 -req -days 1460 -in ssl.csr -signkey ssl.key -out ssl.crt

#创建证书pem
openssl dhparam -out ssl.pem 2048

Nginx配置

1
2
3
4
5
6
7
vi /etc/nginx/nginx.conf

...........
include /etc/nginx/sslkey/*.conf;
...........

保存退出

在nginx默认配置下加上include /etc/nginx/sslkey/*.conf;

image-20240406194859367

给ssl证书单独生成一个conf。

1
2
3
4
5
6
7
8
9
10
11
cat >> /etc/nginx/sslkey/ssl.conf <<"EOF"
server {
listen 443 ssl;
ssl_certificate /etc/nginx/sslkey/ssl.crt;
ssl_certificate_key /etc/nginx/sslkey/ssl.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!KRB5:!aECDH:!EDH+3DES;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
}
EOF

重点!!!

在你需要的网站配置加入重定向至https,因为我们默认访问nginx页面的时候是http的,所以要重定向。现在我们模拟访问80端口的默认网页

1
2
3
4
5
6
7
8
9
10
11
12
13
vi /etc/nginx/nginx.conf


include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sslkey/*.conf;
server {
listen 80;
listen [::]:80;
return 301 https://$host$request_uri; #就加这一句
server_name _;
root /usr/share/nginx/html;


image-20240406195448828

重启nginx

1
2
nginx -t
nginx -s reload

这时候访问80网页,自签证书已经好了,只是不受信任而已

image-20240406195703184

特别声明
千屹博客旗下的所有文章,是通过本人课堂学习和课外自学所精心整理的知识巨著
难免会有出错的地方
如果细心的你发现了小失误,可以在下方评论区告诉我,或者私信我!
非常感谢大家的热烈支持!