阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux 下 Nginx 安装部署 Let’s Encrypt 证书实现 HTTPS

234次阅读
没有评论

共计 5068 个字符,预计需要花费 13 分钟才能阅读完成。

网站转成 https 是大势所趋。但是在国内,推进的过程显然要比国外慢很多。现阶段如果将自己的网站改成 https 以后,会碰到这样的尴尬现象:如果在页面上引用了 http:// 的链接或者图片,用户在浏览器上会看到类似该网站是非安全网站的警告,对于网站运营者来说可以说非常冤。由于很多链接是第三方的,没有办法去控制。

对于 api 接口类的网站,就不存在混合的问题,所以首先应该从 api 后台接口部分开始用 https。(ios 已经强制要求接口地址必须为 https 了)

大牌提供商的 SSL 证书可不便宜,对于大公司也许不算什么,但是对于小公司及个人来说贵了。现在国外出现的免费 SSL 服务商 Let’s Encrypt,绝对是小公司或者开发者的福音。

这里整理了在 CentOS7 + nginx 安装和使用 Let’s Encrypt 的完整过程。

官方网站:https://letsencrypt.org/

申请 let’s encript 证书可以有三种方式:

1、通过 certbot 脚本
2、通过支持 Letencript 的虚拟主机提供商
3、手工申请 manual mode

没有特殊情况,首选采用 certbot 脚本方式。

由于 letsencrypt 证书的有效期只有 90 天,需要长期使用的话,需要在失效前进行延长申请。用 certbot 脚本工具,可以将延期申请的脚本写到定时任务来自动完成,非常方便。

 一、前提条件
1. 拥有一个域名,例如 mydomain.com (在国内主机的用的话,还需要通过 ICP 备案)
2. 在域名服务器创建一条 A 记录,指向云主机的公网 IP 地址。例如 demo.mydomain.com 指向 xxx.xxx.xxx.xxx 的 IP 地址
3. 要等到新创建的域名解析能在公网上被解析到。
4. 据说国内的域名提供商对 letsencrypt 的支持非常差,但是经过试验,至少现阶段用 dnspod 解析的域名还没碰到问题。

一、前提条件

1. 拥有一个域名,例如 mydomain.com (在国内主机的用的话,还需要通过 ICP 备案)

2. 在域名服务器创建一条 A 记录,指向云主机的公网 IP 地址。例如 demo.mydomain.com 指向 xxx.xxx.xxx.xxx 的 IP 地址

3. 要等到新创建的域名解析能在公网上被解析到。

4. 据说国内的域名提供商对 letsencrypt 的支持非常差,但是经过试验,至少现阶段用 dnspod 解析的域名还没碰到问题。

二、在云主机上安装 nginx 服务器,配置好最基本的 80 口 ngnix 站点

例如,假设为 demo.mydomain.com 快速配置一个最简单的 nginx 站点

1. 安装 nginx 服务器

二、在云主机上安装 nginx 服务器,配置好最基本的 80 口 ngnix 站点

例如,假设为 demo.mydomain.com 快速配置一个最简单的 nginx 站点

1. 安装 nginx 服务器

yum install -y nginx

2. 配置一个 nginx 站点

mkdir /opt/www/demo.mydomain.com -p

chown nginx:nginx /opt/www/demo.mydomain.com/ -R

vi /etc/nginx/conf.d/demo.mydomain.com.conf

将以下内容复制到该文件中

server {
listen 80;
server_name demo.mydomain.com;
charset utf-8;
root /opt/www/demo.mydomain.com;
index index.html index.htm;
access_log  /var/log/nginx/demo.mydomain.com_access.log;
error_log  /var/log/nginx/demo.mydomain.com_error.log;
}

3. 启动 nginx 服务

systemctl start nginx

注意:要确认 CentOS 服务器开放 80 口及 443 端口

4. 在浏览器上确认访问到 http://demo.mydomain.com 如果没有页面的话,正常情况下应该会显示 403 错误。nginx 站点配置完成。

三、安装 certbot 工具

yum install -y epel-release

yum install -y certbot

四、使用 certbot 命令初次申请证书

# 使用方法:certbot certonly –webroot -w [Web 站点目录] -d [站点域名] -m [联系人 email 地址] –agree-tos certbot certonly –webroot -w /opt/www/demo.mydomain.com -d demo.mydomain.com -m myname@gmail.com –agree-tos

