nginx 设置https访问模式需要ssl证书。ssl证书可以向证书颁发机构,也可以用openssl工具自己生成。如果是自己生成的证书浏览器认为是不安全的。
商业 SSL 证书、免费的证书颁发机构以及自签名证书有以下区别:
- 商业 SSL 证书:
商业 SSL 证书是由具有权威认证的证书颁发机构(CA)签发的。
它们提供了最高级别的信任和安全性,因为它们是由受信任的第三方机构签发的。
商业 SSL 证书可以在所有主流浏览器和操作系统中良好地工作,并且不会引发任何安全警告。
商业 SSL 证书通常包括额外的服务和支持,如保险保障、站点密封和技术支持。
免费的证书颁发机构:
一些证书颁发机构(CA)提供免费的 SSL 证书,比如 Let’s Encrypt。
免费的证书颁发机构也是由受信任的第三方机构签发的,提供了一定的信任和安全性。
免费的 SSL 证书在大多数情况下可以与商业 SSL 证书相媲美,但有时可能会存在一些限制,比如证书有效期较短或不提供其他额外的服务。
- 自签名证书:
自签名证书是由用户自行生成的,没有经过任何颁发机构的签名或认证。
自签名证书在网络上通常不受信任,因为缺乏第三方的安全验证和认证。
当用户仅在内部网络或测试环境中使用时,可以使用自签名证书来提供加密和安全保护,但在公共网络中使用会引发安全警告。
综上所述,商业 SSL 证书提供最高级别的信任和安全性,并提供额外的服务和支持。免费的证书颁发机构提供免费的 SSL 证书,一般也能满足大多数需求,但可能存在一些限制。而自签名证书主要适用于内部网络或测试环境,而在公共网络中的使用则可能会引发安全警告。
用openssl生成证书
在使用 openssl 生成 SSL 证书之前,我们需要先生成私钥。可以使用如下命令行来生成私钥:
openssl genrsa -out key.pem 1024
在这个命令中,我们使用了 genrsa 子命令,并且设置了输出文件的名称,以及私钥的长度为 1024。运行此命令会在当前文件夹中生成一个 key.pem 文件,这个文件就是我们所需要的私钥文件。
生成证书请求
有了私钥之后,我们就可以生成证书请求了。在使用 openssl 生成证书请求时,可以按照以下命令行来执行:
openssl req -new -key key.pem -out csr.pem
在这个命令中,我们使用 req 子命令,并且按照要求设置了私钥和输出文件名。在生成证书请求时,需要输入一些信息,比如你的城市,国家等信息,请根据需求填写相应的信息。
签名证书请求
生成证书请求后,我们需要将证书请求发送给证书颁发机构进行签名。为了在服务器上轻松地创建自签名的 SSL 证书,我们可以使用类似如下的命令或使用 CA 来签署证书请求:
openssl x509 -req -in csr.pem -out cert.pem -signkey key.pem -days 365
在这个命令中,我们使用了 x509 命令,并且指定了证书请求文件名和输出文件名。我们还使用了 -signkey 选项来指定要使用的私钥文件,以便签署证书。再需要指定 -days 选项均是附带了,控制证书的有效期。
这些选项组合将使用我们之前生成的私钥来签署证书请求,并将其输出到我们指定的文件 cert.pem 中。
配置nginx
在配置文件中添加 server标签
server {
listen 443 ssl;
server_name 127.0.0.1;
ssl_certificate /data/vp/nginx/ssl/cert.pem; # 签名证书存放路径
ssl_certificate_key /data/vp/nginx/ssl/key.pem; # 私钥存放路径
# 配置SSL参数
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384;
# 配置SSL会话缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 30m;
# 配置SSL安全性选项
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
### local 配置与http的配置保持一致
location / {
root /usr/share/nginx/html/dist;
index index.html index.htm;
}
location /path/ {
proxy_pass http://server/;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html/dist;
}
}
说明
文章参考引用连接,如有问题欢迎留言。