Czy ktoś z was podpisywał SOAP certyfikatem w Delphi7? Mam (głupie) pytanie.
Znalazłem kilka stron, które opisują jak to zrobić, między innymi
https://groups.google.com/forum/#!msg/borland.public.delphi.webservices.soap/EaoWgZ2J8uE/wsUvjXFT1YYJ
https://forums.embarcadero.com/thread.jspa?messageID=425831
ale napotkałem na problem przy wykonywaniu polecenia InternetSetOption lub wczesniej Get_CertContext.
[Error] Unit1.pas(80): '(' expected but ')' found (i to jest właśnie głupie)
W projekcie używam :
CAPICOM_TLB ściągniętych ze strony
http://www.microsoft.com/en-us/download/details.aspx?id=25281
JwaWinCrypt ściągniętych ze strony
http://jedi.grizzlydev.com/www/apilibrary.html (pierwszy link http://jedi.grizzlydev.com/www/files/api/win32api.zip)
Męczę się z tym już dłuższą chwilę, myślenie mi się już powoli kończy a doszedłem do postaci jak niżej.
Poniżej kawałek mojego kodu.
procedure TForm1.OnBeforePost(const HTTPReqResp: THTTPReqResp;
Data: Pointer);
var
store: TStore;
certificates: ICertificates;
certificate: ICertificate2;
i:integer;
ss:string;
CertContext : ICertContext;
v : OleVariant;
begin
v := '9DF80D9E2(...)'; // tutaj odcisk palca mojego certyfikatu
store := TStore.Create(nil);
store.Open(CAPICOM_CURRENT_USER_STORE, 'AddressBook', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED or CAPICOM_STORE_OPEN_INCLUDE_ARCHIVED or CAPICOM_STORE_OPEN_EXISTING_ONLY);
certificates := store.Certificates;
for i := 1 to certificates.count do
begin
certificate := IInterface(certificates.Item[i]) as ICertificate2;
ss := certificate.Thumbprint;
if ss = v then
begin
CertContext := certificate as ICertContext;
CertContext.Get_CertContext( Integer( PCertContext ) );
if InternetSetOption( Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
PCertContext, Sizeof( CERT_CONTEXT ) ) = False then
begin
ShowMessage( 'Something went wrong' );
end;
end;
end;
store.close();
store.Free;
end;