J'ai écrit du code avec openssl pour connecter le serveur sous tls. Si je charge des certificats à partir du fichier pem, cela fonctionne correctement. Mais si je charge le certificat du fichier pfx, il se produit SSL_ERROR_SSL en appelant SSL_connect. Je ne sais pas si le processus de chargement du fichier pfx est faux ou non. Le processus est ci-dessous.SSL_ERROR__SSL se produit lors de l'appel SSL_connect
FILE* fp = fopen("cert.pfx", "rb");
PKCS12* p12 = d2i_PKCS12_fp(fp, NULL);
PKCS12_parse(p12, NULL, &private_key, &certificate, &ca_certificates);
SSL_CTX_use_certificate(ctx, certificate);
SSL_CTX_use_PrivateKey(ctx, private_key);
SSL_CTX_check_private_key(ctx);
SSL_CTX_add_extra_chain_cert(ctx, sk_X509_value(ca_certificates, i);
SSL_CTX_add_client_CA(ctx, sk_X509_value(ca_certificates, i);
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);
...
SSL* ssl = SSL_new(ssl_context);
SSL_set_fd(ssl, sockfd);
SSL_connect(ssl);
...
J'ai testé le fichier pfx avec un autre client. Ça marche bien. Donc le problème n'est pas le fichier pfx. Y at-il des options de openssl échouerait la connexion? Ou je n'ai pas défini le certificat d'autorité de certification correctement? Le fichier pfx contient des CA signés par moi-même. Mais cela fonctionne avec d'autres clients.
J'ai appelé ERR_get_error() après l'échec de SSL_connect(). Et la vérification du certificat a échoué. Donc, je pense qu'il y a quelque chose de mal dans le processus ci-dessus de chargement d'un fichier pfx. Peut-être que je n'ajoute pas le certificat CA à juste titre. Quelqu'un peut-il me dire le bon processus pour charger un pfx.
Aidez s'il vous plaît!
J'ai trouvé la solution. Ce code est pour l'utilisation du client. J'ai regardé dans la source de la fonction SSL_CTX_load_verify_locations(). Il ajoute le certificat ca au cert_store du contexte SSL par la fonction X509_STORE_add_cert(). J'ai fait la même chose et j'ai travaillé. Alors merci pour votre aide. – geeker