Buenas tardes, me he actualizado a Delphi Sydney (10.4) y resulta que el evento HTTPRIOBeforePost ha cambiado,
antes los argumentos eran (CONST HTTPReqResp: THTTPReqResp; Data: Pointer) y ahora (const HTTPReqResp: THTTPReqResp; Client: THTTPClient)
la función InternetSetOption que se usa dentro del evento antes se le pasaba como parametros InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, nil, Sizeof(CERT_CONTEXT))
y ahora InternetSetOption(Client, INTERNET_OPTION_CLIENT_CERT_CONTEXT, nil, Sizeof(CERT_CONTEXT))
y devuelve siempre false o sea "Error, Internet SSL certificate"
Mi fuente con lo anterior a delphi 10.4 comentado:
Código Delphi
[-]procedure TGestionSII_1_1EnviarDatCli.HTTPRIOBeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient);var
Store : IStore;
Certs : ICertificates;
Cert : ICertificate2;
CertContext : ICertContext;
PCertContext : PCCERT_CONTEXT;
vNombreCertificado: OleVariant;
const
INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
begin
vNombreCertificado:= HdParam(parSfnCertificadoNombreSII).AsString;
Store := CoStore.Create;
Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED );
Certs:=Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, vNombreCertificado, False );
if Certs.Count > 0 then
begin
Cert := IInterface(Certs.Item[1]) as ICertificate2;
CertContext := Cert as ICertContext;
CertContext.Get_CertContext(Integer(PCertContext));
if not InternetSetOption(Client, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, Sizeof(CERT_CONTEXT)) then
BoxMsg('Error, Internet SSL certificate');
end else
BoxMsg('Error, NO HAY CERTIFICADO');
end;
Alguien me puede ayudar por favor, gracias.