当前位置: 代码网 > 服务器>网络>SSL > nginx配置SSL/TLS证书的实现步骤

nginx配置SSL/TLS证书的实现步骤

2025年10月11日 SSL 我要评论
前言在当今互联网环境中,网站安全性至关重要。ssl/tls 协议为网站提供了加密通信的能力,保护用户数据免受窃听和篡改。本文将详细介绍如何在 nginx 服务器上配置 ssl/tls 证书,包括获取证

前言

在当今互联网环境中,网站安全性至关重要。ssl/tls 协议为网站提供了加密通信的能力,保护用户数据免受窃听和篡改。本文将详细介绍如何在 nginx 服务器上配置 ssl/tls 证书,包括获取证书、配置 nginx、强化安全性等完整流程。无论您是使用 let’s encrypt 的免费证书还是自签名证书,都能在本指南中找到对应的配置方法。

一、准备工作:安装 nginx

1.1 安装 epel 仓库

sudo yum install epel-release -y

1.2 安装 nginx

sudo yum install nginx -y

1.3 启动并设置 nginx 开机启动

sudo systemctl start nginx
sudo systemctl enable nginx

1.4 检查 nginx 是否正常运行

访问 http://your_server_ip,你应该能看到 nginx 的默认欢迎页面。如果没有,使用以下命令检查 nginx 状态:

sudo systemctl status nginx

二、获取 ssl/tls 证书

ssl/tls 证书是启用 https 加密连接所必需的。我们可以使用免费的 let’s encrypt 证书,也可以选择使用 自签名证书

2.1 使用 let’s encrypt 证书(推荐)

2.1.1 安装 certbot

sudo yum install epel-release -y
sudo yum install certbot python2-certbot-nginx -y

2.1.2 获取 ssl 证书

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

2.1.3 配置自动续期

sudo crontab -e

添加以下行:

0 0 * * * /usr/bin/certbot renew --quiet

2.2 创建自签名证书(仅用于测试)

2.2.1 生成自签名证书

mkdir -p /usr/local/nginx/ssl/private
#证书私钥文件夹
mkdir -p /usr/local/nginx/ssl/certs
#证书请求文件夹

openssl genpkey -algorithm rsa -out /usr/local/nginx/ssl/private/nginx-selfsigned.key -pkeyopt rsa_keygen_bits:2048
#-algorithm指定证书算法 sra
#-out 指定输出目录
#-pkeyopt 指定秘钥长度,2048标准安全
openssl req -new -key /usr/local/nginx/ssl/private/nginx-selfsigned.key -out /usr/local/nginx/ssl/certs/nginx-selfsigned.csr
#req -new 生成一个新的证书请求
#-key /usr/local/nginx/ssl/private/nginx-selfsigned.key 请求一个私钥
#-out /usr/local/nginx/ssl/certs/nginx-selfsigned.csr 输出到证书请求文件
openssl x509 -req -days 365 -in /usr/local/nginx/ssl/certs/nginx-selfsigned.csr -signkey /usr/local/nginx/ssl/private/nginx-selfsigned.key -out /usr/local/nginx/ssl/certs/nginx-selfsigned.crt
#x509标准证书
#-req -days 365 -in  /usr/local/nginx/ssl/certs/nginx-selfsigned.csr生成一个新的证书请求365天的
#-signkey  /usr/local/nginx/ssl/private/nginx-selfsigned.key指向私钥地址
#-out  /usr/local/nginx/ssl/certs/nginx-selfsigned.crt指向证书地址
==================================证书签发对话=====================================

其他字段说明(一般在用 openssl req -new -key ... 生成 csr 时会问)

    country name (2 letter code): 国家代码(必须 2 位,例如 cn、us)

    state or province name: 省/州全名,例如 zhejiang

    locality name: 城市,例如 hangzhou

    organization name: 公司或组织名,例如 mycompany ltd

    organizational unit name: 部门名,例如 it department(可留空)

    common name (e.g. server fqdn): 你的域名,例如 example.com

    email address: 邮箱地址,例如 admin@example.com

