Frågade om detta för ett tag sedan men fick inget svar, försöker igen nu när MS representanter är närvarande... Hei! Hej Gunnar, Är det nån VB/C++ räv som har lust att hjälpa mig porta ovanstående kod till VB?Automatiskt välja ett certifikat (det första) i certifikatdialogen
Har byggt en COM komponent som wrappar kommunikation mot vissa av Postens e-tjänster. Säkerhetslösningen Posten har är via certifikat. Tanken är att automatisera all interaktion mellan applikationen och Posten, detta är löst utom just en sak, vid första kontakten i sessionen kommer, via WinInet eller WebBrowser kontrollen, det upp en modal dialog där man skall klicka på det certifikat man vill använda.
Den ultimata lösningen vore att via apier peka ut certifikatet och slippa dialogen.
En godtagbar lösning är att automatiskt välja första certifikatet (99% av insatallationerna har bara ett certifikat).
Den förstnämnda har jag sökt men inte funnit, den sistnämnda borde gå att lösa genom att hooka in på meddelandeströmmen, och beordra klick på fönsatrets Ok knapp. Rätt eller fel?Sv: Automatiskt välja ett certifikat (det första) i certifikatdialogen
Du skriver ikke om du bruker VB eller C++, men jeg antar at du använder WinInet. Det er möjligt at programmatisk velge et client certificate programmatisk om IE 5.5 eller nyere er installert.
Se "HOWTO: Select Client Certificate in WinInet"
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B224282
Artikkelen sier at du kan använda CertEnumCertificatesInStore etc:
Følgende kodsnutt vill enumerere alle certifikater og ta ut "Display name".
Strax du har hittat rett certifikat så kan passe CERT_CONTEXT structure til internetSetup slik:
<code>
InternetSetup(hInternet, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
pcertCtx, sizeof(CERT_CONTEXT));
</code>
Kodsnutt for at enumerera client side certifikater
<code>
HCERTSTORE hCert;
PCCERT_CONTEXT pcertCtx = NULL;
char szName[128];
hCert = CertOpenSystemStore(NULL, "MY");
if (hCert == NULL)
REPORTERROR("CertOpenSystemStore failed", GetLastError());
do
{
pcertCtx = CertEnumCertificatesInStore(hCert, pcertCtx);
if (pcertCtx == NULL)
REPORTERROR("CertEnumCertificatesInStore failed", GetLastError());
CertGetNameString(pcertCtx, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL, szName, sizeof(szName));
}
while (pcertCtx != NULL);
</code>
Definisjoner av konstanter, slik som INTERNET_OPTION_CLIENT_CERT_CONTEXT finnes i wininet.h. Andre konstanter finns typ i wincrypt.h. Ladda hjem Platform SDK for å få nyeste .h header filer:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/Sv: Automatiskt välja ett certifikat (det första) i certifikatdialogen
Jag kör VB och använder WebBrowser komponenten samt WinInet APIerna. Tack för din hjälp, jag skall försöka lösa det med hjälp av den HOWTO'n, men om det strular så återkommer jag.
/SSv: Automatiskt välja ett certifikat (det första) i certifikatdialogen
/Smuts