V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
getaobj
V2EX  ›  程序员

轻松全站 HTTPS,还没用上 https (可申请泛域名证书)的朋友可以操练起来了

  •  4
     
  •   getaobj · 2018-11-07 11:03:59 +08:00 · 5523 次点击
    这是一个创建于 2211 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前几天刚搭了博客:《双 11 买服务器的朋友一定有要搭博客的吧? Docker+Ghost 快速搭建教程请拿走》

    写了点文章手机上看,发现竟然被运营商劫持投广告了。这不能忍,只是连夜上 https 了。

    原文图文链接: https://www.jianshu.com/p/57e5bb1277ce

    为什么要上 HTTPS

    安全:你与用户之间的消息加密传输,防止中间人攻击(就是我遇到的问题)

    其它优点:当你在国内使用域名时,需要备案。有时你想测试一下你的站,用上未备案的域名,怎么办呢? https 可以帮你暂时绕过阿里云弹的未备案页(强烈建议去备案你的域名,一来你应当守法,二来未备案国内 cdn、网站收录什么的都需要备案的域名),其它暂时没想到有什么优点。

    准备

    • 域名(自备)
    • acme.sh acme.sh 是一个自动申请 https 证书的脚本,使用方便,功能也非常强大。

    安装: curl https://get.acme.sh | sh

    或者

    wget -O - https://get.acme.sh | sh

    这样你已经把 acme.sh 这个小工具安装到你本地的 ~/.acme.sh/中了,而不会在你系统的其它地方装些乱七八糟的东西。

    极速开始

    阿里云购买域名的朋友可以走这个极速通道,因为阿里云有接口可以直接操作域名控制台,这个接口已经被整合到了 acme.sh 这个工具里面。只要设置一下 Ali_Key 和 Ali_Secret, 从哪里获得?

    1. 在你的命令行中执行如下命令: export Ali_Key="换成你的 AccessKey ID" export Ali_Secret="换成你的 Access Key Secret"

    2. 开始申请证书 acme.sh --issue --dns dns_ali -d 2td.cc -d '*.2td.cc' 2td.cc 是我的域名,这里需要换成你的。 参数解释: acme.sh :表示使用你刚安装好的 acme.sh

    --issue :申请证书

    --dns dns_ali:使用阿里云的 dns 服务,在阿里云买的域名,在没有修改默认 dns 的前提下,都可以使用这个参数来申请 https 证书。

    -d 2td.cc-d表示 domain,后面跟你要申请域名。

    -d '*.2td.cc':这里的-d 与上方一样,-d 参数可以带多个,这里的'*.2td.cc'中的 * 表示泛域名,只要申请了这个证书像( www.2td.ccmail.2td.cch5.2td.cc ...)这类的二级域名都可以使用此证书来实现 https。注意 2td.cc这个域名不在这条规则里,所以上面又加了一条-d 2td.cc,这样你的主域名、二级子域名均可以使用此证书。

    1. 等待执行完成,期间会有 120 秒的倒计时,结束后如果显示成功,则证书申请成功。

    2. 应用到 nginx 修改你 nginx 的配置,配置 https

    server {
        listen 443 ssl;
        # 有了 https 可以尝试开启 http2,加速你的网站 
        # http2 需要你 nginx 加载了 http2 模块,用如下配置开启。
        # listen 443 ssl http2;
        server_name 2td.cc;
    
        ssl_certificate /root/.acme.sh/2td.cc/fullchain.cer;
        ssl_certificate_key /root/.acme.sh/2td.cc/2td.cc.key;
    
        # charset koi8-r;
        access_log  /var/log/nginx/host.access.log  main;
        
        # 下面写你之前的配置
    }
    
    26 条回复    2018-11-08 22:34:45 +08:00
    find456789
        1
    find456789  
       2018-11-07 11:09:57 +08:00   ❤️ 4
    用啥 nginx, 用 caddy 一秒钟就能上 https
    getaobj
        2
    getaobj  
    OP
       2018-11-07 11:22:38 +08:00
    @find456789 这也是个好方案

    nginx 重度用户,切起来不好切啊
    dmhs
        3
    dmhs  
       2018-11-07 13:11:34 +08:00
    域名证书怎么注销呢?
    wlchn
        4
    wlchn  
       2018-11-07 13:15:45 +08:00 via iPhone   ❤️ 1
    如果对响应速度不敏感,比如一些个人博客,可以直接 cloudflare 上 https。
    getaobj
        5
    getaobj  
    OP
       2018-11-07 13:31:53 +08:00   ❤️ 1
    @dmhs
    acme.sh --remove -d example.com
    getaobj
        6
    getaobj  
    OP
       2018-11-07 13:33:42 +08:00
    @wlchn 感谢提供其它方式的解决方案,手动点赞。
    cwang22
        7
    cwang22  
       2018-11-07 13:36:57 +08:00
    @wlchn Cloudflare 对响应速度有影响么?
    getaobj
        8
    getaobj  
    OP
       2018-11-07 13:41:49 +08:00
    @cwang22 个人感觉,国外的可能稍稍慢一点。
    mytry
        9
    mytry  
       2018-11-07 13:45:03 +08:00   ❤️ 1
    cloudflare + workbox
    getaobj
        10
    getaobj  
    OP
       2018-11-07 13:51:50 +08:00
    @mytry 手动感谢,以示尊敬
    soulzz
        11
    soulzz  
       2018-11-07 13:58:18 +08:00 via Android
    所以我觉得挺麻烦的,直接在 cdn 上 https,服务器就不用配置了
    getaobj
        12
    getaobj  
    OP
       2018-11-07 14:14:58 +08:00
    @soulzz 用 cdn 的土豪啊,不过这配置的真的不麻烦啊
    byfar
        13
    byfar  
       2018-11-07 14:44:25 +08:00
    不错,已收藏
    calpamomo
        14
    calpamomo  
       2018-11-07 15:21:49 +08:00   ❤️ 1
    Netlify 秒上 HTTPS。。。
    ilaipi
        15
    ilaipi  
       2018-11-07 15:39:57 +08:00
    大佬,用这种方式,能不能在哪里看到我都申请了多少个域名证书?
    getaobj
        16
    getaobj  
    OP
       2018-11-07 16:09:11 +08:00
    @calpamomo 赞,已收藏
    getaobj
        17
    getaobj  
    OP
       2018-11-07 16:10:19 +08:00
    @ilaipi 他这个是调用接口去 let's encrypt 申请的证书,具体能不能查就不清楚了。

    不过我感觉你都没有账号密码,用什么去查呢,用域名吗?
    ilaipi
        18
    ilaipi  
       2018-11-07 16:19:23 +08:00
    @getaobj #17 是的,没有用户名密码,没法查。。只能自己记录了。。之前第一次搞不是很懂,乱七八糟的,自动更新都失效了,最近过期了,现在重新搞搞。。规范一点,再自己记录一下。参考参考这篇文章,感谢!
    getaobj
        19
    getaobj  
    OP
       2018-11-07 16:25:13 +08:00
    @ilaipi 是用的同一个工具吗?用这个工具会自动加一条自动重新申请的 crontab,不需要手动去更新
    ilaipi
        20
    ilaipi  
       2018-11-07 16:30:55 +08:00
    @getaobj 嗯嗯,是这个工具,可能自动任务失败了,之前的证书失效了。我现在再生成一次,看 3 个月后怎么样
    ilaipi
        21
    ilaipi  
       2018-11-07 16:47:49 +08:00
    [Wed Nov 7 16:44:40 CST 2018] Your cert is in /root/.acme.sh/*.xxxxx.com/*.xxxxx.com.cer
    [Wed Nov 7 16:44:40 CST 2018] Your cert key is in /root/.acme.sh/*.xxxxx.com/*.xxxxx.com.key
    [Wed Nov 7 16:44:40 CST 2018] The intermediate CA cert is in /root/.acme.sh/*.xxxxx.com/ca.cer
    [Wed Nov 7 16:44:40 CST 2018] And the full chain certs is there: /root/.acme.sh/*.xxxxx.com/fullchain.cer

    @getaobj 我想问下,*.xxxxx.com.cer 和 fullchain.cer 有什么区别?还有那个 ca.cer ?
    getaobj
        22
    getaobj  
    OP
       2018-11-07 17:37:28 +08:00
    @ilaipi 好问题!

    *.xxxxx.com.cer 这个应该是你根证书,是真正的证书。

    fullchain.cer 是校验证书用的

    以上个人看法,可参考 https://support.dnsimple.com/articles/what-is-ssl-certificate-chain/
    dif
        23
    dif  
       2018-11-07 18:28:24 +08:00   ❤️ 1
    CloudFlare + 源站, 全程 SSL。
    getaobj
        24
    getaobj  
    OP
       2018-11-07 19:03:45 +08:00
    @dif 赞,手动感谢
    hanguofu
        25
    hanguofu  
       2018-11-08 13:38:09 +08:00 via Android
    这个科普贴写得好,同感谢!
    getaobj
        26
    getaobj  
    OP
       2018-11-08 22:34:45 +08:00
    @hanguofu 哈哈,希望对你有帮助
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1416 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:46 · PVG 07:46 · LAX 15:46 · JFK 18:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.