在SSL握手过程中,是否在SSL握手过程中检查服务器的域名,我的意思是是否对照运行服务器的域检查了经过认证的服务器中的域名?
示例:假设服务器证书具有域mydomain.com。并且如果服务器在domain someotherdomain.com中运行... SSL握手期间是否阻塞了该连接,并且由于mydomain.com不是someotherdomain.com而中止了?
这取决于...
SSL / TLS标准本身未指定验证服务器证书的方式和时间。
从介绍:
daccess-ods.un.org daccess-ods.un.org关于如何启动TLS握手以及如何解释交换的认证证书的决定,由运行在TLS之上的协议的设计者和实施者来决定。
话虽这么说,虽然它没有指定身份验证的进行方式,但实现是要在握手期间(或至少在紧接之后)执行此检查:
bad_certificate
,certificate_expired
,...)。在大多数情况下,证书验证本身受RFC 3280 / RFC 5280的指导。默认情况下,许多SSL / TLS堆栈至少会执行此操作。
主机名验证(可以视为证书验证步骤之一)历来是单独实施的。这主要是因为RFC 3280 / RFC 5280没有解决此步骤,而是将其留给了每个应用程序协议。RFC 6125中有一个相对较新的统一尝试(您可以在附录B中找到协议的差异)。
在SSL / TLS握手过程中是否完成主机名检查取决于您所使用的库及其配置方式。
例如,在Java 7之前,这必须与主要的JSSE API(SSLSocket
/ SSLEngine
)分开完成。(这样做的HttpsURLConnection
,例如,但这坐在JSSE的顶部,而不是之内。)由于Java 7,它可能使用握手期间和JSSE内执行该检查X509ExtendedTrustManager
,但是这必须使用配置SSLParameters.setEndpointIdentificationAlgorithm(...)
,它仅支持HTTPS
和LDAPS
(这就是说,即使您的服务不使用HTTP,HTTPS
将端点标识算法用于也不是一个坏选择,当然总比没有好)。
其他SSL / TLS库或使用其他语言包装其他库至少会为此提供回调。如本文所示,开发人员是否使用(并正确使用)它们取决于。(您可能也对Security.SE上的这个问题感兴趣。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句