Exemplos da API do DSS
Abaixo, você pode ver alguns exemplos de chamadas SOAP para o serviço. Todas as chamadas nos exemplos são chamadas SOAP 1.2 usando autenticação de usuário e senha.
GetAccessibleCertificates
: Recupera a lista de certificados aos quais o usuário autenticado tem acesso. O exemplo a seguir retorna os certificados aos quais o usuário username@domain tem permissões no serviço de assinatura. Esses certificados são os pessoais do usuário e aqueles aos quais ele tem acesso por política.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:evolium:redtrust:dss:ws">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PSSWORD]</wsse:Password>
<wsu:Created>2024-11-15T11:28:30.080Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/GetAccessibleCertificates</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<urn:GetAccessibleCertificates/>
</soap:Body>
</soap:Envelope>
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/GetAccessibleCertificatesResponse</a:Action>
</s:Header>
<s:Body>
<GetAccessibleCertificatesResponse xmlns="urn:evolium:redtrust:dss:ws">
<Result xmlns:b="http://schemas.datacontract.org/2004/07/RTDSSService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:ResultStatus>SUCCESS</b:ResultStatus>
<b:ResultMessage>Operation finalized successfully</b:ResultMessage>
<b:ResultData i:type="b:ArrayOfCertificate">
<b:Certificate>
<b:X509Data>...</b:X509Data>
<b:alias>EIDAS CERTIFICADO PRUEBAS - 99999999R</b:alias>
<b:certificateHandler>6017</b:certificateHandler>
<b:expiration>2024-11-05T14:04:20</b:expiration>
<b:issuer>Ceres</b:issuer>
<b:needPin>false</b:needPin>
<b:needReason>false</b:needReason>
<b:subject>EIDAS CERTIFICADO PRUEBAS - 99999999R</b:subject>
<b:thumbprint>06F13CCD80E271D5355B3BEA322B8CBCE25B35F6</b:thumbprint>
<b:type>PRIVATE</b:type>
</b:Certificate>
</b:ResultData>
<b:TotalItems>1</b:TotalItems>
</Result>
</GetAccessibleCertificatesResponse>
</s:Body>
</s:Envelope>
Na resposta, você obtém um objeto Result
, com um ResultStatus
no estado de sucesso, indicando que não ocorreu nenhum erro. Você também recebe um ResultMessage
com uma mensagem descritiva e um objeto ResultData
que é uma lista de objetos Certificate
.
Cada objeto Certificate
contém as informações necessárias para seu uso. Por exemplo, o seguinte:
Parâmetros | Descrição |
---|---|
needPin | Para descobrir se você precisa de um PIN para usar. |
thumbprint | Identificador usado em SignHash , SignRequest expiration para saber se está expirado ou não. |
alias | Nome dado ao certificado na configuração do Redtrust. |
issue or subject | Informações extraídas diretamente do certificado para esses campos ou da própria impressão digital. |
X509Data | Parte pública do certificado. O conteúdo desse atributo é codificado em Base64 para que possa ser incluído na resposta. |
Assinatura de hash
Gera uma assinatura PKCS#1 a partir de um hash. Os certificados permitidos para a assinatura são aqueles obtidos no método GetAccessibleCertificates
. Tanto o ID quanto a impressão digital do certificado escolhido podem ser especificados para a chamada.
Requisitos
- A assinatura de hash deve estar ativada no servidor.
- Deve existir um certificado com o identificador de requisição.
- Deve existir um usuário username@domain.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou deve ser um certificado pessoal do usuário.
A funcionalidade de assinatura de hash não é ativada por padrão com a licença do serviço de assinatura e deve ser solicitada à equipe de suporte.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:evolium:redtrust:dss:ws">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-5F01A1638C9F9A33A1173167092288930">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PSSWORD]</wsse:Password>
<wsu:Created>2024-11-15T11:42:02.889Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignHash</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<urn:SignHash>
<!--Optional:-->
<urn:toSignHashB64>ybWpO/j3yCfUhzWEWqdHcDgyQ8l5CWwea6Hj+GpI2CA=</urn:toSignHashB64>
<!--Optional:-->
<urn:thumbprint>06F13CCD80E271D5355B3BEA322B8CBCE25B35F6</urn:thumbprint>
<!--Optional:-->
<!--<urn:certificatePin>?</urn:certificatePin>-->
<!--Optional:-->
<urn:algorithm>RSA_SHA256</urn:algorithm>
</urn:SignHash>
</soap:Body>
</soap:Envelope>
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignHashResponse</a:Action>
</s:Header>
<s:Body>
<SignHashResponse xmlns="urn:evolium:redtrust:dss:ws">
<Result xmlns:b="http://schemas.datacontract.org/2004/07/RTDSSService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:ResultStatus>SUCCESS</b:ResultStatus>
<b:ResultMessage>Operation finalized successfully</b:ResultMessage>
<b:ResultData i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">JCtCs3wdvCl1Ql0tstzkMczNmNxcnaLNospXPB/miOi++fbG+jP6dTRvBwhJ4triE8TXxXMs5aVyCkl0oj+WumoO2zRGZSSk1mcbjrYuKP8m+gj5yp0bOGGPbvAIaphhqV87oU+2kcyCtNt32E0QQGRGW6kr+ADPctOFOD5loV84hRUqAw8AJQX20XjlKtzkhaDGBQFMGVUODAId/ywpxCYIQOetRXWcLfCNHQE/C4+jaNwamvPTGlVhn0Vr6xWAoN0/BKBk5eDVOynX7J2zl7TErkVrZ4WA2cIbxxuq2vj1MUMV89dDB54E4cc7UduYKzMIj0iEJ+19NL47NM96iQ==</b:ResultData>
</Result>
</SignHashResponse>
</s:Body>
</s:Envelope>
Os parâmetros de entrada do método são:
Parâmetros | Descrição |
---|---|
toSignHash | Hash binário codificado em base64. |
thumbprint | Impressão digital do certificado. |
certificatePin | (Opcional) PIN do certificado. |
algorithm | Algoritmo de hash; os valores aceitos são RSA_SHA1 , RSA_SHA256 , RSA_SHA512 . |
Em resposta, você obtém um objeto Result
com os seguintes campos:
Campo | Descrição |
---|---|
ResultStatus | Código de resultado, SUCCESS se a assinatura foi bem-sucedida. |
ResultMessage | Mensagem que descreve o resultado da operação. |
ResultData | Opcional, contém o resultado da operação caso a assinatura tenha sido bem-sucedida. |
Consulte Appendix 3 Result Response Codes neste documento para obter os possíveis códigos de erro que você pode obter na resposta.
Firma DSS
Descrição dos campos de um SignRequest
.
<soap:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>developer@local.users</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1234</wsse:Password>
<wsu:Created>2024-11-15T11:28:30.080Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://127.0.0.1:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
Campo | Descrição |
---|---|
Campos no cabeçalho | |
username@domain | Nome de usuário@domínio Corresponde ao usuário Redtrust que fará a requisição de assinatura. |
Senha | Senha do usuário. |
Campos do corpo | |
signature_pdf | Corresponde ao perfil de assinatura previamente criado no Redtrust e que define como a assinatura deve ser feita. |
en-US | Idioma selecionado para as mensagens de resposta. Se não for especificado, o idioma configurado pelo Redtrust será usado por padrão. |
403C7691336CDB7E04F9F272A602A4B42CBE298D | Identificador do certificado a ser utilizado para assinar o documento e corresponde ao campo Fingerprint (impressão digital) do mesmo. O certificado deve ser registrado na plataforma. Ele só pode ser usado se o usuário tiver acesso ao certificado por meio de uma política da Redtrust que permita seu uso no serviço de assinatura ou se for um certificado pessoal. |
1234 | PIN do certificado, somente se necessário. |
urn:oasis:names:tc:dss:1.0:profiles:PAdES:forms:LTV | A forma que você deseja que a assinatura assuma. Deve ser um valor válido para o perfil e, se não for especificado, deve ser forçado no perfil. |
JVBERi0xLjQNJe...Nw0lJUVPRg0= | Documento a ser assinado codificado em Base64. |
XAdES
O XAdES (XML Advanced Electronic Signature) é um conjunto de extensões do XmlDSig que o torna adequado para assinaturas eletrônicas, de acordo com a Diretiva da UE 1999/93/EC. Um dos pontos fortes do XAdES é que os documentos assinados eletronicamente usando esse sistema podem permanecer válidos por longos períodos de tempo.
Exemplos do uso do serviço Redtrust DSS para assinar documentos XML usando XAdES serão mostrados a seguir.
Assinatura XAdES BES Enveloped
Este exemplo descreve como fazer uma chamada para o serviço para gerar uma assinatura XAdES no nível BES e com o modo enveloped. O nível BES é o mais básico da assinatura avançada, conforme descrito na seção Níveis suportados. O modo enveloped incorpora a assinatura ao documento original, conforme descrito na seção Modos soportados.
Requisitos
- Deve haver um perfil de assinatura no Redtrust definido para XAdES. O nome deve ser XAdES, com o nível BES selecionado (imposto ou não), o modo enveloped selecionado (imposto ou não), o algoritmo de assinatura dependerá do certificado, normalmente RSA, e o algoritmo de resumo SHA256.
- Deve haver um certificado com o identificador de requisição.
- Deve existir um usuário username@domain.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou usar o certificado pessoal do usuário.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES-BES-Enveloped-RSA-SHA256" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
<SignaturePlacement WhichDocument="ID-document-1"/>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64XML>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lc3NhZ2U+CiAgICA8dGV4
dD5IZWxsbyBXb3JsZDwvdGV4dD4KPC9tZXNzYWdlPgo=</Base64XML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
Na requisição, é possível ver a autenticação do usuário no cabeçalho SOAP e o perfil de assinatura selecionado no atributo Profile
da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver o KeyInfo
com a impressão digital do certificado para assinar, a tag SignatureForm
que especifica que o nível será BES, a tag SignaturePlacement
que especifica o modo enveloped e o documento XML para assinar codificado em Base64 dentro da tag Base64XML
.
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES-BES-Enveloped-RSA-SHA256" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<OptionalOutputs>
<dss:DocumentWithSignature xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:rt="urn:evolium:redtrust:dss:1.0:core:schema" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
<dss:Document ID="ID-document-1">
<dss:Base64XML>...</dss:Base64XML>
</dss:Document>
</dss:DocumentWithSignature>
</OptionalOutputs>
<SignatureObject>
<SignaturePtr WhichDocument="ID-document-1"/>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
A resposta mostra o status geral da requisição na tag ResultMajor
, uma tag SignaturePtr
que é uma referência ao local onde o documento está localizado na resposta e, finalmente, a tag Base64XML
que contém o documento com a assinatura incorporada codificada em Base64.
Assinatura XAdES BES Enveloping
Este exemplo descreve como fazer uma chamada ao serviço para gerar uma assinatura XAdES no nível BES e com o modo de envelopamento. O nível BES é o mais básico da assinatura avançada, conforme descrito na seção Níveis suportados. O modo de envelopamento incorpora o documento original à assinatura, conforme descrito na seção Modos soportados.
Requisitos
- Deve existir um perfil de assinatura no Redtrust definido para XAdES, cujo nome é XAdES, com nível BES selecionado (forçado ou não), modo enveloping selecionado (forçado ou não), algoritmo de assinatura dependerá do certificado, normalmente RSA e algoritmo de resumo SHA256.
- Deve existir um certificado com o identificador de requisição.
- Deve existir um usuário username@domain.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou deve ser um certificado pessoal do usuário.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES enveloping" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
<IncludeObject WhichDocument="ID-document-1"/>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<InlineXML>
<Document>
<Chapter>Text</Chapter>
</Document>
</InlineXML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
A requisição mostra a autenticação do usuário no cabeçalho SOAP, o perfil de assinatura selecionado no atributo Profile
da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver a KeyInfo
com a impressão digital do certificado para assinar, a tag SignatureForm
especificando que o nível será BES, a tag SignaturePlacement
especificando o modo enveloping e o documento XML para assinar diretamente incorporado dentro da tag InlineXML
.
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES enveloping" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3275">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
A resposta mostra o status geral da requisição na tag ResultMajor
e uma tag Base64Signature
que contém a assinatura com o documento codificado em Base64 incorporado.
Assinatura XAdES BES detached
Este exemplo descreve como fazer uma chamada ao serviço para gerar uma assinatura XAdES no nível BES e no modo desanexado. O nível BES é o mais básico da assinatura avançada, conforme descrito na seção Níveis suportados. O modo separado gera uma assinatura separada do documento original, conforme descrito na seção Modos suportados.
Requisitos
- Deve existir um perfil de assinatura no Redtrust definido para XAdES, cujo nome é XAdES, com nível BES selecionado (imposto ou não), modo destacado selecionado (imposto ou não), o algoritmo de assinatura dependerá do certificado, normalmente RSA e algoritmo de resumo SHA256.
- Deve haver um certificado com o identificador de requisição.
- Deve existir um usuário username@domain.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou deve ser um certificado pessoal do usuário.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES-BES-Detached" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<EscapedXML><Document><Chapter>Text</Chapter></Document></EscapedXML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
A requisição mostra a autenticação do usuário no cabeçalho SOAP, o perfil de assinatura selecionado no atributo Profile da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver o KeyInfo
com a impressão digital do certificado com o qual assinar, a tag SignatureForm
que especifica que o nível será BES e o documento XML a ser assinado escapou incorporado dentro da tag EscapedXML
. A ausência da tag SignaturePlacement
especifica que o modo será o forçado no perfil de assinatura ou, se não for forçado, o modo será detached.
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES-BES-Detached" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3275">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
A resposta mostra o status geral da requisição na tag ResultMajor
e uma tag Base64Signature que contém a assinatura codificada em Base64.
Assinatura XAdES T Enveloped
Este exemplo descreve como fazer uma chamada ao serviço para gerar uma assinatura XAdES no nível T e no modo enveloped. O nível T adiciona um carimbo de data/hora à assinatura, conforme descrito na seção Níveis suportados. O modo enveloped incorpora a assinatura ao documento original, conforme descrito na seção Modos soportados.
Requisitos
- Deve haver um perfil de assinatura no Redtrust definido para XAdES. O nome deve ser XAdES, com nível T selecionado (forçado ou não), modo enveloping selecionado (forçado ou não), algoritmo de assinatura dependerá do certificado, geralmente RSA e algoritmo de resumo SHA256, e pelo menos um TSP válido selecionado como primário ou secundário.
- Deve haver um certificado com o identificador de requisição, protegido por PIN.
- Deve haver um usuário nome de usuário@domínio.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou usar um certificado pessoal.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES-T-Forced-Enveloped-Forced-RSA-SHA256" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<AdditionalKeyInfo>
<KeyInfo Id="Pin" xmlns="http://www.w3.org/2000/09/xmldsig#">1234</KeyInfo>
</AdditionalKeyInfo>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:ES-T</SignatureForm>
<SignaturePlacement WhichDocument="ID-document-1"/>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64XML>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lc3NhZ2U+CiAgICA8dGV4dD5IZWxsbyBXb3JsZDwvdGV4dD4KPC9tZXNzYWdlPgo=</Base64XML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
A requisição mostra a autenticação do usuário no cabeçalho SOAP, o perfil de assinatura selecionado no atributo Profile da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver a tag KeyInfo
com a impressão digital do certificado para assinar e na tag AdditionalKeyInfo
as informações do PIN do certificado, a tag SignatureForm
que especifica que o nível será BES, a tag SignaturePlacement
que especifica o modo enveloped e o documento XML para assinar codificado em Base64 dentro da tag Base64XML.
Details
Resposta
:<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES-T-Forced-Enveloped-Forced-RSA-SHA256" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<OptionalOutputs>
<dss:DocumentWithSignature xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:rt="urn:evolium:redtrust:dss:1.0:core:schema" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
<dss:Document ID="ID-document-1">
<dss:Base64XML>...</dss:Base64XML>
</dss:Document>
</dss:DocumentWithSignature>
</OptionalOutputs>
<SignatureObject>
<SignaturePtr WhichDocument="ID-document-1"/>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
A resposta mostra o status geral da requisição na tag ResultMajor
, uma tag SignaturePtr
que é uma referência ao local onde o documento está localizado na resposta e, finalmente, a tag Base64XML que contém o documento com a assinatura incorporada codificada em Base64. A assinatura conterá um registro de data e hora, que a protege contra repúdio.
Assinatura InvoiceE 3.0 (XAdES EPES Enveloped)
Este exemplo descreve como fazer uma chamada ao serviço para gerar uma assinatura XAdES no nível EPES (com uma política de assinatura), com modo enveloped. O nível EPES é o mesmo que o nível BES, com a diferença de que uma política de assinatura foi definida, conforme descrito na seção Níveis suportados. O modo enveloped incorpora a assinatura dentro do documento original, conforme descrito na seção Modos soportados.
Requisitos
- Deve existir um perfil de assinatura no Redtrust definido para XAdES. O nome deve ser InvoiceE_3.0, com nível BES ou EPES selecionado forçado, modo enveloped selecionado forçado, algoritmo de assinatura dependerá do certificado, normalmente RSA, e algoritmo de resumo SHA256. Nas políticas, você deve incluir as seguintes informações:
- OID: http://www.facturae.es/ signature policy facturae format/signature-policy facturae-format v3_0.pdf
- Hash:
HQvPemjDslVpcNmaJPpbHzhdZ50
== Algoritmo de hash:HQvPemjDslVpcNmaJPpbHzhdZ50
= - Algoritmo de hash:
sha1
.
- Deve existir um certificado com o identificador de requisição.
- Deve existir um usuário username@domain.
- Deve haver uma política de uso que permita que o usuário use o certificado para assinar documentos ou para usar o certificado pessoal do usuário.
O documento a ser assinado deve ser um XML válido de acordo com o esquema facturae 3.0 definido no URL http://www.facturae.gob.es/formato/Versiones%20anteriores/B)%20Versi%C3%B3n%203.0/Facturae30.xml
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES-Facturae_3.0-EPES_Forced-Enveloped-RSA-SHA256" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:EPES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64XML>...</Base64XML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
A requisição mostra a autenticação do usuário no cabeçalho SOAP e o perfil de assinatura selecionado no atributo Profile da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver o KeyInfo
com a impressão digital do certificado a ser assinado e o documento XML a ser assinado codificado em Base64 dentro da tag Base64XML. Como o modo e o nível são forçados no perfil, não há necessidade de especificar nada na requisição.
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES-Facturae_3.0-EPES_Forced-Enveloped-RSA-SHA256" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3275">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
A resposta mostra o status geral da requisição na tag ResultMajor
, uma tag SignaturePtr
que é uma referência ao local onde o documento está localizado na resposta e, finalmente, a tag Base64XML que contém o documento com a assinatura incorporada codificada em Base64. Ao incluir a política de assinatura no perfil, a assinatura conterá essas informações e será válida como nota fiscal eletrônica 3.0, desde que o documento de entrada seja válido de acordo com o esquema. A Redtrust não valida o formato XML; é responsabilidade do solicitante validar o formato, se necessário, antes de enviar a requisição ao serviço.
Signature InvoiceE 3.2 (XAdES EPES Enveloped)
Este exemplo descreve como fazer uma chamada ao serviço para gerar uma assinatura XAdES no nível EPES (com uma política de assinatura), com o modo enveloped. O nível EPES é o mesmo que o nível BES, com a diferença de que uma política de assinatura foi definida, conforme descrito na seção Níveis suportados. O modo enveloped incorpora a assinatura ao documento original, conforme descrito na seção Modos soportados.
Requisitos
- Deve haver um perfil de assinatura no Redtrust definido para XAdES. O nome deve ser InvoiceE_3.1_3.2, com nível BES ou EPES selecionado (forçado ou não), modo enveloped selecionado (forçado ou não), algoritmo de assinatura dependerá do certificado, geralmente RSA, e algoritmo de digestão SHA256. Em Policies, você deve incluir as seguintes informações:
- OID:http://www.facturae.es/politica_de_firma_formato_facturae/politica_de_firma_formato_facturae_v3_1.pdf
Hash:Ohixl6upD6av8N7pEvDABhEL6hM
== * Algoritmo de hash:Ohixl6upD6av8N7pEvDABhEL6hM
== - Algoritmo de hash:
sha1
.
- OID:http://www.facturae.es/politica_de_firma_formato_facturae/politica_de_firma_formato_facturae_v3_1.pdf
- Deve existir um certificado com o identificador de requisição.
- Deve existir um usuário username@domain.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou usar um certificado pessoal.
O documento a ser assinado deve ser um XML válido de acordo com o esquema facturae 3.0 definido no URL http://www.facturae.gob.es/formato/Versiones/Facturaev3_2.xml.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES-Facturae_3.1_3.2-EPES-Forced-Enveloped-Forced-RSA-SHA2" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignaturePlacement WhichDocument="ID-document-1"/>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64XML>...</Base64XML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
A requisição mostra a autenticação do usuário no cabeçalho SOAP e o perfil de assinatura selecionado no atributo Profile da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver o KeyInfo
com a impressão digital do certificado a ser assinado e o documento XML a ser assinado codificado em Base64 dentro da tag Base64XML. Como o modo e o nível são forçados no perfil, não há necessidade de especificar nada na requisição.
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES-Facturae_3.1_3.2-EPES-Forced-Enveloped-Forced-RSA-SHA2" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<OptionalOutputs>
<dss:DocumentWithSignature xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:rt="urn:evolium:redtrust:dss:1.0:core:schema" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
<dss:Document ID="ID-document-1">
<dss:Base64XML>...</dss:Base64XML>
</dss:Document>
</dss:DocumentWithSignature>
</OptionalOutputs>
<SignatureObject>
<SignaturePtr WhichDocument="ID-document-1"/>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
A resposta mostra o status geral da requisição na tag ResultMajor
, uma tag SignaturePtr
que é uma referência ao local onde o documento está localizado na resposta e, finalmente, a tag Base64XML que contém o documento com a assinatura incorporada codificada em Base64. Ao incluir a política de assinatura no perfil, a assinatura conterá essas informações e será válida como uma fatura eletrônica, desde que o documento de entrada seja válido de acordo com o esquema. A Redtrust não valida a formatação XML; é sua responsabilidade validar a formatação antes de enviar a requisição ao serviço.
CAdES (Assinatura eletrônica avançada do CMS)
O CAdES (CMS Advanced Electronic Signature, Assinatura eletrônica avançada do CMS) é um conjunto de extensões do CMS que o tornam adequado para assinatura eletrônica, de acordo com a diretiva 1999/93/EC da União Europeia. Assim como o XAdES, um dos pontos fortes do CAdES é que os documentos assinados eletronicamente usando o CAdES podem permanecer válidos por longos períodos de tempo.
Veja abaixo alguns exemplos de uso do serviço DSS da Redtrust para assinar documentos usando o CAdES.
Assinatura CAdES BES enveloping
Este exemplo descreve como fazer uma chamada ao serviço para gerar uma assinatura CAdES no nível BES e com o modo de envelopamento. O nível BES é o mais básico da assinatura avançada, conforme descrito na seção Níveis suportados. O modo de envelopamento incorpora o documento original à assinatura, conforme descrito na seção `Modos soportados.
Requisitos
- Deve existir um perfil de assinatura no Redtrust definido para CAdES. O nome deve ser CAdES, com o nível BES selecionado (forçado ou não), o modo de envelopamento selecionado (forçado ou não), o algoritmo de assinatura dependerá do certificado, normalmente RSA, e o algoritmo de resumo SHA256.
- Deve haver um certificado com o identificador de requisição.
- Deve existir um usuário username@domain.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou usar o certificado pessoal do usuário.
Details
Requisição
:<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="CAdES-BES-Enveloping" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<IncludeEContent/>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="text/plain">RmljaGVybyBkZSBwcnVlYmEgYSBmaXJtYXI=</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
A requisição mostra a autenticação do usuário no cabeçalho SOAP e o perfil de assinatura selecionado no atributo Profile da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver o KeyInfo
com a impressão digital do certificado para assinar, a tag SignatureForm
especificando que o nível será BES, a tag IncludeEContent
especificando que o modo deve ser enveloping e o documento XML para assinar codificado em Base64 dentro da tag Base64Data.
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="CAdES-BES-Enveloping" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
A resposta mostra o status geral da requisição na tag ResultMajor
, uma tag Base64Signature que contém a assinatura com o documento codificado em Base64 incorporado.
Assinatura CAdES BES detached
Este exemplo descreve como fazer uma chamada ao serviço para gerar uma assinatura CAdES no nível BES e no modo separado. O nível BES é o mais básico da assinatura avançada, conforme descrito na seção Níveis suportados. O modo desanexado gera uma assinatura separada do documento, conforme descrito na seção Modos suportados.
Requisitos
- Deve existir um perfil de assinatura no Redtrust definido para CAdES. O nome deve ser CAdES, com o nível BES selecionado (imposto ou não), o modo Desanexado selecionado (imposto ou não), o algoritmo de assinatura dependerá do certificado, normalmente RSA, e o algoritmo de resumo SHA256.
- Deve existir um certificado com o identificador de requisição.
- Deve existir um usuário username@domain.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou usar o certificado pessoal do usuário.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="CAdES-BES-Detached" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="text/plain">RmljaGVybyBkZSBwcnVlYmEgYSBmaXJtYXI=</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
A requisição mostra a autenticação do usuário no cabeçalho SOAP e o perfil de assinatura selecionado no atributo Profile da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver o KeyInfo
com a impressão digital do certificado para assinar, a tag SignatureForm
que especifica que o nível será BES e o documento XML para assinar codificado em Base64 dentro da tag Base64Data. A ausência da tag IncludeEContent
especifica que o modo forçado é usado no perfil ou se o modo desvinculado não é forçado.
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="CAdES-BES-Detached" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
A resposta mostra o status geral da requisição na tag ResultMajor
, uma tag Base64Signature que contém a assinatura codificada em Base64.
PAdES
O PAdES (PDF Advanced Electronic Signature) é um conjunto de extensões para PDF e ISO 32000-1 que o torna adequado para assinatura eletrônica, de acordo com a diretiva 1999/93/EC da União Europeia.
Alguns exemplos do uso do serviço DSS da Redtrust para assinar documentos usando PAdES serão mostrados a seguir.
Assinatura de PDF do BES
Este exemplo descreve como fazer uma chamada para o serviço para gerar uma assinatura PAdES no nível BES. O nível BES é o mais básico da assinatura avançada, conforme descrito na seção Níveis suportados. O PAdES só é compatível com o modo enveloped, conforme descrito na seção Modos compatíveis.
Requisitos
- Deve haver um perfil de assinatura no Redtrust definido para o PAdES. O nome deve ser PAdES, com nível BES selecionado (forçado ou não), modo enveloped. O algoritmo de assinatura dependerá do certificado, normalmente RSA, e o algoritmo de digestão SHA256.
- Deve haver um certificado com o identificador de requisição.
- Deve haver um usuário nome de usuário@domínio.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou usar o certificado pessoal do usuário.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="PAdES_BES" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<Language>en-US</Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="application/pdf">...</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
A requisição mostra a autenticação do usuário no cabeçalho SOAP e o perfil de assinatura selecionado no atributo Profile da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver o KeyInfo
com a impressão digital do certificado para assinar, a tag SignatureForm
que especifica que o nível será BES e o documento PDF para assinar codificado em Base64 dentro da tag Base64Data (o atributo MimeType=“application/pdf”
especifica que o conteúdo da tag corresponde a um PDF).
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="PAdES_BES" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
A resposta mostra o status geral da requisição na tag ResultMajor
, uma tag Base64Signature que contém o arquivo PDF com a assinatura codificada em Base64.
Assinatura de PDF do BES visível
Este exemplo descreve como fazer uma chamada ao serviço para gerar uma assinatura PAdES no nível BES e com representação visual da assinatura. O nível BES é o mais básico da assinatura avançada, conforme descrito na seção Níveis suportados. O PAdES suporta apenas o modo enveloped, conforme descrito na seção Modos suportados.
Requisitos
- Deve haver um perfil de assinatura no Redtrust definido para o PAdES. O nome deve ser PAdES, com o nível BES selecionado (forçado ou não), o modo enveloped, o algoritmo de assinatura dependerá do certificado, normalmente RSA, e o algoritmo de resumo SHA256.
- Deve haver um certificado com o identificador de requisição.
- Deve existir um usuário username@domain.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou usar o certificado pessoal do usuário.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="PAdES_BES" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<q1:VisibleSignatureConfiguration xmlns:q1="urn:oasis:names:tc:dssx:1.0:profiles:VisibleSignatures:schema#">
<q1:VisibleSignaturePolicy>GeneralPolicy</q1:VisibleSignaturePolicy>
<q1:VisibleSignaturePosition d4p1:type="q1:PixelVisibleSignaturePositionType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:PageNumber>1</q1:PageNumber>
<q1:x>30</q1:x>
<q1:y>30</q1:y>
<q1:Width>200</q1:Width>
<q1:Height>60</q1:Height>
</q1:VisibleSignaturePosition>
<q1:VisibleSignatureItemsConfiguration>
<q1:VisibleSignatureItem>
<q1:ItemName>CustomText</q1:ItemName>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureReason</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Razón de firma</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureProductionPlace</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Barcelona</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerContactInfo</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Usuario de Redtrust (usuario.Redtrust@evolium.com)</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
</q1:VisibleSignatureItemsConfiguration>
</q1:VisibleSignatureConfiguration>
<Language>en-US</Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="application/pdf">...</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
A requisição mostra a autenticação do usuário no cabeçalho SOAP e o perfil de assinatura selecionado no atributo Profile da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver a KeyInfo
com a impressão digital do certificado para assinar, a tag SignatureForm
que especifica que o nível será BES e o documento PDF para assinar codificado em Base64 dentro da tag Base64Data (o atributo MimeType=“application/pdf”
especifica que o conteúdo da tag corresponde a um PDF).
A parte da representação visual da assinatura está localizada dentro da tag VisibleSignatureConfiguration
e contém:
Tag | Description |
---|---|
VisibleSignaturePolicy | Contém o texto GeneralPolicy, que é a única política de representação visual aceita pela Redtrust. |
VisibleSignaturePosition | Especifica o local (contando a partir do canto inferior esquerdo) e o tamanho em pixels da exibição. |
VisibleSignatureItemsConfiguration | Contém uma sequência de elementos que indicam a aparência da assinatura visual; nesse caso, um motivo (SignatureReason ), um local de assinatura (SignatureProductionPlace ), informações de contato do signatário (SignerContactInfo ) e um item CustomText que indica que a representação visual da assinatura conterá um texto descritivo do certificado, ou seja, o conteúdo de SubjectName . |
A assinatura teria a aparência mostrada na representação a seguir:
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="PAdES_BES" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
A resposta mostra o status geral da requisição na tag ResultMajor
, uma tag Base64Signature que contém o arquivo PDF codificado em Base64 com a assinatura.
Frima PDF BES Visible com imagem de assinatura
Este exemplo descreve como fazer uma chamada ao serviço para gerar uma assinatura PAdES no nível BES e com representação visual da assinatura com imagem. O nível BES é o mais básico da assinatura avançada, conforme descrito na seção Níveis suportados. O PAdES suporta apenas o modo enveloped, conforme descrito na seção Modos suportados.
Requisitos
- Deve haver um perfil de assinatura no Redtrust definido para o PAdES. O nome deve ser PAdES, com o nível BES selecionado (forçado ou não), o modo enveloped, o algoritmo de assinatura dependerá do certificado, normalmente RSA, e o algoritmo de resumo SHA256.
- Deve haver um certificado com o identificador de requisição.
- Deve existir um usuário username@domain.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou usar o certificado pessoal do usuário.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="PAdES_BES" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<q1:VisibleSignatureConfiguration xmlns:q1="urn:oasis:names:tc:dssx:1.0:profiles:VisibleSignatures:schema#">
<q1:VisibleSignaturePolicy>GeneralPolicy</q1:VisibleSignaturePolicy>
<q1:VisibleSignaturePosition d4p1:type="q1:PixelVisibleSignaturePositionType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:PageNumber>1</q1:PageNumber>
<q1:x>30</q1:x>
<q1:y>20</q1:y>
<q1:Width>200</q1:Width>
<q1:Height>75</q1:Height>
</q1:VisibleSignaturePosition>
<q1:VisibleSignatureItemsConfiguration>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureReason</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Razón de firma</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureProductionPlace</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Barcelona</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>CustomText</q1:ItemName>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerContactInfo</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Usuario Demo (user@demo.com)</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerImage</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueURIType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Miguel_de_Cervantes_signature.svg/1280px-Miguel_de_Cervantes_signature.svg.png</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
</q1:VisibleSignatureItemsConfiguration>
</q1:VisibleSignatureConfiguration>
<Language>en-US</Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="application/pdf"><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="PAdES_BES" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<q1:VisibleSignatureConfiguration xmlns:q1="urn:oasis:names:tc:dssx:1.0:profiles:VisibleSignatures:schema#">
<q1:VisibleSignaturePolicy>GeneralPolicy</q1:VisibleSignaturePolicy>
<q1:VisibleSignaturePosition d4p1:type="q1:PixelVisibleSignaturePositionType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:PageNumber>1</q1:PageNumber>
<q1:x>30</q1:x>
<q1:y>20</q1:y>
<q1:Width>200</q1:Width>
<q1:Height>75</q1:Height>
</q1:VisibleSignaturePosition>
<q1:VisibleSignatureItemsConfiguration>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureReason</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Razón de firma</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureProductionPlace</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Barcelona</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>CustomText</q1:ItemName>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerContactInfo</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Usuario Demo (user@demo.com)</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerImage</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueURIType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Miguel_de_Cervantes_signature.svg/1280px-Miguel_de_Cervantes_signature.svg.png</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
</q1:VisibleSignatureItemsConfiguration>
</q1:VisibleSignatureConfiguration>
<Language>en-US</Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="application/pdf">...</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
Na requisição, é possível ver a autenticação do usuário no cabeçalho SOAP e o perfil de assinatura selecionado no atributo Profile
da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver o KeyInfo
com a impressão digital certificada para assinar, a tag SignatureForm
que especifica que o nível será BES e o documento PDF para assinar codificado em Base64 dentro da tag Base64Data (o atributo MimeType=“application/pdf”
especifica que o conteúdo da tag corresponde a um PDF).
A parte da representação visual da assinatura está localizada dentro da tag VisibleSignatureConfiguration
e contém:
Tag | Descrição |
---|---|
VisibleSignaturePolicy | Com o texto GeneralPolicy , que é a única política de exibição visual aceita pela Redtrust. |
VisibleSignaturePosition | Especifica o local (contando a partir do canto inferior esquerdo) e o tamanho em pixels da representação visual e uma tag VisibleSignatureItemsConfiguration com uma sequência de itens que indicam como a assinatura visual deve ser, nesse caso, um motivo (SignatureReason ) é adicionado, um local onde foi assinada (SignatureProductionPlace ), uma informação de contato do signatário (SignerContactInfo ), um item CustomText indicando que a representação visual da assinatura conterá um texto descritivo do certificado e um SignerImage indicando onde está localizada a imagem a ser incorporada como assinatura visual. |
Nesse caso, ao especificar CustomText
e SignerImage
, o espaço onde a assinatura aparecerá será compartilhado entre o SubjectName
do certificado e a imagem, conforme mostrado na imagem a seguir:
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="PAdES_BES" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
A resposta mostra o status geral da requisição na tag ResultMajor
, uma tag Base64Signature que contém o arquivo PDF com a assinatura codificada em Base64.
Assinatura de PDF LTV
Este exemplo descreve como fazer uma chamada ao serviço para gerar uma assinatura PAdES no nível LTV. O nível LTV é o formato de assinatura de longa duração, permitindo sua validação no futuro, conforme descrito na seção Níveis suportados. O PAdES só é compatível com o modo enveloped, conforme descrito na seção Modos soportados.
Requisitos
- Deve haver um perfil de assinatura no Redtrust definido para o PAdES. O nome deve ser PAdES, com nível LTV selecionado (forçado ou não), modo enveloped, o algoritmo de assinatura dependerá do certificado, normalmente RSA, algoritmo de resumo SHA256 e pelo menos um TSP válido selecionado como primário ou secundário.
- Deve existir um certificado com o identificador de requisição.
- Deve existir um usuário username@domain.
- Deve haver uma política de uso que permita ao usuário usar o certificado para assinar documentos ou usar o certificado pessoal do usuário.
Requisição
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="PAdES-LTV" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<q1:VisibleSignatureConfiguration xmlns:q1="urn:oasis:names:tc:dssx:1.0:profiles:VisibleSignatures:schema#">
<q1:VisibleSignaturePolicy>GeneralPolicy</q1:VisibleSignaturePolicy>
<q1:VisibleSignaturePosition d4p1:type="q1:PixelVisibleSignaturePositionType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:PageNumber>1</q1:PageNumber>
<q1:x>30</q1:x>
<q1:y>20</q1:y>
<q1:Width>200</q1:Width>
<q1:Height>75</q1:Height>
</q1:VisibleSignaturePosition>
<q1:VisibleSignatureItemsConfiguration>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureReason</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Razón de firma</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureProductionPlace</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Barcelona</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>CustomText</q1:ItemName>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerContactInfo</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Usuario Demo (user@demo.com)</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerImage</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueImageType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<Base64Data>...</Base64Data>
</q1:ItemValue>
</q1:VisibleSignatureItem>
</q1:VisibleSignatureItemsConfiguration>
</q1:VisibleSignatureConfiguration>
<Language>en-US</Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:PAdES:forms:LTV</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="application/pdf">...</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>
Na requisição, é possível ver a autenticação do usuário no cabeçalho SOAP e o perfil de assinatura selecionado no atributo Profile da tag SignRequest
que se refere ao perfil definido no Redtrust. Você também pode ver o KeyInfo
com a impressão digital certificada para assinar, a tag SignatureForm
que especifica que o nível será LTV e o documento PDF para assinar codificado em Base64 dentro da tag Base64Data (o atributo MimeType=“application/pdf”
especifica que o conteúdo da tag corresponde a um PDF).
A parte da representação visual da assinatura está localizada dentro da tag VisibleSignatureConfiguration
e contém:
Tag | Description |
---|---|
VisibleSignaturePolicy | Com o texto GeneralPolicy , que é a única política de representação visual aceita pela Redtrust. |
VisibleSignaturePosition | Especifica o local (contando a partir do canto inferior esquerdo) e o tamanho em pixels da representação visual. |
VisibleSignatureItemsConfiguration | Inclui uma sequência de elementos que indicam como a assinatura visual deve ser, neste caso, um motivo (SignatureReason ), um local onde foi assinada (SignatureProductionPlace ), uma informação de contato do signatário (SignatureProductionPlace ) e uma informação de contato do signatário (SignatureProductionPlace ), uma informação de contato do signatário (SignerContactInfo ), um item CustomText indicando que a representação visual da assinatura conterá um texto descritivo do certificado e um SignerImage contendo a imagem a ser incorporada como uma assinatura visual codificada em Base64. |
Resposta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="PAdES-LTV" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>
Na resposta, você pode ver o status geral da requisição na tag ResultMajor
, uma tag Base64Signature que contém o arquivo PDF com a assinatura codificada em Base64.
Se você abrir o arquivo de resultado com o Adobe Acrobat Reader DC, poderá verificar a assinatura no painel de assinaturas.