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

启用HTTPS过程实例记录

170次阅读
没有评论

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

因为 HTTPS 采用 SSL 加密,所以部署 HTTPS 时需要申请证书,证书的作用就是对浏览器和 Web 服务器双方的身份验证。

步骤 1: 申请证书

我们采用 Let’s Encrypt 签发的免费证书,虽然 Let’s Encrypt 只有 90 天的有效期,但是可以用 Certbot 自动部署工具,进入Certbot 主页,可以看到下图所示。

Let’s Encrypt 签发的证书有效期只有 90 天,甚至希望缩短到 60 天。有效期越短,泄密后可供监控的窗口就越短。为了支撑这么短的有效期,就必须自动化验证和签发。

因为自动化了,长远而言,维护反而比手动申请再安装要简单。

启用 HTTPS 过程实例记录

Certbot 首页 选择自己的 web 服务器类型和操作系统,我们使用的是 nginx+CentOS6.5,选择后就会自动跳转到 install 页面,

注意:centos6.5 默认的 Python 版本是 2.6.6安装 Certbot 需要 python2.7 版本,未来 Certbot 会对 python3.x 支持(Python 3.x support will hopefully be added in the future)

遇到了升级 python 的问题,可以参考另一篇博客:如何升级 Python?http://www.linuxidc.com/Linux/2015-02/112926.htm

1. 安装 certbot

wget https://dl.eff.org/certbot-auto

chmod a+x certbot-auto

certbot-auto

执行 certbot-auto 命令会安装一些 packages,创建虚拟环境,在创建虚拟环境的过程中,需要输入域名(提醒:用逗号或 / 或空格分割域名)、输入邮箱(用于急切的通知和找回丢失的 key)、同意 agreement、选择 ssl.conf;看下面的图片

启用 HTTPS 过程实例记录  启用 HTTPS 过程实例记录   启用 HTTPS 过程实例记录   启用 HTTPS 过程实例记录

2. 申请证书

申请证书有两种验证方式,一种是 standalone,这种验证方式虽然也可以部署后,但是以后更新证书的时候需要重启 web 服务器;

第二种是 webroot,就是在网站根目录下生成一个文件,通过访问该文件来验证,不需要重启 web 服务器。

第一种命令:./path/to/certbot-auto certonly –standalone -d example.com -d www.example.com

第二种命令:./path/to/certbot-auto certonly –webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/baidu -d baidu.com -d www.baidu.com(/var/www/example 是网站的目录

我用了第二种方法。执行第二种命令的过程中会有提醒,图片如下

启用 HTTPS 过程实例记录

3. 测试自动生成证书是否成功

./path/to/certbot-auto renew –dry-run

4.添加定时任务自动更新证书

Since Let’s Encrypt certificates last for 90 days,所以我们还是写个定时任务吧

crontab -u root -e (-u root 表示哪个用户的定时任务)

添加:* * * */3 * ./path/to/certbot-auto renew –quiet (表示每 3 个月执行一次)

步骤 2: 部署 https

修改 nginx 的配置文件(比如在 /usr/local/nginx/conf/nginx.conf),添加如下代码,然后重启 nginx

# HTTPS server
# 部署 HTTPS
server {
listen 443 ssl;
server_name www.example.com example.com;
root /var/www/example;

ssl on;

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2;(version1.2 is the only secure protocol version. 请参考SSL Labs: Increased Penalty When TLS 1.2 Is Not Supported

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

}

另外还可以加入如下代码实现 80 端口重定向到 443,代码片段如下

server {
listen 80;
server_name www.example.com example.com;
#实现 80 端口重定向到 443
rewrite ^(.*) https://$server_name$1 permanent;(或 return 301 https://www.example.com$request_uri

}

另外:安装成功的 nginx 如何添加未编译模块?

在重启 nginx 后发生了错误,错误如下:

nginx: [emerg] the “ssl” parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:117  // 说明缺少 http_ssl_module 模块
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

解决方法如下:

步骤 1: 查看 nginx 编译安装时的命令,安装了哪些模块和 ngnix 版本

/usr/local/nginx/sbin/nginx -V

会显示如下信息:

nginx version: nginx/1.7.7
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
configure arguments: –prefix=/usr/local/nginx –user=www –group=www

步骤 2: 重新编译 nginx-1.7.7

wget http://nginx.org/download/nginx-1.7.7.tar.gz

tar zxvf nginx-1.7.7.tar.gz

cd nginx-1.7.7

//configure 参数要和步骤 1 的 configure arguments 一模一样

./configure –prefix=/usr/local/nginx –with-http_ssl_module  –user=www –group=www

make (没有 make install)

步骤 3: 备份 nginx 的二进制文件

cp /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.bak

步骤 4: 覆盖 nginx 的二进制文件

cp objs/nginx   /usr/local/nginx/sbin/

会提醒如下信息:

cp:是否覆盖 ”/usr/local/nginx/sbin/nginx”?y
cp: 无法创建普通文件 ”/usr/local/nginx/sbin/nginx”: 文本文件忙(nginx 二进制文件繁忙,可以停止 nginx,再试一次就可以了

步骤 5: 启动 nginx

service nginx start (或 /etc/init.d/nginx start)

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-05/144106.htm

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