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

Apache 安装 RSA/ECC 双证书模式简易教程

  •  
  •   alect · 2016-02-27 13:44:19 +08:00 · 4691 次点击
    这是一个创建于 3196 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前几天捣鼓 ECC 证书 /t/258912,简单看了下 Apache 运行双证书非常方便,说下自己的实现过程。

    OpenSSL 版本最好是 1.0.2 以上,如果是 1.0.1 也行,以下分两种情况说明。

    一般大家用的都是系统默认的 OpenSSL 版本仅为 1.0.1 (我用的 centos7 ,默认是 1.0.1 ),而更新 OpenSSL 并不建议,所以为了不影响系统其他软件,一般建议将 OpenSSL 1.0.2 安装到了非默认路径,然后编译 Apache 的时候指定新版 OpenSSL 。
    --------------------------------------------------------------------------------------------------------
    如果不想编译 OpenSSL ,仍旧使用 1.0.2 以前的版本,则用以下方法:
    首先将 ecc 证书和 rsa 证书的证书链合并, ecc 证书链在前, rsa 在后,
    cat chain-ecc.txt chain-rsa.txt > chain-ecc-rsa.txt

    将 ecc 证书(不含证书链)和 ecc 证书的密钥文件放在前,
    #ECC
    SSLCertificateFile /etc/apache2/SSL2015/ecdsa.cert.crt
    SSLCertificateKeyFile /etc/SSL2015/certs/ecdsa.key
    将 rsa 证书(不含证书链)和 rsa 证书的密钥文件放在后,
    #RSA
    SSLCertificateFile /etc/apache2/SSL2015/rsa.cert.crt
    SSLCertificateKeyFile /etc/apache2/SSL2015/rsa.cert.key

    #指定 ecc/rsa 合并后的证书链位置
    SSLcertificateChainFile /etc/apache2/SSL2015/chain-ecc-rsa.txt

    --------------------------------------------------------------------------------------------------------
    如果你的 OpenSSL 版本已经为 1.0.2 以及更新的版本,则用以下方法,ecc 和 rsa 证书要包含证书链:

    #ECC 指定 ecc 证书文件位置(证书以及证书链合并为一个文件为 ecdsa.cert.pem )
    SSLCertificateFile /etc/apache2/SSL2015/ecdsa.cert.pem
    SSLCertificateKeyFile /etc/SSL2015/certs/ecdsa.key

    #RSA 指定 rsa 证书文件位置(证书以及证书链合并为一个文件为 rsa.cert.pem )
    SSLCertificateFile /etc/apache2/SSL2015/rsa.cert.pem
    SSLCertificateKeyFile /etc/apache2/SSL2015/rsa.cert.key

    --------------------------------------------------------------------------------------------------------

    以上是指定证书的方式,各位根据 OpenSSL 的版本选择对应的方式,当然这还没完,下一步要直接指定证书加密方式,确保 ecc 的加密方式要在 rsa 模式的前面,否则 ecc 证书没法生效了。


    #为了安全起见,关闭 SSLv2/SSLv3,
    # Disable SSLv2/3
    SSLProtocol All -SSLv2 -SSLv3
    #启用加密方法首选项
    SSLHonorCipherOrder On
    # https://mozilla.github.io/server-side-tls/ssl-config-generator/
    # 各位可以根据这个网站选择对应的加密方式,但是要将 ECDHE-ECDSA-AES128-GCM-SHA256 这一条放在最前面,其他的你可以根据这个网站上提示自己生成。
    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256: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:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

    --------------------------------------------------------------------------------------------------------
    用 Windows 7 + Chrome 48 访问,显示的为 ECC 证书


    用 Windows XP + Chrome 48 访问,显示的为 RSA 证书


    访问 https://cryptoreport.websecurity.symantec.com/checker/views/certCheck.jsp 可以看到网站成功启用了双证书。
    第 1 条附言  ·  2016-02-27 21:12:46 +08:00
    各位可以访问 https://sslanalyzer.comodoca.com/ 观察实际效果,
    Windows 7 和 Windows XP 下面访问获取到的证书分别为 ECC 和 RSA.
    第 2 条附言  ·  2016-02-28 09:23:59 +08:00
    mail.google.com 也是双证书,可以用 https://cryptoreport.websecurity.symantec.com/checker/views/certCheck.jsp 检查得知,有朋友说握手会增加一倍,然而并没有……
    7 条回复    2016-03-17 13:01:46 +08:00
    Citrus
        1
    Citrus  
       2016-02-27 14:15:09 +08:00 via iPhone
    然后你的握手包就这么翻了一倍。。。
    alect
        2
    alect  
    OP
       2016-02-27 14:21:42 +08:00
    @Citrus openssl s_client -showcerts -connect abc.com:443 检测只看到发送了一个证书,并没有将两个证书都发过来,或者是我检测的方法不对?
    Citrus
        3
    Citrus  
       2016-02-28 13:10:29 +08:00
    @alect 我的错,想当然了。抓包看了一下似乎服务器会根据 Client Hello 里面的信息来判断应该发哪个证书,而不是一股脑的两个都发过来。
    DesignerSkyline
        4
    DesignerSkyline  
       2016-03-12 22:57:11 +08:00
    对于 Let's Encrypt 的用户,可以稍微再等几天。 ECC 证书链过几天就会上

    ECDSA Intermediates
    ETA: Before August 1, 2016

    Let ’ s Encrypt only signs end-entity certificates with RSA intermediates. We will add the ability to have end-entity certs signed by an ECDSA intermediate.
    DesignerSkyline
        5
    DesignerSkyline  
       2016-03-12 22:57:46 +08:00
    @DesignerSkyline 错了,是 intermediate
    lslqtz
        6
    lslqtz  
       2016-03-17 07:35:14 +08:00
    感觉没啥大用啊。。个人感觉单用 ECC 就好了。我的 Let's Encrypt 就是用的 ECC 证书。毫不在乎 xp 用户 233
    alect
        7
    alect  
    OP
       2016-03-17 13:01:46 +08:00
    @lslqtz 对于谷歌这种级别的网站,就算只有 1%的还在用 RSA 证书,也是很可观的。
    对于个人网站,真的是无所谓。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3092 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:34 · PVG 22:34 · LAX 06:34 · JFK 09:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.