HTTPS加密套件的笔记
本文于2016年5月份完成,发布在个人博客网站上。 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。
按照如下配置(适用于Tomcat 7.0.x),为Tomcat启用了HTTPS协议,用户访问站点时是否就安全了呢?
<!-- HTTP通道,跳转至8443端口 -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
/>
<!-- HTTPS通道 -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
SSLEnabled="true"
secure="true"
scheme="https"
clientAuth="false"
keystoreFile="conf/tomcat.key"
keyPass="changeit"
keystorePass="changeit"
>
</Connector>
原来还真不是。
文章SSL/TLS Deployment Best Practices中有如下描述:
SSL/TLS is a deceptively simple technology. It is easy to deploy, and it just works . . . except that it does not, really.The first part is true—SSL is easy to deploy—but it turns out that it is not easy to deploy correctly.
近日收到我厂发布的安全预警,要求对于我厂自研的网元:
- 网元之间使用ssh协议交互时,需要禁用不安全的协议,如SSL2.0、SSL3.0、TLS1.0;
- 网元使用ssh协议向外部开放服务时,默认情况下需要禁用不安全的协议;
- 使用自签名证书时,RSA算法的密钥长度至少为2048,并且签名算法应选择SHA256withRSA;
- cipher suite应避免使用RC4、3DES等不安全算法,同时禁用CBC模式;
- 。。。
但是,没看明白。预警中提到了太多的名词,但限于篇幅,没有为名词提供更多的解释。不过预警的详细信息中建议搜索关键词如cipher suite,了解相关的信息,便于进一步的分析和整改。
结果找到了Hardening Your Web Server’s SSL Ciphers,一篇很给力的文章,提到了如下的加固步骤:
If you configure a web server’s TLS configuration, you have primarily to take care of three things:
- disable SSL 2.0 (FUBAR) and SSL 3.01 (POODLE),
- disable TLS 1.0 compression (CRIME),
- disable weak ciphers (DES, RC4), prefer modern ciphers (AES), modes (GCM), and protocols (TLS 1.2).
另外从平台部门同事那边也获取到一份资料,名为《Web安全加固最佳实践》,内容也很强大。虽然没看完全看明白,但确认预警是足够了。
对于Web应用来说,安全协议和套件的配置取决于运行Tomcat的JDK、Tomcat自身、客户使用的浏览器。考虑项目当前的情况以及浏览器兼容性,从前述三个维度进行分析:
- 项目当前使用了JDK 8U65版本,支持TLS1.2;
- 项目当前使用的是平台部门加固过的Tomcat,支持TLS1.2;
- 项目需要兼容IE8、IE9、IE11,所以CBC相关的cipher suite还得保留;
最终加固后的Tomcat配置样例如下:
<!-- HTTPS通道 -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
SSLEnabled="true"
secure="true"
scheme="https"
clientAuth="false"
keystoreFile="conf/tomcat.key"
keyPass="changeit"
keystorePass="changeit"
sslProtocol="TLS"
sslEnabledProtocols="TLSv1.2,TLSv1.1"
ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
>
</Connector>
如上仅是样例,并不是最佳实践。项目实际使用时,在$CATALINA_BASE/conf/catalina.properties
中定义配置项,然后在$CATALINA_BASE/conf/server.xml
中引用前述配置项,便于脚本读取、替换这些配置项的取值。
资料
TLS协议
Web加固
- Hardening Your Web Server’s SSL Ciphers
- POODLE Attack and SSLv3 Deployment
- SSL/TLS Deployment Best Practices
- New Attack Uses SSL/TLS Information Leak to Hijack HTTPS Sessions
- CRIME - How to beat the BEAST successor?
- CRIME wiki
Tomcat
如下资料介绍如何对Apache Tomcat进行加固。
- How to Disable Weak Ciphers and SSL 2.0 in Tomcat
- HOW TO -- Disable weak ciphers in Tomcat 7 & 8
- SSL/TLS, ciphers, perfect forward secrecy and Tomcat
- Configuring Supported Ciphers for Tomcat HTTPS Connections
- Securing Tomcat Encryption
openssl
如下资料介绍了openssl支持的加密套件,以及相关的材料。
JDK支持的cipher suites
如下分别来自IBM和Oracle,介绍了各自JDK支持的cipher suite。
- IBM JDK8 Cipher suites
- Java Cryptography Architecture Oracle Providers Documentation for JDK 8
- Java Cryptography Architecture Standard Algorithm Name Documentation for JDK 8
其它资料
- Cipher Suites in Schannel
- How to Determine the Cipher Suite for the Server and Client
- researchtls and ssl cipher suites
其它
使用浏览器访问poodle.io时,站点会给出浏览器是否使用SSLv3协议的提示,如下:
Good News! Your browser does not support SSLv3.
www.howsmyssl.com大致类似,也可以对浏览器进行检测,但提供的信息更多。
本文来自博客园,作者:jackieathome,转载请注明原文链接:https://www.cnblogs.com/jackieathome/p/17936477.html
热门相关:万道龙皇 娶一送一:爹地,放开我妈咪! 唐枭 写给鼹鼠先生的情书 贴身侍卫