任何人都可以向我指出有关如何使用 openSSL 在 C 中实现证书固定的基本教程吗?这是我到目前为止所拥有的:
- 我的服务器证书,将成为我的客户端的一部分
- 在客户端,我添加了此代码(减去我在此处删除的一些打印内容..):
`
SSL_CTX_load_verify_locations(ssl, cert_path, NULL);
SSL_CTX_set_verify(ssl, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
verify__cert_callback);
X509 *peer_cert = SSL_get_peer_certificate(ssl);
X509_free(peer_cert);
long verify_res = SSL_get_verify_result(ssl_data->ssl);
if(verify_res != X509_V_OK) {
Log(&lg_ssl, ERR, "verify error");
}
static int verify__cert_callback(int preverify, X509_STORE_CTX *x509_ctx) {
STACK_OF(X509) *certs = X509_STORE_CTX_get1_chain(x509_ctx);
X509 *cert;
char *line;
for (int i = 0, count = sk_X509_num(certs); i < count; i++) {
Log(&lg_ssl, INF, "cert #%d", i);
cert = sk_X509_value(certs, i);
if (cert != NULL) {
line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);
free(line);
line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);
free(line);
}
}
return preverify;}
但我想要的不仅是检查服务器的证书是否有效,还要检查它是否由我在客户端拥有的同一个 CA 签名。如何实现该功能?