subject alt name:
对于证书持有者,一般使用 Subject
项标记,并使用 subjectAltName
扩展项提供更详细的持有者身份信息。 subjectAltName
全称为 Subject Alternative Name,缩写为 SAN。它可以包括一个或者多个的电子邮件地址,域名,IP地址和 URI 等,详细定义如下
SubjectAltName ::= GeneralNames GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName GeneralName ::= CHOICE { otherName [0] OtherName, rfc822Name [1] IA5String, dNSName [2] IA5String, x400Address [3] ORAddress, directoryName [4] Name, ediPartyName [5] EDIPartyName, uniformResourceIdentifier [6] IA5String, iPAddress [7] OCTET STRING, registeredID [8] OBJECT IDENTIFIER }
当颁发的证书不存在 Subject
项的时候,证书必须包含扩展项 subjectAltName
,并且标记为关键(critical)的。当颁发的证书存在 Subject
项的时候,必须将扩展项 subjectAltName
标记为非关键(no-critical)的。注意:用于颁发证书的 CA 证书是必须包含 Subject
项的。
问题分析:
客户端程序调用API mbedtls_ssl_set_hostname() 设置 CN
客户端和服务端在握手过程中,服务端会把带有服务端公钥的证书发给客户端,此证书包含 subject name 或 subject alt name,如果上面设置的 CN 和 subject name 或 subject alt name 不一样,则报错:
-9984 - X509 - Certificate verification failed, e.g. CRL, CA or signature check failed