nginx - 配置 https 服务器(含免费证书申请)

说明

以前总觉得搭建一个https服务器好难好难,亲手操作之后,其实并不难,因为现在可以从 letsencrypt 申请免费的 https 第三方证书,使用 certbot 工具更是将证书申请变得是分分钟搞定的易事。

步骤

  1. 安装 certbot
> yum install certbot # centos 7 下安装 certbot
> apt-get install certbot # ubuntu 下安装 certbot

注意:每个系统安装 certbot 都不太一样,具体的安装方式,参考官方网站

  1. 创建证书
> certbot certonly --standalone -d example.com -d www.example.com # 证书作用于域名 example.com 和 www.example.com

相关路径

/etc/letsencrypt/live/www.zmzd.com.cn # 证书目录(链接文件,链接到下面目录中的证书文件)
/etc/letsencrypt/archive/www.zmzd.com.cn # 真实证书目录,这儿的证书可以拷贝,比如到docker容器中...

另外:也可以自建证书,方法如下

> openssl genrsa -out privkey.pem 1024/2038 # 生成私钥
> openssl req -new -x509 -key privkey.pem -out server.pem -days 365 # 根据私钥生成公钥

注意:自建证书不被浏览器认可,打开网站会被阻止,地址栏显示红色警告,但仍然可以访问。

  1. 在 nginx 的 server 区块配置 ssl 相关参数
# https
listen 443 ssl; # 启用 ssl 安全协议
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # 设置公钥的位置
ssl_certificate_key /etc/letsencrypt/live/example.com/fullchain.pem; # 设置私钥的位置
ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers         HIGH:!aNULL:!MD5;
  1. 重启 nginx,搞定!
    在浏览器中用 https 协议访问你的域名是不是绿色的了?

备注

  1. certbot 生成的证书有效期为3个月,即将到期时可用如下命令重新生成证书文件
> certbot renew # 重新生成证书,建议加入到 crontab 定时任务中
> certbot renew  --dry-run # 测试自动更新证书
  1. 可以添加 HSTS 协议,以让站点更加安全
    在头信息中添加 Strict-Transport-Security "max-age=63072000; includeSubdomains;"
    其中Strict-Transport-Security 是 Header 字段名, 后面的 max-age 代表 HSTS 在客户端的生效时间。 includeSubdomains 表示对所有子域名生效。
# nginx 配置
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains;";

参考

certbot 官方
letsencrypt 官方
申请Let's Encrypt免费ssl证书流程和部署https服务
安全补脑 - 开启 HSTS 协议让你的站点更加安全

你可能感兴趣的:(nginx - 配置 https 服务器(含免费证书申请))