Bom dia!
Adicionei essa linha no código abaixo e estou esperando a SICREDI retornar a minha solicitação de certificado.
Aparentemente o arquivo ficou idêntico ao arquivo gerado pelo manual da sicredi.
function TACBrOpenSSLUtils.CreateCertificateSignRequest(
const CN_CommonName: String; O_OrganizationName: String;
OU_OrganizationalUnitName: String; L_Locality: String;
ST_StateOrProvinceName: String; C_CountryName: String;
EMAIL_EmailAddress: String; Algorithm: TACBrOpenSSLAlgorithm): String;
var
x: PX509_REQ;
name: PX509_NAME;
bio: PBIO;
md: PEVP_MD;
begin
CheckPrivateKeyIsLoaded;
CheckPublicKeyIsLoaded;
Result := '';
md := GetEVPAlgorithmByName(Algorithm);
x := X509_REQ_new;
try
name := X509_NAME_new;
try
if (EMAIL_EmailAddress <> '') then
X509NameAddEntryByTxt(name, 'EMAIL', MBSTRING_ASC, EMAIL_EmailAddress, -1, -1, 0);
if (C_CountryName <> '') then
X509NameAddEntryByTxt(name, 'C', MBSTRING_ASC, C_CountryName, -1, -1, 0);
if (ST_StateOrProvinceName <> '') then
X509NameAddEntryByTxt(name, 'ST', MBSTRING_ASC, ST_StateOrProvinceName, -1, -1, 0);
if (L_Locality <> '') then
X509NameAddEntryByTxt(name, 'L', MBSTRING_ASC, L_Locality, -1, -1, 0);
if (OU_OrganizationalUnitName <> '') then
X509NameAddEntryByTxt(name, 'OU', MBSTRING_ASC, OU_OrganizationalUnitName, -1, -1, 0);
if (O_OrganizationName <> '') then
X509NameAddEntryByTxt(name, 'O', MBSTRING_ASC, O_OrganizationName, -1, -1, 0);
X509NameAddEntryByTxt(name, 'CN', MBSTRING_ASC, CN_CommonName, -1, -1, 0);
//Adicionar subjetct no certificado colocar o cnpj de cada cliente xxxxxxx é o cnpj do assossiado
X509NameAddEntryByTxt(name, 'serialNumber', MBSTRING_ASC, 'urn:cpfcnpj:xxxxxxxxxxxxxx', -1, -1, 0);
if (X509_REQ_set_subject_name(x, name) <> 1) then
raise EACBrOpenSSLException.Create('X509_REQ_set_subject_name' + sLineBreak + GetLastOpenSSLError);
finally
X509_NAME_free(name);
end;
if (X509_REQ_set_pubkey(x, fEVP_PublicKey) <> 1) then
raise EACBrOpenSSLException.Create('X509_REQ_set_pubkey' + sLineBreak + GetLastOpenSSLError);
if (X509_REQ_sign(x, fEVP_PrivateKey, md) = 0) then
raise EACBrOpenSSLException.Create('X509_REQ_sign' + sLineBreak + GetLastOpenSSLError);
bio := BioNew(BioSMem);
try
if (PEM_write_bio_X509_REQ(bio, x) <> 1) then
raise EACBrOpenSSLException.Create('PEM_write_bio_X509_REQ' + sLineBreak + GetLastOpenSSLError);
Result := BioToStr(bio);
finally
BioFreeAll(bio);
end;
finally
X509_REQ_free(x);
end;
end;