Boa tarde,
Não sei como e se resolveram a situação de não encontrar o certificado, mas uma situação parecida que tive foi utilizando um módulo central como serviço, ele não conseguia ler o repositório de certificados. Ao configurar o serviço com um usuário autenticado que tivesse os certificados instalados no seu perfil funcionou.
Com relação à lista de certificados, fiz uma função para retornar um xml com os certificados encontrados na máquina. Segue, caso ajude:
*** units necessárias: ACBrCAPICOM_TLB, ACBrNFeConfiguracoes;
function CertificadosLista: string;
var
Store: IStore3;
Certs: ICertificates2;
Cert : ICertificate2;
i : Integer;
begin
Result := '';
try
Store := CoStore.Create;
Store.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_STORE_NAME, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
Certs := Store.Certificates as ICertificates2;
Except
Result := 'Erro ao carregar lista de certificados';
exit;
end;
Result := '<certificados>';
for i:= 1 to Certs.Count do
begin
try
Cert := IInterface(Certs.Item) as ICertificate2;
Result := Result +
'<cert' + Copy(IntToStr(10000000 + i),5,4) + '>' +
'<serialnumber>' + Cert.SerialNumber + '</serialnumber>' +
'<subjectname>' + Cert.SubjectName + '</subjectname>' +
'<issuername>' + Cert.IssuerName + '</issuername>' +
'<validfromdate>' + FormatDateTime('dd/mm/yyyy', Cert.ValidFromDate) + '</validfromdate>' +
'<validtodate>' + FormatDateTime('dd/mm/yyyy', Cert.ValidToDate) + '</validtodate>' +
'<message>' + 'ok' + '</message>' +
'</cert' + Copy(IntToStr(10000000 + i),5,4) + '>';
Except
on E:Exception do
Result := Result +
'<cert' + Copy(IntToStr(10000000 + i),5,4) + '>' +
'<serialnumber>' + 'Erro' + '</serialnumber>' +
'<subjectname>' + 'Erro' + '</subjectname>' +
'<issuername>' + 'Erro' + '</issuername>' +
'<validfromdate>' + 'Erro' + '</validfromdate>' +
'<validtodate>' + 'Erro' + '</validtodate>' +
'<message>' + E.Message + '</message>' +
'</cert' + Copy(IntToStr(10000000 + i),5,4) + '>';
end;
end;
Result := Result +
'</certificados>';
end;