廉价SSL证书比较

  首先是当然推荐免费的Let’s Encrypt,支持ECDSA和泛域名,极大地推动了HTTPS的普及,但是90天的有效期太短了。对于复杂的系统来说,会有很多不能自动导入证书的设备,管理起来成本太高。因此我们来看一下三种便宜的SSL证书:Sectigo (Comodo)、RapidSSL、AlphaSSL。

  Sectigo(原Comodo,拆分出售后改名),主品牌一直以来就是廉价SSL证书的代表,所以用它家证书的基本都是小网站。Comodo自己拥有四个根证书,分别是COMODO RSA Certification AuthorityCOMODO ECC Certification AuthorityUSERTrust RSA Certification AuthorityUSERTrust ECC Certification Authority,都是从2010年(COMODO ECC从2008年起)起至2038年止的根证书,这四个证书比较新故在老的系统中不受信任,不过也因为比较新所以提供了更高的安全性并且完美支持ECDSA(RSA4096、ECC384,SHA384)。对于老的系统,COMODO收购了一个从2000年起的根AddTrust External CA Root,但是这个证书到2020年5月30日就过期了,不过COMODO还有一个2004年起的根AAA Certificate Services能一直用到2028年。AddTrust和AAA在老系统中兼容性很好,只要在服务器的证书链中导入交叉签名的第二个中级证书即可,这样老系统就能信任新颁发的SSL证书,但是这样会导致证书链变长(两个中级证书)。Sectigo的证书几乎所有网站都在卖,最便宜的通配符证书应该是GoGetSSL售卖的自有品牌证书(4年$32.5/year),Sectigo用自己的根证书给GoGetSSL签发了两个中级证书GoGetSSL RSA DV CAGoGetSSL ECC DV CA,GoGetSSL再用自己的中级证书给用户签发SSL证书,所以和Sectigo证书兼容性一样。

  RapidSSL是DigiCert下属的廉价证书品牌,使用DigiCert的根证书,根和中级证书只支持RSA。RapidSSL比较有名,很多网站都有转售,通配符证书两年期SSL2BUY便宜(2年$73.5/year),四年期CheapSSLsecurity更便宜一点(4年$72.31/year)。

  AlphaSSL是GlobalSign下属的廉价证书品牌,使用GlobalSign的根证书,根和中级证书只支持RSA。这个名气小很多,很少有网站转售,通配符证书两年期SSL2BUY便宜(2年$40/year)。

  综上所述,想要便宜且整个证书链支持ECDSA只能买GoGetSSL,但是对于老终端需要四级证书链。不需要整个证书链是ECDSA的,老终端也只有一个中级证书的三级证书链,可选RapidSSL和AlphaSSL,RapidSSL名气大一点,其它的基本没有区别。

  现在几乎所有的SSL证书都是由中级证书签发的,而直接由根证书签发没有中级证书的SSL证书现在应该已经不存在了,因为这样根证书太不安全了。所以三级证书链基本上就是最短的证书链了。多一级中级证书服务器额外发送大约2K的证书信息,客户端需要多查询一个证书的吊销情况。

CAs trustworthy in browsers db可以大概查看各个根证书受信任情况。

Nginx HTTPS配置

配置很简单,但是需要注意的有:

  1. 应使用listen的ssl参数取代ssl on;
  2. cert文件应包含整个证书链,内容顺序必须是证书链的逆序,即cert文件头是本服务器的证书、中间是中间CA、最后是根CA。可以用下述命令检查
    openssl s_client -connect www.example.com:443
  3. ssl_protocols中只能包含TLS
    server {
            listen          [::]:80;
            listen          [::]:443 ssl;
    ……
            ssl_certificate /etc/ssl/microstructures_bundle.crt;
            ssl_certificate_key /etc/ssl/microstructures_org.key;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
    ……
    }

 

通配符SSL证书

域名验证通配符证书主要有:
GeoTrust RapidSSL Wildcard
Comodo PositiveSSL Wildcard
Comodo EssentialSSL Wildcard
GlobalSign AlphaSSL Wildcard

兼容性:GeoTrust>Comodo>GlobalSign

市场占用率文章:http://w3techs.com/technologies/overview/ssl_certificate/all

基本上最高端兼容性最好的CA都在Symantec手里了

Apache 配置SSL

SSLEngine on
SSLProtocol all -SSLv2 //只允许SSLv3和TLSv1,SSLv2有缺陷禁止掉
SSLCipherSuite RSA:DH:DSS:!EXP:!NULL:!ADH:!EDH:!LOW:!RC4:!MD5:HIGH:MEDIUM //最终的结果就是Key Exchange=RSA/DH,Authentication=RSA/DSS,Cipher Encoding=AES(128/256)/3DES(168),MAC Digest=SHA1
SSLCertificateFile /etc/ssl/certs/nnlm.cer //CA颁发的证书
SSLCertificateKeyFile /etc/ssl/private/nnlm.key //证书的私钥
SSLCertificateChainFile /etc/ssl/certs/chain.cer //证书链,所有的证书链全部写到一个文件里面

配置ProFTPD加密SSL

下载脚本 http://www.castaglia.org/openssl/contrib/cert-tool ,修改cert-tool中openssl的路径,用这个脚本调用OpenSSL自签名颁发一个证书
cert-tool --create-ca=serverca --signing-ca=self
cert-tool --create-cert=server --signing-ca=serverca.cert.pem --signing-key=serverca.key.pem

修改proftpd.conf,增加TLS配置

TLSEngine on #开启TLS
TLSLog /var/log/proftpd-tls.log #TLS日志
TLSProtocol SSLv23 #允许使用SSLv3和TLSv1
TLSRSACertificateFile /usr/local/etc/server.cert.pem #cert-tool生成的证书
TLSRSACertificateKeyFile /usr/local/etc/server.key.pem #cert-tool生成的key
TLSCACertificateFile /usr/local/etc/serverca.cert.pem #cert-tool生成的CA证书
TLSVerifyClient off #不验证客户端证书。如要启用客户端证书验证,则需要用TLSCACertificateFile这个CA来颁发客户端证书
TLSRenegotiate required off #不强制要求重协商

另外加密传输需要使用FTP命令PROT,如果Deny ALL过,需要Allow
DenyAll AllowAll