2.2.2验证是否生成成功

证书应该已经保存在 /usr/local/nginx/ssl/certs/nginx-selfsigned.crt(自签名证书),密钥文件保存在 /usr/local/nginx/ssl/private/nginx-selfsigned.key`(私钥文件)。在nginx去配置引导这两个文件

在企业中,一般获得域名后,域名都会自带证书,所以实际上直接将证书和私钥配置在nginx中即可。

三、配置 nginx 启用 ssl/tls

3.1 编辑 nginx 配置文件

vim /usr/local/nginx/conf/nginx.conf

3.2 配置 ssl 证书路径

server {
    listen 443 ssl;
    server_name look.com www.look.com;

    ssl_certificate /usr/local/nginx/ssl/certs/nginx-selfsigned.crt;
    #指定密钥路径
    ssl_certificate_key /usr/local/nginx/ssl/private/nginx-selfsigned.key;
    #指定证书路径
    ssl_protocols tlsv1.2 tlsv1.3;
    #证书版本
    ssl_ciphers tls_aes_128_gcm_sha256:tls_aes_256_gcm_sha384:tls_chacha20_poly1305_sha256;
    #定义加密套件。可以根据安全需求选择合适的加密方法。
    #openssl版本低的解决方法
    #一、修改为ssl_ciphers eecdh+aesgcm:edh+aesgcm:aes256+eecdh:aes256+edh;
    #二、升级openssl版本
    ssl_prefer_server_ciphers on; 
    #强制服务器优先选择加密套件。

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}

3.3 配置 http 到 https 重定向

这将使得访问 http(端口 80)的请求自动重定向到 https。

server {
    listen 80;
    server_name benet.com www.benet.com;
    return 301 https://$host$request_uri;
}

3.4 配置 http/2(可选)

server {
    listen 443 ssl http2;
    ...
}

四、强化 ssl/tls 安全性

为了提升 ssl/tls 配置的安全性,我们可以实施一些最佳实践。

4.1 禁用弱加密协议

推荐仅启用 tls 1.2 和 tls 1.3,禁用所有过时的协议,如 sslv3 和 tls 1.0/1.1。

ssl_protocols tlsv1.2 tlsv1.3;

4.2 启用 http strict transport security (hsts)

hsts 强制浏览器只能通过 https 访问网站。以下配置将设置最长为一年(31536000 秒)的 hsts:

add_header strict-transport-security "max-age=31536000; includesubdomains" always;

4.3 启用更强的 diffie-hellman 参数

为了确保安全,使用一个更强的 diffie-hellman 参数。生成一个 2048 位的 dh 参数文件:

sudo openssl dhparam -out /usr/local/nginx/ssl/certs/dhparam.pem 2048

然后在 nginx 配置中引用它:

ssl_dhparam /usr/local/nginx/ssl/certs/dhparam.pem;

4.4 配置加密套件

配置一个现代、安全的加密套件,并禁用已知的弱加密算法。例如:

ssl_ciphers 'tls_aes_128_gcm_sha256:tls_aes_256_gcm_sha384:ecdhe-rsa-aes128-gcm-sha256:ecdhe-rsa-aes256-gcm-sha384';

五、验证配置

5.1 检查 nginx 配置

sudo nginx -t

5.2 重启 nginx

sudo systemctl restart nginx

5.3 测试 https 配置

使用浏览器访问 https://benet.com,或使用命令:

curl -i https://look.com

总结

通过本文的详细步骤,您已经学会了如何在 nginx 服务器上配置 ssl/tls 证书。无论是使用 let’s encrypt 的免费证书还是自签名证书,都能为您的网站提供安全的 https 连接。同时,通过强化 ssl/tls 配置,可以进一步提升网站的安全性。定期检查和更新证书是确保网站持续安全运行的重要环节。希望本指南能帮助您顺利完成 nginx 的 ssl/tls 配置工作。

到此这篇关于nginx配置ssl/tls证书的实现步骤的文章就介绍到这了,更多相关nginx配置ssl/tls证书内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com