您的web服务器配置完美,具有坚如磐石的TLS?证明这一点(Prove it)。
“工作”和“工作良好”之间的区别很棘手。很容易看出客户是否可以访问网站或下载电子邮件。也许你的应用程序提供了一个方便的锁图标,或者闪烁一条通知,上面写着“安全连接”,不管这意味着什么。热心公益的人们提供了各种在线工具来调查和诊断TLS连接。它们中的大多数专注于web服务器,尽管有些纯粹适用于X.509证书。我将讨论三项最重要的服务。
SSL实验室是一项免费服务,允许您审核和测试服务器的TLS配置。它们还允许您测试浏览器的机密性、完整性和不可否认性功能,并提供对全球TLS配置的评估。他们的服务非常有用,我甚至倾向于原谅他们使用“SSL”这个词。
评估您的服务器访问 https://www.ssllabs.com
,选择“服务器测试”并输入您网站的URL。他们的服务器在短时间内向您的网站发出许多请求,分析结果,并提供一份报告,其中包括从A到F的字母等级。
第一次运行此扫描时,结果可能会让你感到害怕。大多数web服务器都有默认配置,专注于使网站可供最广泛的客户端使用,而不是提供现代强大的TLS。默认配置会使您面临各种攻击,SSL实验室会详细说明您对其中许多攻击的脆弱性。痛苦的细节。幸运的是,只需稍作配置更改,即可修复报告中的所有内容。现代网络服务器都有禁用过时的TLS和SSL版本、只使用高质量算法和强制密码排序的选项。完成这些操作会将你的成绩提高到A。
也许你的管理层已经决定,该组织的电子商务网站必须支持Netscape浏览器和SSL版本1。它们在现代互联网上不起作用,大多数网站都不能正确呈现,但你不得不拖着这些过时的客户端的尸体,希望奇迹会发生,它们会产生收入。支持这些客户端不仅意味着支持危险和过时的SSL,还意味着允许对服务器进行各种攻击。一旦你清理完所有可以清理的东西,就提交一份报告,解释对这些老客户的支持会使你的所有客户面临风险。这可能不会改变他们的想法,但当不可避免的头条新闻被黑客攻击,组织试图责怪你时,你会有你警告管理层的文件。这可能不会保住你的工作,但至少你可以向媒体解释:我告诉他们了。
加密标准不断发展。2016年获得A+的配置在今天是不可接受的。如果你什么都不改变,成绩会慢慢下降。当您更新服务器或更改其配置时,您可能会在不知不觉中无意中降低其TLS质量。每次升级和重新配置服务器后都要测试您的站点。
笨拙的入侵者会在很短的时间内使用不同的TLS版本和密码发送许多查询,就像SSL实验室一样。如果你有一个自动阻止此类探测的入侵检测系统,它也可能阻止这些测试。
虽然SSL实验室提供公共测试服务很好,但您还需要能够测试不在公共互联网上的服务器和非网络服务器。在大多数环境中,我更喜欢testssl(https://testssl.sh
)。testssl.sh
程序执行的检查与SSL实验室的扫描程序非常相似。它只需要Bash和标准的Unix实用程序,大多数操作系统都有它的软件包。对您的网站运行完整的扫描很简单:
xxxxxxxxxx
$ testssl.sh https://mwl.io
它评估网站上可用的TLS和SSL版本、可用的密码、会话票证和漏洞。最后,它使用Internet Explorer 6模拟从各种操作系统和浏览器到Android 4.4和Windows XP的连接。
它还允许您探测非HTTP应用程序。 --starttls
或 -t
标志允许您查询使用STARTTLS的应用程序,如POP3、MySQL和LDAP。以协议作为论据。
xxxxxxxxxx
$ testssl.sh -t imap mail.mwl.io:993
Testssl可以生成JSON或HTML输出,从文件中获取目标列表,等等。我可以用调整(tweaking)和调优(tuning)testssl来填满一整章。那些需要执行定期扫描的人,特别是对整个网络的扫描,应该调查testssl。
如果你更喜欢基于网络的内部系统,密码检查(https://cryptcheck.fr
)提供与testssl和SSL实验室类似的服务。Cryptcheck的前端是用Rails编写的,而SSL实验室使用Go,所以你可以选择你最不讨厌的实现。
证书颁发机构不完善。证书颁发机构可能会被欺骗、黑客攻击和滥用。证书颁发机构错误地颁发了证书,允许恶意行为者伪装成谷歌和微软等组织。
虽然没有什么可以阻止所有可能的欺诈,但证书透明度(Certificate Transparency)可以减少欺诈。所有信誉良好的公共CA都会记录他们签署的证书,并将这些证书日志公之于众。审计员可以查看记录,并验证每个CA是否正确提供了证书。
透明度还显示证书是否已被吊销。如果您正在编写一个重要的应用程序,并且需要比CRL、OCSP装订和专有浏览器系统提供的吊销检查更快的吊销检查,则您可能会欺骗API对证书透明服务器的访问,并获得近实时吊销信息。
最终,TLS客户端将拒绝未提交到透明服务器的证书。
对于我们这些系统管理员级别较低的人来说,证书透明度使我们能够看到为我们的域颁发的证书。你可以验证它们都是合法的。执行此搜索的最简单方法是通过以下网站 https://crt.sh
或者谷歌透明度项目(Google Transparency Project)。在证书透明度日志上搜索会发现许多候选者。转到网站并输入域名,查看颁发给该名称和颁发者的所有证书。它应该只包含您通常的CA颁发的证书。如果在其中你发现了一个由“恶意六指漏洞证书颁发机构”(“Malevolent Six-Fingered Lackey’s Certificate Authority”)签名的证书,那么有人从该CA中骗取了你组织的证书。
与许多TLS监控站点一样,https://crt.sh
作为公共服务提供。编写一个脚本来检查您的域并将其与已知证书列表进行比较是轻而易举的。没有人需要每五分钟甚至每天检查一次清单。然而,它确实为搜索提供了ATOM提要。
如果要对证书透明度日志进行认真分析 http://crt.sh
源代码可用。构建自己的日志服务器。
您的证书包含已提交到证书透明度日志的证据。此信息也可以包含在装订好的OCSP证书或TLS扩展中,但我最常在证书本身中看到它。
当CA决定签署您的证书请求时,但在向您发送证书之前,它会向证书透明度日志(Certificate Transparency Log)提交一份初步证书。日志返回带有其自己的数字签名的初步证书,即签名证书时间戳(Signed Certificate Timestamp —— SCT)。CA将SCT复制到真实证书中并签名。任何检查证书的人都可以看到它已正确记录。第三章有一个例子。证书可以提交到多个日志,并且可能有多个SCT。
TLS客户端越来越多地在证书中查找SCT。最终,他们将拒绝没有证书的证书。如果客户端遇到来自知名信任锚点的证书,而该证书看似有效但缺少SCT,则应引起怀疑。浏览器将很快通知CA此类证书。
所有设计良好的应用程序的行为都是相似的,但设计不佳的应用程序都会以自己的方式崩溃。每个人最终都会发现自己在挑战应用程序的极限,或者决定事情应该如何失败。你需要的是一大堆坏例子、边缘案例和技术上合法但没有真正支持的东西。
那就是 https://badssl.com
主网站是无害的,但它包含一大堆故意配置错误的网站的链接。从技术上讲,你可以拥有一个包含一万个替代名称的证书,但真正的浏览器会支持吗?badSSL网站让您可以轻松测试它。您可以启动每个浏览器,看看它们对当前和以前的TLS标准有何反应。
如果这对你来说还不够烦人,你可以考虑运行自己的CA。