0

任何人都可以向我指出有关如何使用 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 签名。如何实现该功能?

4

0 回答 0