Fórum Assinatura digital Cades no padrão da icp-Brasil #591534
26/02/2018
0
Bom dia,
Estou desenvolvendo uma solução. E o mesma precisa de assinar um arquivo XML no formato CAdES,
Enviar o certificado do usuário no cabeçalho do pacote SOAP, Converter o conteúdo para base64. Estar no padrão da ICP-Brasil.
E enviar o conteúdo para um web service.
O que consegui fazer.: Assinar o documento utilizando (CAPICOM,secureblackbox,Chilkat). Mais ao enviar o arquivo
por web service o retorno sempre e o mesmo. O certificado não é homologado pela ICP-BRASIL.
Não consegui enviar o certificado do usuário no cabeçalho do pacote SOAP. Alguém teria alguma sugestão?
{$REGION ''''Variáveis''''}
var
CAdESProcessor: TElCAdESSignatureProcessor;
CMS: TElSignedCMSMessage;
Cert: TElX509Certificate;
Sig: TElCMSSignature;
SourceStream, CMSSTream: TFileStream;
{$ENDREGION}
begin
Cert := RetorneCertificadoSelecionado;
if Cert = nil then
begin
raise Exception.Create(''''@Nenhum certificado digital foi informado para assinar'''');
end;
// Criando uma instância do processador de assinatura.
CAdESProcessor := TElCAdESSignatureProcessor.Create();
try
// Criando uma instância da classe de mensagem assinada.
CMS := TElSignedCMSMessage.Create(nil);
SourceStream := TFileStream.Create(vlTextoParaAssinar, fmOpenRead or fmOpenReadWrite);
try
// Criando nova mensagem assinada.
CMS.CreateNew(SourceStream, 0, SourceStream.Size);
// Adicionando uma assinatura.
Sig := CMS.Signatures[CMS.AddSignature()];
// Encadernando a assinatura ao processador CAdES.
CAdESProcessor.Signature := Sig;
// Criando a assinatura.
// CAdESProcessor.CreateEPES(Cert, StrToOID(''''2.16.76.1.7.1.1.2.2''''), SB_ALGORITHM_DGST_SHA1, PolicyHash); // Não sei como calcular o hash!
CAdESProcessor.CreateBES(Cert);
{$REGION ''''Salvando o CMS''''}
CMSStream := TFileStream.Create(vlLocalSaida, fmCreate);
try
CMS.Save(CMSStream);
finally
FreeAndNil(CMSStream);
end;
{$ENDREGION}
TransmitirXML;
finally
FreeAndNil(CMS);
FreeAndNil(SourceStream);
end;
finally
FreeAndNil(CAdESProcessor);
FreeAndNil(Cert);
end;
Estou desenvolvendo uma solução. E o mesma precisa de assinar um arquivo XML no formato CAdES,
Enviar o certificado do usuário no cabeçalho do pacote SOAP, Converter o conteúdo para base64. Estar no padrão da ICP-Brasil.
E enviar o conteúdo para um web service.
O que consegui fazer.: Assinar o documento utilizando (CAPICOM,secureblackbox,Chilkat). Mais ao enviar o arquivo
por web service o retorno sempre e o mesmo. O certificado não é homologado pela ICP-BRASIL.
Não consegui enviar o certificado do usuário no cabeçalho do pacote SOAP. Alguém teria alguma sugestão?
{$REGION ''''Variáveis''''}
var
CAdESProcessor: TElCAdESSignatureProcessor;
CMS: TElSignedCMSMessage;
Cert: TElX509Certificate;
Sig: TElCMSSignature;
SourceStream, CMSSTream: TFileStream;
{$ENDREGION}
begin
Cert := RetorneCertificadoSelecionado;
if Cert = nil then
begin
raise Exception.Create(''''@Nenhum certificado digital foi informado para assinar'''');
end;
// Criando uma instância do processador de assinatura.
CAdESProcessor := TElCAdESSignatureProcessor.Create();
try
// Criando uma instância da classe de mensagem assinada.
CMS := TElSignedCMSMessage.Create(nil);
SourceStream := TFileStream.Create(vlTextoParaAssinar, fmOpenRead or fmOpenReadWrite);
try
// Criando nova mensagem assinada.
CMS.CreateNew(SourceStream, 0, SourceStream.Size);
// Adicionando uma assinatura.
Sig := CMS.Signatures[CMS.AddSignature()];
// Encadernando a assinatura ao processador CAdES.
CAdESProcessor.Signature := Sig;
// Criando a assinatura.
// CAdESProcessor.CreateEPES(Cert, StrToOID(''''2.16.76.1.7.1.1.2.2''''), SB_ALGORITHM_DGST_SHA1, PolicyHash); // Não sei como calcular o hash!
CAdESProcessor.CreateBES(Cert);
{$REGION ''''Salvando o CMS''''}
CMSStream := TFileStream.Create(vlLocalSaida, fmCreate);
try
CMS.Save(CMSStream);
finally
FreeAndNil(CMSStream);
end;
{$ENDREGION}
TransmitirXML;
finally
FreeAndNil(CMS);
FreeAndNil(SourceStream);
end;
finally
FreeAndNil(CAdESProcessor);
FreeAndNil(Cert);
end;
Junismar Miranda
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)