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大致类似,也可以对浏览器进行检测,但提供的信息更多。
HTTPS加密套件的笔记的更多相关文章
- 详解 HTTPS 移动端对称加密套件优
近几年,Google.Baidu.Facebook 等互联网巨头大力推行 HTTPS,国内外的大型互联网公司很多也都已启用全站 HTTPS. Google 也推出了针对移动端优化的新型加密套件 Cha ...
- java实现HTTPS单向认证&TLS指定加密套件
1.HTTPS介绍 由于HTTP是明文传输,会造成安全隐患,所以在一些特定场景中,必须使用HTTPS协议,简单来说HTTPS=HTTP+SSL/TLS.服务端和客户端的信息传输都是通过TLS进行加密. ...
- Java加密与解密笔记(四) 高级应用
术语列表: CA:证书颁发认证机构(Certificate Authority) PEM:隐私增强邮件(Privacy Enhanced Mail),是OpenSSL使用的一种密钥文件. PKI:公钥 ...
- HTTPS加密流程超详解(一)前期准备
0.前言 前一阵子想写一个HTTPS的嗅探工具,之前只是大致了解SSL/TLS协议的加密流程,真正上起手来一步一步分析发现还是有点复杂的,于是我参考了wireshark的源码以及各种RFC,弄清楚了S ...
- HTTPS加密流程超详解(二)
2.进入正题 上篇文章介绍了如何简单搭建一个环境帮助我们分析,今天我们就进入正题,开始在这个环境下分析. 我们使用IE浏览器访问Web服务器根目录的test.txt文件并抓包,可以抓到如下6个包(前面 ...
- HTTPS加密流程理解
HTTPS加密流程 由于HTTP的内容在网络上实际是明文传输,并且也没有身份验证之类的安全措施,所以容易遭到挟持与攻击 HTTPS是通过SSL(安全套接层)和TLS(安全传输协议)的组合使用,加密TC ...
- 手摸手带你认识https涉及的知识,并实现https加密解密,加签解签
目录 http访问流程 https访问流程 证书 加密/解密 加签/验签 Java实现https 拓展 @ 看完整的代码,直接去完整代码实现,看实现完后会遇到的坑,直接去测试过程中的问题,包括经过代理 ...
- Nginx采用https加密访问后出现的问题
线上的一个网站运行了一段时间,应领导要求,将其访问方式更改为https加密方式.更改为https后,网站访问正常,但网站注册功能不能正常使用了! 经过排查,是nginx配置里结合php部分漏洞了一个参 ...
- 百度HTTPS加密搜索有什么用?
前段时间,我曾提到百度支持移动端HTTPS SSL加密搜索,用以保护用户隐私.最近,百度开始支持PC端HTTPS SSL加密搜索,现在可以启用 https://www.baidu.com 搜索.我很少 ...
- https加密实现
author:JevonWei 版权声明:原创作品 在httpd安装完成的基础上实现https加密 安装mod_ssl软件包 yum -y install mod_ssl http -M 显示mod_ ...
随机推荐
- 麒麟系统开发笔记(十二):在国产麒麟系统上编译GDAL库、搭建基础开发环境和基础Demo
前言 麒麟系统上做全球北斗定位终端开发,北斗GPS发过来的是大地坐标,应用需要的是经纬度坐标,所以需要转换,可以使用公式转换,但是之前涉及到了山He智能一个项目使用WG. 大地坐标简介 概述 ...
- vm添加新硬盘时,不用重启即可让新硬盘生效
# 两个命令使用其中一个即可 echo '- - -' > /sys/class/scsi_host/host0/scan echo '- - -' > /sys/class/scsi_h ...
- 手动下载sdk及avd
有时候下载sdk的时候报各种错误导致无法下载,如图 那么可以离线下载,到浏览器或IDM中下载图中提示的url链接,将第一个下载的包即sources的解压后放到SDK目录下的sources目录,并重命名 ...
- ASP.NET Core 微信支付(一)【统一下单 APIV3】
官方参考资料 签名:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_0.shtml 签名生成:https://wechatp ...
- 第一百一十一篇:基本引用类型Date
好家伙,本篇为<JS高级程序设计>第五章的学习笔记 1.基本引用类型 引用值(或者对象)是某个特定引用类型的实例,在ECMAScript中,引用类型是把数据和功能组织到一起的结构,(像 ...
- 【Azure Spring Cloud】Azure Spring Cloud connect to SQL using MSI
问题描述 在Azure Spring Cloud中,通过ActiveDirectoryMSI方式来连接到SQL Service,需要如何配置呢? 问题分析 在SQL Service中启用Active ...
- 【Azure Developer】使用 Azure VM 上的用户分配托管标识访问 Azure Key Vault 中国区代码示例
问题描述 在Global版本的Azure Key Vault 文档中,有一节介绍在Azure VM中使用标识获取访问令牌,调用Key Vault中的资源.但是在示例中,只有curl的命令执行,而没有代 ...
- 一些Clion使用记录
一些Clion使用记录 编译链设置 在设置"工具链"中可以按需增加不同的编译链 访问越界溢出debug AddressSanitizer介绍:AddressSanitizer 交的 ...
- [学习笔记] Rocket.Chat 安装与设置启动项
这篇文章主要介绍手动安装的方式来安装Rocket.Chat,在Rocket.Chat官方有三种安装方式, 面向开发人员的直接使用meteor部署 传统的源码编译安装 Docker方式部署 接下来分别介 ...
- C# DiagnosticSource and DiagnosticListener
class Program { private static readonly DiagnosticSource testDiagnosticListener = new DiagnosticList ...