资讯专栏INFORMATION COLUMN

升级你的hexo为https

james / 3234人阅读

摘要:可以使用多个添加多个域名可以帮我们自动注册证书,是静态资源所指的路径。输入命令之后选择即可,后续将会让你继续输入邮箱信息如果出现字样,则证明证书已被自动注册。

本文以Debian 8为服务器栗子

最近升级了个人博客为https协议,写一个详细的教程帮助更多人升级https。

https的详细原理在此文中省略,简略来说,既是客户端在访问服务器时需要一个数字证书(里面包括公钥),它由权威机构(CA, Certificate Authority)颁发,来确认公钥确实是服务器发出来的。

证书价格不菲,大概7天需要几美金到几百美金不等(根据认证的等级和域名覆盖范围区分),所以很多证书都是商业级的,提供给商业网站使用。

获取免费证书

那么个人将无法获取数字证书么?不是的,为了鼓励https的普及,EFF成立了免费证书最大的提供商为Let’s Encrypt,可以提供免费证书。那么小型的网站,就可以使用免费证书升级为https啦。

当然Let’s Encrypt生成的证书,只能是单域名的,而且只有最低级的域名验证。

克隆letsencrypt客户端
$ git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
如果遇到权限问题,记得先创建/opt/letsencrypt文件夹再,更改文件夹权限为可写入。
注册证书 Nginx指向静态路径注册证书

注册一个域名证书非常简单,使用letsencrypt就能生成https所需的证书。当然,用letsencrypt生成的证书只支持域名验证,只需要用letsenctypt的自动注册证书命令,证明这个域名是自己的是用的即可。

$ cd /opt/letsencrypt
$ ./letsencrypt-auto certonly -a webroot --webroot-path=/var/www/me -d me.chanchun.com.cn # 可以使用多个 -d 添加多个域名

letsencrypt可以帮我们自动注册证书,--webroot-path是静态资源所指的路径。-d是域名域名,也可以多个-d增加多个域名。最后确保使用https的域名都被letsencrypt注册。

后续将会让你继续输入邮箱信息

如果出现Congratulations!字样,则证明证书已被自动注册。

Nginx转发型注册证书

如果是使用Nginx直接重定向服务器本地服务,非静态资源,就省略--webroot-path-a参数。

$ cd /opt/letsencrypt
$ ./letsencrypt-auto certonly -d ca.chanchun.com.cn

输入命令之后

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Nginx Web Server plugin (nginx)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press "c" to cancel):

选择1即可,后续将会让你继续输入邮箱信息

如果出现Congratulations!字样,则证明证书已被自动注册。

Nginx配置

直到这一步,证书已经就绪,只要配置好Nginx即可完美升级https。Nginx安装、启动教程请具体请教Nginx教程。

转发到本地服务Nginx配置Sample:
#http重定向到https配置 证书验证配置
server {
    listen 80;
    server_name ca.chanchun.com.cn; # 这里写你的域名
    location ^~ /.well-known/acme-challenge/ { # 不要修改 letsencrypt需要验证你的域名
        default_type "text/plain";
        proxy_pass http://localhost:3000; # 填写你需要转发的服务器地址
    }
    location = /.well-known/acme-challenge/ { # 不要修改 letsencrypt需要验证你的域名
        return 404;
    }
    return 301 https://$server_name$request_uri;
}

# https配置
server {
    # SSL Configuration
    listen 443 ssl;
    server_name ca.chanchun.com.cn; # 这里写你的域名

    # copy from https://cipherli.st
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off; # Requires nginx >= 1.5.9
    ssl_stapling on; # Requires nginx >= 1.3.7
    ssl_stapling_verify on; # Requires nginx => 1.3.7
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;

    # specify cert files
    ssl_certificate /etc/letsencrypt/live/ca.chanchun.com.cn/fullchain.pem; # 中间填写你的域名
    ssl_certificate_key /etc/letsencrypt/live/ca.chanchun.com.cn/privkey.pem; # 中间填写你的域名
    location / {
        proxy_pass http://localhost:3000; # 填写你需要转发的服务器地址
    }
}
指向静态文件Nginx配置Sample:
server {
    listen 80;
    server_name me.chanchun.com.cn; # 这里写你的域名
    location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        root /var/www/me; # 这里写你的静态文件目录
    }
    location = /.well-known/acme-challenge/ {
        return 404;
    }
    return 301 https://$server_name$request_uri;
}

