OpenSSL Cipher配置安全增强

OpenSSL Cipher配置安全增强

1.攻击威胁

以下是OpenSSL及SSL协议历史上遭遇过的知名攻击。

  • BEAST攻击
  • CRIME攻击
  • FREAK攻击
  • POODLE攻击
  • Heartbleed心脏滴血

2.配置语法

  • “+”代表取交集
  • “-”代表临时删除
  • “!”代表永久删除
  • “@”代表排序方法
  • ” :;,”都可用作分隔符

密码套件的顺序决定了Openssl在握手过程中密码选择的优先级。

3.版本控制

一定不要使用SSL2.0/3.0,建议不要使用TLS1.0/1.1。如果非要使用TLS1.0,请关闭报文压缩功能。

4.加密套选择

尽量避免使用弱加密算法,例如RC4和DES。因为DES可以在几小时内破解,而RC4之前被认为可以抵抗CRIME攻击,但却容易被新方法破解。

选择原则

优先选择ECDHE+AESGCM密码
首选满足PFS(Perfect Forward Security)的密码套件,其中ECDHE>DHE
会话密钥AES128>AES256,目前并未证明256的安全性高于128,不如使用128效率更高
考虑向后兼容时,AES>3DES。

禁忌选择

(以下密码需要明确禁止使用)

!aNULL,不包含身份验证的DH密码,可能被中间人攻击
!eNULL,不采取密钥交换,也就是明文传输
!EXPORT,美国当年限制加密产品出口遗留的弱密码
!MD5,!RC4,!DES,这些密码已被证明攻破难度低

其他参数

为满足PFS,使用更高强度的DH参数。openssl dhparam -out dhparam.pem 4096
OCSP(Online Certificate Status Protocol)用来验证证书的有效性,OCSP Stapling为了解决第三方CA被DoS等情形下无响应的情况,由Server发送OCSP缓存。
HSTS(Http Strict Transport Security)要求浏览器仅通过https连接。
HPKPE(Http Public Key Pinning Extension)要求证书链必需包含位于白名单中的公钥。

5.配置案例

Nginx

ssl_protocols TLSv1.3;
# 采用当前nginx支持的最高版本,推荐1.3/1.2
ssl_prefer_server_ciphers on; 
ssl_dhparam /etc/nginx/dhparam.pem; 
# 用命令生成 openssl dhparam -out /etc/nginx/dhparam.pem 4096
ssl_ciphers 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: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;
# 密码套的优先顺序可以参考Mozilla给出的套件安全排序
ssl_ecdh_curve secp384r1; 
# nginx版本 >= 1.1.0
ssl_session_timeout  10m;
ssl_session_cache shared:SSL:10m;
# 这两项用来减弱Server负载
ssl_session_tickets off; 
# nginx版本 >= 1.5.9
ssl_stapling on; 
# nginx版本 >= 1.3.7
ssl_stapling_verify on; 
# nginx版本 => 1.3.7
resolver $DNS-IP1 $DNS-IP2 valid=300s;
resolver_timeout 5s; 
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
# 针对点击劫持攻击
add_header X-Content-Type-Options nosniff;
# 针对客户端MIME内容嗅探
add_header X-XSS-Protection "1; mode=block";
# 针对XSS攻击

Tomcat

<Connector port="8443"
protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="200" 
SSLEnabled="true" scheme="https" secure="true" 
sslProtocol="TLSv1.2+TLSv1.3"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_SHA,TLS_ECDHE_RSA_WITH_AES_256_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_SHA384,TLS_ECDHE_RSA_WITH_AES_256_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_128_SHA,TLS_DHE_DSS_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_256_SHA256,TLS_DHE_DSS_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_256_SHA"
/>

为了能使用AES256,必需安装JCE(Java Cryptography Extension)包。

6.其他

这里附上Mozilla提供的加密套件选择排序图(前十位)。

preferSuites


本文参考了以下文章:

https://www.acunetix.com/blog/articles/tls-ssl-cipher-hardening/

https://www.oschina.net/translate/strong_ssl_security_on_nginx

https://wiki.mozilla.org/Security/Server_Side_TLS

https://weakdh.org/sysadmin.html

https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html#Configuration

https://cipherli.st/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值