互联网技术 · 2024年2月8日

ECC和RSA双证书解决方案

什么是ECC

ECC是Elliptic Curves Cryptography的缩写,意为椭圆曲线密码编码学。和RSA算法一样,ECC算法也属于公开密钥算法。最初由Koblitz和Miller两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。

ECC算法的数学理论非常深奥和复杂,在工程应用中比较难于实现,但它的单位安全强度相对较高,它的破译或求解难度基本上是指数级的,黑客很难用通常使用的暴力破解的方法来破解。RSA算法的特点之一是数学原理相对简单,在工程应用中比较易于实现,但它的单位安全强度相对较低。因此,ECC算法的可以用较少的计算能力提供比RSA加密算法更高的安全强度,有效地解决了工程实现问题。

与RSA算法相比,ECC算法拥有突出优势:

1、更适合于移动互联网: ECC加密算法的密钥长度很短(256位),意味着占用更少的存储空间,更低的CPU开销和占用更少的带宽。随着越来越多的用户使用移动设备来完成各种网上活动,ECC加密算法为移动互联网安全提供更好的客户体验。

2、更好的安全性:ECC加密算法提供更强的保护,比目前的其他加密算法能更好的防止攻击,使你的网站和基础设施比用传统的加密方法更安全,为移动互联网安全提供更好的保障。

3、更好的性能: ECC加密算法需要较短的密钥长度来提供更好的安全,例如,256位的ECC密钥加密强度等同于3072位RSA密钥的水平。其结果是你以更低的计算能力代价得到了更高的安全性。经国外有关权威机构测试,在Apache和IIS服务器采用ECC算法,Web服务器响应时间比RSA快十几倍。

4、更大的IT投资回报:ECC可帮助保护您的基础设施的投资,提供更高的安全性,并快速处理爆炸增长的移动设备的安全连接。 ECC的密钥长度增加速度比其他的加密方法都慢(一般按128位增长,而 RSA则是倍数增长),将延长您现有硬件的使用寿命,让您的投资带来更大的回报。

ECC加密算法的通用性不断增强

ECC加密算法自1985年提出,因其工程应用中难度较高,到2005年才在各种操作系统中获得广泛支持,在全球安全市场需求的刺激下,ECC算法将逐步取代RSA算法,成为主流加密算法。目前,全球各大CA都已经陆续开始为用户签发采用ECC加密算法的各种证书.ECC加密算法以后支持所有操作系统、所有浏览器和各种移动终端,主要有:

Mozilla NSS 3.11以上版本支持

OpenSSL 1.0以上版本支持

微软CryptoAPI Vista/Win7/Win8都支持

BouncyCastle 1.32以上版本支持

JSSE 6 以上版本支持

BSAFE 4.0 以上版本支持

各种版本的IE浏览器、火狐浏览器、谷歌浏览器和苹果浏览器都支持

安卓系统(2.3以上版本)、苹果IOS(5.0以上版本)、Window Phone(各种版本)都支持

北京天威诚信电子商务服务有限公司是国家授牌CA认证机构;专业从事数字证书等技术和产品服务,服务于阿里巴巴、百度、腾讯、京东、联想、金山、中行、工行、建行等全行业超95%的大客户,覆盖超10亿网民,拥有丰富的应对和解决各种复杂及突发情况的专业服务支持团队,可以为用户提供优质的本地化服务与技术支持。

Apache配置方法

首先将 ecc 证书和 rsa 证书的证书链合并, ecc 证书链在前, rsa在后, cat chain-ecc.crt chain-rsa.crt > chain-ecc-rsa.crt 打开apache安装目录下conf/extra目录中的httpd-ssl.conf(或conf目录中的ssl.conf)文件

在配置文件中的 …… 之间添加或编辑如下配置项

SSLProtocol all -SSLv2 -SSLv3

SSLHonorCipherOrder on

SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM

#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.crt

如果服务器的 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 证书没法生效了。

Nginx配置方法

nginx 最新的 mainline 版本已经支持了双证书,推荐使用nginx 1.11.1版本,openssl 版本推荐使用1.0.2h版本。

修改nginx的配置文件 nginx.conf 配置双证书:

ssl_certificate ssl/ecc/server.pem;

ssl_certificate_key ssl/ecc/server.key;

ssl_certificate ssl/rsa/server.pem;

ssl_certificate_key ssl/rsa/server.key;

ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;

ssl_prefer_server_ciphers on;

ssl_stapling on;

ssl_stapling_verify on;

ssl_session_cache shared:SSL:10m;

ssl_session_timeout 10m;

add_header Strict-Transport-Security “max-age=31536000”;

error_page 497 https://$host$request_uri;

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.