SSL 检测网站
- https://myssl.com/
-
https://www.ssllabs.com/ssltest/
-
http://s.tool.chinaz.com/https/
-
HTTPS 安全性 http://s.tool.chinaz.com/https/
-
ATS合规性测试 http://s.tool.chinaz.com/ats
-
网站测速 http://tool.chinaz.com/speedtest/sso.infosec.com.cn
-
DNS测试 http://tool.chinaz.com/dns/?type=1&host=sso.infosec.com.cn&ip=
SSL测试工具
openssl
常用的有SSLScan,我用的是OpenSSL的:
openssl s_client -connect www.baidu.com:443
Testssl.sh
testssl.sh是一个免费且开源的功能丰富的命令行工具,用于在Linux/BSD服务器上检查支持加密,协议和一些加密缺陷的支持TLS/SSL加密的服务。 它可以使用MSYS2或Cygwin在MacOS X和Windows上运行 。
Testssl.sh的特点 容易安装和使用; 产生清晰的输出。非常灵活,它可以用来检查任何启用了SSL / TLS和STARTTLS的服务。执行一般检查或单一检查。为各种类型的单一检查提供了几个命令行选项。支持不同的输出类型,包括彩色输出。支持SSL会话ID检查。支持检查多个服务器证书。提供绝对的隐私,只有你可以看到结果,而不是第三方。支持(平面)JSON + CSV格式的日志记录。支持串行(默认)或并行模式下的批量测试。支持通过环境变量预设命令行选项等等。重要提示 :您应该使用bash(预装在几乎Linux发行版上),建议使用较新的OpenSSL版本( 1.0 )以便有效使用。 如何在Linux中安装和使用Testssl.sh 你可以通过克隆这个git仓库来安装testssl.sh
git clone --depth 1 https://github.com/drwetter/testssl.sh.git
cd testssl.sh
克隆testssl.sh之后 ,一般用例可能只是运行以下命令对网站进行测试。
./testssl.sh https://www.google.com/
要运行STARTTLS启用协议的检查:ftp,smtp,pop3,imap,xmpp,telnet,ldap,postgres,mysql,请使用-t选项。
./testssl.sh -t smtp https://www.google.com/
默认情况下,所有质量测试均以串行模式完成,您可以使用--parallel标志启用并行测试。
./testssl.sh --parallel https://www.google.com/
如果您不想使用默认的系统openssl程序,请使用-openssl标志指定替代方案。
./testssl.sh --parallel --sneaky --openssl /path/to/your/openssl https://www.google.com/
您可能需要保留日志以供日后分析, testssl.sh具有--log (在当前目录中存储日志文件)或--logfile (指定日志文件位置)选项。
./testssl.sh --parallel --sneaky --logging https://www.google.com/
要禁用DNS查找,可以提高测试速度,请使用-n标志。
./testssl.sh -n --parallel --sneaky --logging https://www.google.com/
运行单一检查使用testssl.sh
您还可以对协议,服务器默认值,服务器首选项,标头,各种类型的漏洞以及其他许多测试运行单个检查。 为此提供了许多选项。 例如, -e标志使您能够远程检查每个本地密码。 如果你想使测试更快,使用包括--fast标志; 这将省略一些检查,如果你使用openssl所有的密码,它只显示第一个提供的密码。
./testssl.sh -e --fast --parallel https://www.google.com/
-p
使用下面的命令来查看所有选项的列表。
./testssl.sh --help
在testssl.sh上找到更多信息 Github存储库: https://github.com/drwetter/testssl.sh 或者官网: https://testssl.sh/ 结论 testssl.sh是一个有用的安全工具,每个Linux系统管理员都需要用它来测试启用TSL/SSL的服务。 如果您有任何问题或想法分享,请使用下面的评论表单。 另外,您还可以与我们分享您遇到的任何类似工具。
SSL/TLS部署
证书和私钥
在TLS中,所有的安全性都从服务器的密码标识开始;需要一个强大的私钥来防止攻击者进行模拟攻击。同样重要的是要有一个有效的和强大的证书,这将授予私有密匙作为一个特定主机名的权利。没有这两个基本的构建块,就没有其他东西可以安全了。
使用2048位私钥
对于大多数的 web 站点,提供一个 2048 的 RSA key 是足够安全的。RSA 的公钥算法是被普遍支持的,这使得这个类型的 key 作为默认是足够安全的。对于 2048 位,这些 key 提供了大约 112 位的安全性。如果您想要比这更多的安全性,请注意 RSA key 的伸缩性不太好。想要获得 128 位的安全性,你需要 3072 位 RSA key,这会很大的影响性能。ECDSA key 提供了一种提供更好安全性和更好性能的替代方法。对于 256 位,ECDSA key 提供 128 位安全性。少数古董客户端不支持 ECDSA,但现代客户端是支持的。如果您不介意管理这样一个设置的开销,那么您可以同时部署 RSA 和 ECDSA 密钥。
保护私钥
把你的私钥视为一项重要的资产,尽可能最大的使用你的私钥,限制最小的员工的访问。建议的政策包括以下内容: 在可信计算机上用足够的熵生成私有密钥。一些 CA 为您提供生成私钥的功能,请尽量不要这样做。 密码保护 key 最初就不要存储在备份系统中。私钥密码在生产环境中起不了什么作用,因为有知识的攻击者总是能够从进程内存中检索密钥。有硬件设备(被称为硬件安全模块,或 HSMs),即使在服务器折衷的情况下,也可以保护私有密匙,但是它们是昂贵的,因此仅适用于具有严格安全性需求的组织。 妥协后,撤销旧证书并生成新密钥。 每年更新证书,如果您可以自动化过程,则更频繁。大多数网站都应该假定不可靠的妥协证书被撤销; 因此,具有较短使用寿命的证书在实践中更加安全。 除非保持相同的密钥对于公钥密钥很重要,否则每当获得新证书时,还应该生成新的私钥。
覆盖域名
确保您的证书涵盖您希望与网站一起使用的所有名称。您的目标是避免无效的证书警告,这会混淆用户,削弱他们的信心。 即使您期望只使用一个域名,请记住,您无法控制用户到达该网站的方式或其他人如何链接到该网站。在大多数情况下,您应该确保该证书与 www 前缀有关(例如,它适用于 example.com 和 www.example.com )。经验法则是,安全的 Web 服务器应该具有对配置为指向它的每个 DNS 名称有效的证书。 通配符证书能满足更广泛的需求,但如果准备将密钥暴露给更多的人员,特别是跨团队或部门,则避免使用它们。换句话说,访问私钥的人越少越好。还要注意,证书共享会创建一个可以被滥用的将漏洞从一个网站或服务器传输到使用相同证书的所有其他站点和服务器(即使底层私钥不同,只要证书域名匹配)的绑定。
从可信CA获取证书
选择对其证书业务和安全性可靠和认真的认证中心(CA)。选择 CA 时,请考虑以下条件: 安全状态 所有CA都经过定期审核,但有些则比其他 CA 更为严重。弄清哪些在这方面做的更好并不容易,但一个选择是检查他们的安全历史,更重要的是,他们如何反应妥协,如果他们从错误中学到了经验,这将更有利。 业务重点 CA 的活动构成其业务的重要组成部分,如果事情发生严重错误,其所有事情都将丢失,并且在其他地方追逐潜在的更有利可图的机会可能不会忽视其证书部门。 提供的服务 至少,您选择的 CA 应提供对证书吊销列表(CRL)和在线证书状态协议(OCSP)撤销方法的支持,具有稳定的网络可用性和性能。许多网站对域验证的证书感到满意,但您也应该考虑是否需要扩展验证(EV)证书。在任一种情况下,您都应该选择公钥算法。大多数网站今天使用 RSA,但由于其性能优势,ECDSA 在未来可能会变得重要。 证书管理 选项如果您需要大量证书并在复杂环境中运行,请选择一个 CA,为您提供良好的管理工具。 支持选择一个 CA,如果需要的话可以给您很好的支持。 注意 为了获得最佳效果,请提前获得证书,并在部署到生产之前至少一周。这种做法(1)有助于避免在计算机上没有正确时间的一些用户的证书警告;(2)有助于避免与 CA 需要额外时间的 CA 失败的撤销检查,以向 OCSP 响应者传播有效的新证书。随着时间的推移,尝试将这个“热身”期延长至 1-3 个月。同样,不要等到你的证书即将到期以替换它们。留下额外的几个月也会帮助时钟不正确的人在另一个方向。
使用强签名算法
证书安全性取决于(1)用于签署证书的私钥的强度,(2)签名中使用的散列函数的强度。直到最近,大多数证书都依赖于 SHA1 散列函数,现在被认为是不安全的。因此,我们正在向 SHA256 转型。截至 2016 年 1 月,您无法从公共 CA 获取 SHA1 证书。现有的 SHA1 证书将继续工作(在某些浏览器中有警告),但只能到 2016 年底。
使用完成的证书链
在大多数部署中,仅服务器证书不够的; 需要两个或多个证书来建立完整的信任链。当部署具有有效证书但没有所有必要的中间证书的服务器时,会发生常见的配置问题。为避免这种情况,只需使用 CA 提供给您的所有证书。 无效的证书链有效地使服务器证书无效并导致浏览器警告。实际上,这个问题有时难以诊断,因为一些浏览器可以重构不完整的链,有些浏览器不能重建。所有浏览器都倾向于缓存和重用中间证书。
使用安全的协议
SSL/TLS 系列中有五种协议:SSL v2,SSL v3,TLS v1.0,TLS v1.1和TLS v1.2: SSL v2 是不安全的,不能使用。此协议版本非常糟糕,即使它们位于完全不同的服务器(DROWN 攻击)上也可以用来攻击具有相同名称的RSA 密钥和站点。 当与 HTTP(POODLE 攻击)一起使用时,SSL v3 是不安全的,当与其他协议一起使用时,SSL v3 是弱的。它也是过时的,不应该被使用。 TLS v1.0 也是不应该使用的传统协议,但在实践中通常仍然是必需的。其主要弱点(BEAST)在现代浏览器中得到缓解,但其他问题仍然存在。 TLS v1.1 和 v1.2 都没有已知的安全问题,只有 v1.2 提供了现代的加密算法。 TLS v1.2 应该是您的主要协议,因为它是唯一提供现代认证加密(也称为 AEAD)的版本。如果您今天不支持 TLS v1.2,则缺乏安全性。 为了支持较旧的客户端,您可能需要继续支持 TLS v1.0 和TLS v1.1。但是,您应该计划在不久的将来退出 TLS v1.0。例如,PCI DSS 标准将要求所有接受信用卡付款的网站在 2018 年 6 月之前移除对 TLS v1.0 的支持。 目前正在开展设计 TLS v1.3 的工作,其目的是消除所有过时和不安全的功能,并进行改进,以保持我们的通信在未来几十年内的安全。
选择合适的协议
在SSL v3及更高版本的协议版本中,客户端提交他们支持的密码套件列表,服务器从列表中选择一个用于连接的套件。然而,并不是所有的服务器都做得很好,有些将从客户端列表中选择第一个支持的套件。使服务器主动选择最佳可用加密套件对于实现最佳安全性至关重要。
使用 FS
前向保密(有时也称为完全前向保密)是一种协议功能,可实现不依赖服务器私钥的安全对话。对于不提前向保密的密码套件,可以恢复服务器的私钥的人就可以解密所有较早记录的加密对话(也就是可以先大量记录密文,再解密,比如您的证书到期后没有正确销毁,它的私钥就能用来解密非PFS的密文)。您需要支持并喜欢 ECDHE 套件,以便通过现代网络浏览器实现前向保密。为了支持更广泛的客户,您还应该使用 DHE 套件作为 ECDHE 后备。避免 RSA 密钥交换,除非绝对必要。我在2.3节中提出的默认配置只包含提供前向保密的套件。
使用强的密钥交换算法
对于密钥交换,公共站点通常可以选择经典的短暂的 Diffie-Hellman密钥交换(DHE)和其椭圆曲线变体 ECDHE。还有其他的密钥交换算法,但是它们通常是以某种方式不安全的。RSA 密钥交换仍然很受欢迎,但不提供前向保密。 2015年,一批研究人员发表了对 DHE 的新攻击; 他们的工作被称为Logjam 攻击。[2] 研究人员发现,较低强度的 DH 密钥交换(例如768 位)容易被破坏,一些知名的 1024 位 DH 组可被国家机构破坏。为了安全起见,如果部署 DHE,请至少配置 2048 位的安全性。一些较老的客户端(例如Java 6)可能不支持这种强度。出于性能原因,大多数服务器应该更喜欢 ECDHE,这是更强大和更快。在这种情况下,secp256r1命名曲线(也称为 P-256)是一个很好的选择。
减轻已知问题
近几年来已经发生了几次严重的 SSL 和 TLS 攻击,但是如果您正在运行最新的软件并遵循本指南的建议,那么它们通常不会关心您。(如果没有,我建议您使用 chinaz 测试您的系统,并从中进行测试)。但是,没有什么是完全安全的,所以为了保持对安全性的了解,这是一个很好的做法。如果供应商补丁可用,请及时提供; 否则,依靠解决方案进行缓解。
性能
安全是我们在本指南中的主要重点,但我们也要注意表现; 一个不符合性能标准的安全服务无疑将被丢弃。通过正确配置,TLS 可以相当快。使用现代协议(例如 HTTP/2),甚至可能比明文通信更快。
避免过度安全
用于建立安全连接的密码握手是一种操作,其费用受私钥大小的高度影响。使用太短的密钥是不安全的,但使用太长的密钥将导致“太多”的安全性和缓慢的操作。对于大多数网站,使用超过 2048 位的 RSA 密钥和强大于 256 位的 ECDSA 密钥会浪费 CPU 功耗,并可能会损害用户体验。类似地,增加短暂密钥交换的强度对于 DHE 为 2048 位以及 ECDHE 为 256 位几乎没有什么好处。使用高于 128 位的加密没有明显的好处。
使用 session 恢复
会话恢复是一种性能优化技术,可以节省昂贵的密码操作的结果,并重复使用一段时间。残疾或非功能性会话恢复机制可能会引起显着的性能损失。
使用 WAN 优化和 HTTP/2
这些天,TLS 开销不是来自 CPU 饥饿的加密操作,而是来自网络延迟。只有在 TCP 握手完成后才能启动TLS握手,需要进一步交换数据包,并且离开服务器的距离更远。最小化延迟的最佳方法是避免创建新的连接 - 换句话说,保持现有的连接长时间(keep-alives)。提供良好结果的其他技术包括支持现代协议(如HTTP / 2)和使用WAN优化(通常通过内容传送网络)。
隐藏公共内容
通过TLS进行通信时,浏览器可能会认为所有流量都是敏感的。它们通常会使用内存来缓存某些资源,但一旦关闭浏览器,所有内容可能会丢失。为了获得性能提升,并能够长期缓存一些资源,将公共资源(例如图像)标记为公开。
使用 OCSP Stapling
OCSP 装订是 OCSP 协议的扩展,可以直接从服务器提供撤销信息作为 TLS 握手的一部分。因此,客户端不需要联系 OCSP 服务器进行带外验证,并且总体 TLS 连接时间显着减少。OCSP 装订是一种重要的优化技术,但您应该注意,并不是所有的网络服务器都提供了可靠的 OCSP 装订实现。结合具有缓慢或不可靠的 OCSP 响应者的 CA,这样的 Web 服务器可能会产生性能问题。为了获得最佳效果,请模拟故障条件,看看它们是否会影响您的可用性。
使用快速加密
除了提供最佳的安全性,我推荐的密码套件配置也提供了最好的性能。尽可能使用支持硬件加速 AES 的 CPU。之后,如果您真的想要进一步的性能优势(大多数网站可能不需要),请考虑使用 ECDSA 密钥。
HTTP 和 应用安全
HTTP 协议和 Web 应用交付的周边平台在 SSL 诞生后继续快速发展。作为这一进化的结果,该平台现在包含可用于打败加密的功能。在本节中,我们列出了这些功能,以及安全使用它们的方法。