面试题答案
一键面试证书验证误区
- 忽略证书链验证:只验证终端实体证书,而不验证整个证书链。一个完整的证书信任链从根证书开始,中间可能有多级中间证书,到终端实体证书结束。若忽略中间证书验证,攻击者可能伪造中间证书进行中间人攻击。
- 不检查证书有效期:认为只要证书存在就有效,不检查证书的起止日期。过期的证书可能已被撤销,使用过期证书通信存在安全风险。
- 仅验证证书签名:仅验证证书数字签名的正确性,而不检查证书其他关键信息,如证书用途、扩展字段等。例如,证书可能被标记为仅用于签名邮件,但却被用于TLS通信,这种情况下即使签名正确,使用也是不恰当的。
- 信任所有自签名证书:自签名证书通常由组织或个人自行创建,缺乏权威CA的背书。信任所有自签名证书,可能会接受恶意攻击者伪造的自签名证书,导致通信被监听或篡改。
- 不验证证书的颁发机构(CA):随意信任未知或不可信的CA颁发的证书。有些攻击者可能创建自己的CA并颁发恶意证书,如果不验证CA的可信度,就容易受到攻击。
正确验证方式
- 完整证书链验证:从终端实体证书开始,向上验证每一级证书,直到根证书。根证书通常预装在操作系统或浏览器的信任根证书库中。确保证书链中每个证书的签名都由其上级证书正确验证。
- 检查证书有效期:验证当前日期是否在证书的起止日期范围内。如果当前日期超出此范围,证书应被视为无效。
- 全面检查证书关键信息:不仅验证签名,还要检查证书用途(如扩展字段中Key Usage和Extended Key Usage)是否适合TLS通信。例如,TLS服务器证书的Extended Key Usage应包含服务器身份验证(serverAuth)。
- 谨慎处理自签名证书:仅在确实信任自签名证书的创建者且有合理安全理由的情况下,手动导入并信任自签名证书。在生产环境中,尽量避免使用自签名证书,除非有严格的安全管控措施。
- 验证CA的可信度:只信任知名、可靠的CA颁发的证书。可以通过查询权威的CA信任列表,或者依赖操作系统、浏览器等内置的信任CA列表来验证CA的合法性。对于非标准或自定义的CA,需严格评估其可信度和安全性。