V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sneezry
V2EX  ›  问与答

我应该帮助用户生成私钥吗?

  •  
  •   sneezry · 2016-08-26 21:13:46 +08:00 · 3123 次点击
    这是一个创建于 3040 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前些天我发布了业余时间开发的小玩意( https://ssl.md ),来帮助不会 /不愿意部署 acme 脚本的用户签发 Let's Encrypt 的证书。但我发现到目前为止只成功签发出两张证书 Orz

    从 log 来看,基本都是用户生成的 CSR 有问题导致签发失败,有的用户尝试了好多次都没有成功。在我设计这个网站的时候没有使用现成的 acme 脚本,就是因为这些脚本会自动生成私钥及 CSR 签发证书,而我掌握了用户的私钥显然是不合理的,所以我自己研究 acme 文档重写了一个脚本来签发证书。现在我在怀疑自己的决定是否是正确的,毕竟这个网站的初衷就是帮助对业务不熟练的用户快速签发证书,现在反而还需要他们自己学习 CSR 相关的知识。
    18 条回复    2016-08-27 10:42:48 +08:00
    kn007
        1
    kn007  
       2016-08-26 21:24:02 +08:00
    我倒是觉得无所谓。。。
    popu111
        2
    popu111  
       2016-08-26 21:33:21 +08:00
    现在最大的问题是我登不上=。= 环境: Chrome 52.0.2743.116 m + Win10.10240
    wql
        3
    wql  
       2016-08-26 21:35:20 +08:00 via Android
    不要在后台生成证书。如果你是用浏览器的 WebCrypto API 的话当我没说。
    songjiaxin2008
        4
    songjiaxin2008  
       2016-08-26 21:37:37 +08:00
    两个选项都提供就好啦
    pubby
        5
    pubby  
       2016-08-26 21:45:25 +08:00
    给个桌面端 CSR 生成工具的下载地址就行,有时候确是懒得自己输命令行
    mornlight
        6
    mornlight  
       2016-08-26 23:07:25 +08:00
    我的是 NS 记录一直不生效,不知道咋回事, CloudXNS
    jybox
        7
    jybox  
       2016-08-26 23:31:55 +08:00
    可以在浏览器端帮用户生成,用浏览器的 API 提供给用户下载,私玥不经过到你的服务器。
    anyclue
        8
    anyclue  
       2016-08-27 00:30:36 +08:00   ❤️ 1
    能自动生成 CSR 和私钥的就做成了 sslforfree.com ,需要用户手动生成的就做成了 gethttpsforfree.com
    现在的情况就跟 gethttpsforfree.com 一样,甚至还不如它细致

    我觉得既然真想做就要求同存异从 CSR 入手。既然大家 CSR 的生成都有问题,那就绝对步骤清晰准确、让用户不留疑惑的、一个页面一个页面的引导大家怎样正常的生成 CSR 。只要用你的站申请 LE 证书,傻子都能申请下来,这才是追求的终极引导过程。

    一直担心的 CSR 和私钥是网站生成还是让用户自己生成,说到底还是信任问题。不建议从这方面入手,因为对你的站没人敢信,再加上干这行都有点洁癖,就算你号称怎么安全我估计还是有人不敢信。我觉得还是设法让用户自己生成合适,重在流程上怎么引导让他每一步都能正确操作,又比开头两个站好用,这样的方向才有出路。
    sneezry
        9
    sneezry  
    OP
       2016-08-27 01:50:28 +08:00
    @mornlight 确实找不到哎

    sneezry@ZHELI-X1:~$ dig ns _acme-challenge.gexiao.me

    ; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> ns _acme-challenge.gexiao.me
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 41770
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1280
    ;; QUESTION SECTION:
    ;_acme-challenge.gexiao.me. IN NS

    ;; Query time: 624 msec
    ;; SERVER: 192.168.1.1#53(192.168.1.1)
    ;; WHEN: Sat Aug 27 01:49:30 DST 2016
    ;; MSG SIZE rcvd: 54
    sneezry
        10
    sneezry  
    OP
       2016-08-27 01:59:16 +08:00
    @mornlight 我把 motedown.com 转到了 CloudXNS ,测试 NS 是正常的

    sneezry@ZHELI-X1:~$ dig ns motedown.com

    ; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> ns motedown.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37593
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 12

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1280
    ;; QUESTION SECTION:
    ;motedown.com. IN NS

    ;; ANSWER SECTION:
    motedown.com. 172800 IN NS lv3ns1.ffdns.net.
    motedown.com. 172800 IN NS lv3ns4.ffdns.net.
    motedown.com. 172800 IN NS lv3ns3.ffdns.net.
    motedown.com. 172800 IN NS lv3ns2.ffdns.net.

    ;; ADDITIONAL SECTION:
    lv3ns1.ffdns.net. 1037 IN A 122.228.198.140
    lv3ns1.ffdns.net. 1037 IN A 183.131.161.70
    lv3ns1.ffdns.net. 1037 IN A 119.97.137.185
    lv3ns1.ffdns.net. 1037 IN A 221.204.224.122
    lv3ns1.ffdns.net. 1037 IN A 54.153.30.23
    lv3ns1.ffdns.net. 1037 IN A 113.6.235.74
    lv3ns1.ffdns.net. 1037 IN A 117.169.16.171
    lv3ns1.ffdns.net. 1037 IN A 113.207.30.193
    lv3ns4.ffdns.net. 170237 IN A 42.236.6.154
    lv3ns3.ffdns.net. 170237 IN A 14.18.142.102
    lv3ns2.ffdns.net. 170237 IN A 221.204.224.83

    ;; Query time: 198 msec
    ;; SERVER: 192.168.1.1#53(192.168.1.1)
    ;; WHEN: Sat Aug 27 01:56:35 DST 2016
    ;; MSG SIZE rcvd: 310

    sneezry@ZHELI-X1:~$ dig ns _acme-challenge.motedown.com

    ; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> ns _acme-challenge.motedown.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7672
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 3

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1280
    ;; QUESTION SECTION:
    ;_acme-challenge.motedown.com. IN NS

    ;; ANSWER SECTION:
    _acme-challenge.motedown.com. 540 IN NS acme.ssl.md.

    ;; ADDITIONAL SECTION:
    acme.ssl.md. 79 IN A 168.235.79.202
    acme.ssl.md. 63 IN AAAA 2604:180:3:51b::a2c4

    ;; Query time: 78 msec
    ;; SERVER: 192.168.1.1#53(192.168.1.1)
    ;; WHEN: Sat Aug 27 01:57:48 DST 2016
    ;; MSG SIZE rcvd: 126
    sneezry
        11
    sneezry  
    OP
       2016-08-27 02:23:01 +08:00
    @mornlight 好像有点小 Bug ,已经修复了 =。=,顺便帮你 verify 了……
    microSD
        12
    microSD  
       2016-08-27 05:51:15 +08:00
    Let's Encrypt 目标是自动化配置,每一次续订都由脚本自动完成,你这样做是违背 LE 初衷的,更违背 PKI 的工作流程。又考虑到如果一段时间内请求过于频繁, LE 可能会限制调用 API ,注定了代为申请的做法帮不到多少人。

    你不妨编写完善、详细的配置教程,随机抽取博客读者,请求他们照着做一遍,指出存在的问题,再改进教程。

    如果只是为了自用, StartCom CA 提供的网页配置界面调用浏览器内置的功能生成私钥、上传公钥,服务器碰不到私钥。供参考。

    https://konklone.com/post/switch-to-https-now-for-free
    shyling
        13
    shyling  
       2016-08-27 08:53:17 +08:00 via iPad
    需要。什么 1password 都是帮人生成密码的😂
    sneezry
        14
    sneezry  
    OP
       2016-08-27 10:10:16 +08:00
    @microSD 是这样的,在写这个项目的时候我也考虑过 ACME 就是为了自动化而提出的。但毕竟不是所有的用户都有能力部署自动化脚本,也不是所有环境都支持自动化(比如 Azure Web App )。另外请问有关违背 PKI 的工作流程是在哪里呢,如果违背了 PKI 的工作流程我会改进相关步骤。非常感谢!
    UnisandK
        15
    UnisandK  
       2016-08-27 10:14:39 +08:00
    sneezry
        16
    sneezry  
    OP
       2016-08-27 10:33:35 +08:00
    @UnisandK 用他人服务器生成 CSR 还是存在被中间人的风险的,我还是觉得不应该提供这种服务 Orz
    安全和便捷总是有矛盾 :S
    UnisandK
        17
    UnisandK  
       2016-08-27 10:41:23 +08:00
    @sneezry 生成私匙不是由你提供的服务的话,锅就不在你这边了呗 doge

    我是感觉这种还好,网站不至于那么丧病生成的每个私匙都存一份偷偷拿去中间人,要是实在不放心的就让他们自己去生成呗,服务不可能让所有人都满意的
    matrix67
        18
    matrix67  
       2016-08-27 10:42:48 +08:00 via Android
    别存就好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5450 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:22 · PVG 15:22 · LAX 23:22 · JFK 02:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.