注意:联系人 email 地址要填写真实有效的,letsencrypt 会在证书在过期以前发送预告的通知邮件。申请成功后,会显示以下 Congratulations 信息

IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/[xxx.xxx.xxx]/fullchain.pem. Your cert will
expire on 2017-03-20. To obtain a new or tweaked version of this
certificate in the future, simply run certbot again. To
non-interactively renew *all* of your certificates, run “certbot
renew”
– If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let’s Encrypt:  https://letsencrypt.org/donate
Donating to EFF:                    https://eff.org/donate-le

证书的保存位置在:

/etc/letsencrypt/live/demo.mydomain.com/
用户证书 cert.pem -> ../../archive/demo.mydomain.com/cert1.pem 中间证书 chain.pem -> ../../archive/demo.mydomain.com/chain1.pem 证书链, chain.pem + cert.pemfullchain.pem -> ../../archive/demo.mydomain.com/fullchain1.pem 证书私钥 privkey.pem -> ../../archive/demo.mydomain.com/privkey1.pem

五、查看证书有效期的命令

openssl x509 -noout -dates -in /etc/letsencrypt/live/[demo.mydomain.com]/cert.pem

显示的是格林威治时间,不知道怎么才能显示当前时区。

六、设置定时任务自动更新证书

letsencrypt 证书的有效期是 90 天,但是可以用脚本去更新。

# 更新证书

certbot renew –dry-run

# 如果不需要返回的信息,可以用静默方式

certbot renew –quiet

注意:更新证书时候网站必须是能访问到的

# 可以使用 crontab 定时更新,例如:
# 每月 1 号 5 时执行执行一次更新,并重启 nginx 服务器
00 05 01 * * /usr/bin/certbot renew –quiet && /bin/systemctl restart nginx

七、应用实例:配置 nginx 使用证书开通 https 站点

1. 生成 Perfect Forward Security(PFS)键值

mkdir /etc/ssl/private/ -p

cd /etc/ssl/private/

openssl dhparam 2048 -out dhparam.pem

1.Perfect Forward Security(PFS) 是个什么东西,中文翻译成完美前向保密,一两句话也说不清楚,反正是这几年才提倡的加强安全性的技术。如果本地还没有生成这个键值,需要先执行生成的命令。

2. 生成的过程还挺花时间的,喝杯咖啡歇会儿吧。

2. 配置 nginx 站点,例如 /etc/nginx/conf.d/demo.mydomain.com.conf,样例内容如下:

server {
 
listen 80;
 
server_name demo.mydomain.com;
 
rewrite ^ https://$server_name$request_uri? permanent;
 
}
 
server {
 
listen 443 ssl;
 
server_name demo.mydomain.com;
 
charset utf-8;
 
root /opt/www/demo.mydomain.com;
 
index index.html index.htm;
 
access_log /var/log/nginx/demo.mydomain.com_access.log;
 
error_log /var/log/nginx/demo.mydomain.com_error.log;
 
# letsencrypt 生成的文件
 
ssl_certificate /etc/letsencrypt/live/demo.mydomain.com/fullchain.pem;
 
ssl_certificate_key /etc/letsencrypt/live/demo.mydomain.com/privkey.pem;
 
ssl_session_timeout 1d;
 
ssl_session_cache shared:SSL:50m;
 
ssl_session_tickets on;
 
ssl_dhparam /etc/ssl/private/dhparam.pem;
 
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 
# 一般推荐使用的 ssl_ciphers 值: https://wiki.mozilla.org/Security/Server_Side_TLS
 
ssl_ciphers ‘ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK’;
 
ssl_prefer_server_ciphers on;
 
}

3. 在浏览器打开 http://demo.mydomain.com, 如果正常跳转到 https://demo.mydomain.com,就算成功了。如果是 chrome 浏览器,在地址栏点击小锁的图标,可以查看证书的详情。

Linux 下 Nginx 安装部署 Let's Encrypt 证书实现 HTTPS

Let’s Encrypt Root 得到所有主要机构的信任  https://www.linuxidc.com/Linux/2018-08/153409.htm

搭配 Let’s Encrypt 半自动化为 Nginx 配置 https  http://www.linuxidc.com/Linux/2016-01/127879.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计5068字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中