我正在玩OpenSSL,在我的服务器代码中我有以下内容:
rc = SSL_get_verify_result(ssl);
printf("SSL_get_verify_result(): %i\n", rc);
cert = SSL_get_peer_certificate(ssl);
printf("SSL_get_peer_certificate(): %p\n", cert);
pkey = X509_get_pubkey(cert);
printf("X509_get_pubkey(): %p\n", pkey);
SSL_get_verify_result()
会返回预期的X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
。
我的问题是,在X509_get_pubkey()
因上述错误失败后,我是否可以相信客户端实际上是我使用SSL_get_verify_result()
获得的pub密钥的所有者。
换句话说,我可以使用此公钥执行身份验证(假设我的服务器知道此公钥)。
谢谢!
答案 0 :(得分:1)
您可以相信对等方拥有他提供的证书的私钥,因为他还提供了一个数字签名,该签名由SSL使用证书中的公钥进行检查。只有私钥的所有者才能这样做。
您是否相信对方拥有主题DN中表达的身份归结为您是否信任发行人,在自签名证书的情况下,他是自己。
该身份是否授权与您的应用程序通信是另一个问题,只有您的应用程序才能回答。