Bonjour à tou(te)s,

je cherche à communiquer en https avec un serveur en m'appuyant sur l'API win32.
Voici une version ultra-minimaliste de mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
HINTERNET ses = WinHttpOpen(L"test",WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,WINHTTP_NO_PROXY_NAME,WINHTTP_NO_PROXY_BYPASS,0 ) ;
HINTERNET con = WinHttpConnect(ses,L"www.developpez.net",INTERNET_DEFAULT_HTTPS_PORT,0 ) ;
HINTERNET req = WinHttpOpenRequest(con,L"GET",L"/forums",NULL,WINHTTP_NO_REFERER,WINHTTP_DEFAULT_ACCEPT_TYPES,WINHTTP_FLAG_SECURE ) ;
WinHttpSendRequest( req,WINHTTP_NO_ADDITIONAL_HEADERS,0,WINHTTP_NO_REQUEST_DATA,0,0,0 ) ;
WinHttpReceiveResponse( req,NULL ) ;
char buffer [10000] ;
unsigned long size ;
WinHttpReadData( req,reinterpret_cast<void*>( buffer ),sizeof( buffer )-1,&size ) ;
buffer[size] = 0 ;
cout << buffer << endl ;
...
Tant que je m'adresse à un serveur sécurisé "classique", genre www.developpez.net/forums, tout se passe bien.
Le problème survient quand je veux m'adresser à un serveur auprès de qui je dois m'authentifier.
Je dispose du certificat et de la clef privée de mon client, et du certificat du niveau au dessus qui l'authentifie (3 fichiers .pem),
mais je n'arrive à "introduire" toutes ces données (2 certificats et 1 clef) dans l'API.

J'ai l'impression que la fonction qu'il me faut est WinHttpSetOption mais les paragraphes de la doc microsoft se renvoient la balle entre les options WINHTTP_OPTION_CLIENT_CERT_CONTEXT et WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST...

Pour info, avec cette ligne de commande cURL, j'arrive bien à me connecter au serveur :

curl https://mon.serveur --cert Client_cert.pem --key Client_key.pem --cacert Root_cert.pem

Alors j'imagine que d'une manière ou d'une autre, il doit y avoir moyen de faire la même chose avec Win32...
Donc s'il y a parmi vous un expert en la matière, je suis preneur de tout conseil ou tuto !
Merci d'avance