server {
    # SSL Configuration
    listen 443 ssl;
    server_name me.chanchun.com.cn;  # 这里写你的域名
   # specify cert files
    ssl_certificate /etc/letsencrypt/live/me.chanchun.com.cn/fullchain.pem;  # 中间写你的域名
    ssl_certificate_key /etc/letsencrypt/live/me.chanchun.com.cn/privkey.pem;  # 中间写你的域名
    location / {
        root  /var/www/me; # 这里写你的静态文件目录
        index index.html index.htm; # 这里写你暴露的静态文件
    }
}

Nginx配置各有各的配置方法,这里只要保证四点:

域名配置正确

静态文件目录路径、本地服务目录路径配置正确

.well-known/acme-challenge目录配置正确

要保证80默认端口和443ssl端口都有配置

如果配置好Nginx,那么访问网站就会有绿色的小钥匙啦,说明你的https站点搭建好。

自动更新证书

letsencrypt证书最多只有90天,90天之后我们需要重新注册证书,当然这个可以交给服务器自己做啦。

验证自己的证书是否可以更新
$ cd /opt/letsencrypt
$ ./letsencrypt-auto renew --dry-run
此命令只是验证 不会更新证书

如果出现Congratulations!字样或者已经更新字样则证明可以自动更新。如果出现错误,或者说路径找不到的情况,大多数情况是.well-known/acme-challenge目录配置没有正确的配置成功

编写crontab脚本
$ crontab -e

脚本内容

30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
如果遇到权限问题,可先创建/var/log目录再设置其权限为可写入
成功

享受https的绿色小锁吧!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40016.html

相关文章

  • 追求阅读舒适度的 Hexo博客主题hexo-theme-cafe

    摘要:主题旨在追求简约操作简单阅读舒适度。英文版介绍,目前版本主要调整了整体的样式,布局细调,以及新增一些等,后期会在使用的过程中不断进行调整。您可以使用减记语法或标签插件添加你的照片。 hexo-theme-cafe Cafe 主题旨在追求简约、操作简单、阅读舒适度。 英文版介绍 Read in English Inspire by Landscape,目前版本主要调整了整体的样式,布局细...

    princekin 评论0 收藏0
  • 追求阅读舒适度的 Hexo博客主题hexo-theme-cafe

    摘要:主题旨在追求简约操作简单阅读舒适度。英文版介绍,目前版本主要调整了整体的样式,布局细调,以及新增一些等,后期会在使用的过程中不断进行调整。您可以使用减记语法或标签插件添加你的照片。 hexo-theme-cafe Cafe 主题旨在追求简约、操作简单、阅读舒适度。 英文版介绍 Read in English Inspire by Landscape,目前版本主要调整了整体的样式,布局细...

    eechen 评论0 收藏0
  • 追求阅读舒适度的 Hexo博客主题hexo-theme-cafe

    摘要:主题旨在追求简约操作简单阅读舒适度。英文版介绍,目前版本主要调整了整体的样式,布局细调,以及新增一些等,后期会在使用的过程中不断进行调整。您可以使用减记语法或标签插件添加你的照片。 hexo-theme-cafe Cafe 主题旨在追求简约、操作简单、阅读舒适度。 英文版介绍 Read in English Inspire by Landscape,目前版本主要调整了整体的样式,布局细...

    xiaowugui666 评论0 收藏0
  • 每周前端开源推荐第四期

    摘要:每周前端开源推荐第四期上一期介绍了很多实时框架,不知大家有没有去体验一下实时的乐趣。在上面融了,上周在上面开源,一周的时间,数已经了,火的一塌糊涂。 每周前端开源推荐第四期 mozilla / togetherjs A service for your website that makes it surprisingly easy to collaborate in real...

    chaosx110 评论0 收藏0

发表评论

0条评论

james

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<