
Na
primeira parte de nossa história, mostramos como, tendo em mãos um token criptográfico com suporte para criptografia russa, crie uma solicitação de certificado, obtenha e instale um certificado para um token, verifique a assinatura eletrônica do certificado e sua validade na lista de certificados revogados (CRL), exclua o certificado de token, alterar etiquetas etc.
Depois de criar uma solicitação de certificado (gerar um par de chaves), receber um certificado na CA e defini-lo como um token, agora nada impede o uso de um certificado pessoal (certificado com um par de chaves) para assinatura eletrônica de documentos. Vamos começar. Primeiro, lembre-se de onde o utilitário cryptoarmp11 está localizado.
Em seguida, execute o utilitário e clique no botão "1. Assine o documento":

Selecionamos o arquivo com o documento que queremos assinar e decidimos no diretório em que salvaremos o arquivo com a assinatura (o final do nome desse arquivo será .p7s). Decidimos se o próprio documento assinado será armazenado no corpo da assinatura ou não (assinatura anexada / desconectada). E o mais significativo, determinamos o formato da assinatura. Na minha opinião, você pode aderir às seguintes regras. Se esse é um
fluxo interno de documentos corporativos, onde é realizado um controle rigoroso sobre os computadores, basta usar o formato de assinatura
CAdes -BES, que inclui, além da assinatura matemática, de acordo com GOST R 34.10-2012 e o tempo de geração de assinaturas (campo Hora Atual). Se não houver controle estrito sobre os computadores (todos podem definir qualquer hora no computador) e a data de assinatura do documento for importante, você deverá usar o formato CAdes-T ou CAdes-XLT1. Ao usar os formatos CAdes-T e CAdes-XLT1, o lado externo está envolvido (semelhante à atração de um natário) - um servidor de carimbo de data / hora. No formato CAdes-T, a resposta do servidor de carimbo de data / hora é adicionada ao arquivo com assinatura eletrônica (consulte o campo "Servidor TSP"). Esta resposta (e este também é um documento no formato PKCS # 7, assinado pelo servidor TSP) permite determinar em que momento o documento foi assinado. Deve-se ter em mente que geralmente apenas uma assinatura matemática é verificada e a validade da própria assinatura por carimbos de data / hora é omitida. Para verificar a validade de uma assinatura, é claro, é necessária uma validação de certificados. E assim, para simplificar este trabalho, o formato de assinatura CAdes-XLT1 implica a inclusão no arquivo de assinatura de todas as evidências de validade da assinatura no momento de sua criação. Estes são certificados, incluindo certificados de CA, servidores de carimbo de data / hora, servidores ocsp, bem como listas de certificados e respostas revogados de servidores OCSP. Nós não vamos insistir nisso. Quem quer encontrar a literatura apropriada.
Então, decidimos o formato da assinatura e clicamos no botão "Assinar o documento". Em seguida, precisamos inserir outro código PIN para o token; um aviso será exibido sobre o início da formação da assinatura e a necessidade de ser paciente e, finalmente, a assinatura será criada:

O que é necessário para criar uma assinatura? Esses, é claro, são os próprios cálculos matemáticos e a coleta de vários dados (certificados, CRLs, respostas do servidor OCSP, carimbos de data e hora). Tudo, a assinatura é criada. Após o recebimento do certificado na CA, não deixe de descobrir o endereço do servidor de carimbo de data / hora da sua CA. Se links dos certificados das autoridades de certificação (
cadeia de certificados), das listas de certificados revogados e do servidor OCSP forem obtidos dos certificados, o endereço do servidor de carimbo de data / hora deverá ser inserido manualmente (campo "Servidor TSP").
Como garantir que a assinatura seja criada corretamente e o documento possa ser transferido para o caso. Na Internet, você pode encontrar vários sites para verificar a assinatura. Alguns deles verificam apenas a assinatura desconectada, outros verificam tudo e informam bem:

Mas, em ambos os casos, isso não garante que sua assinatura seja aceita na organização em que você apresentar o documento assinado, por exemplo, no site do Serviço de Estado. Isso se deve ao fato de que, de diferentes maneiras, é possível armazenar e verificar evidências da validade da assinatura no formato XLT1. Assim, por exemplo, no site do Serviço de Estado, é necessário que a evidência da validade do certificado do servidor de carimbo de data / hora seja armazenada na assinatura recebida do servidor. E se eles não estiverem lá, apesar de estarem presentes na assinatura do documento, a assinatura no site dos Serviços de Estado será invalidada. Está tudo bem com a nossa assinatura:

Vamos para a página “2. Trabalhando com ES (PKCS7)” e selecionamos imediatamente o arquivo com a assinatura criada:

Ao carregar uma assinatura, o utilitário preenche os campos apropriados na janela principal. A captura de tela exibe isso bem. Mostra quando a assinatura foi gerada no computador do usuário (campo "Data de assinatura:"), quando esta data foi verificada no servidor de carimbo de data / hora (campo "Data de recebimento do carimbo de hora") e quando todas as evidências de validade foram coletadas (campo "Data de aprovação do rótulo" hora ").
Quais operações podem ser executadas em uma assinatura também são claras. De maior interesse aqui é a adição de uma assinatura a um documento assinado anteriormente. Para fazer isso, basta selecionar um certificado para adicionar uma nova assinatura (análoga à visualização de documentos) e não se esqueça de escolher um servidor TSP:

E se você olhar quem assinou o documento, agora existem dois signatários. E as duas assinaturas foram verificadas com sucesso no site de serviços públicos:

Na minha opinião, o utilitário corresponde às aspirações de
ter um utilitário para assinar documentos, tendo em mãos "certificados em tokens com uma chave irrecuperável para que eles possam ler tudo".
No entanto, decidimos ir além e incluir neste utilitário uma página para trabalhar com o contêiner
PKCS # 12 , que está se tornando cada vez mais popular. E agora, para assinar um documento, você precisa do token PKCS # 11 e de uma biblioteca para ele, ao usar o PKCS # 12, você precisará apenas do próprio contêiner. E, claro, o utilitário sobre o qual falamos hoje. Mas esse utilitário é absolutamente auto-suficiente e, ao contrário de vários CSPs, não corrige nenhum kernel e funciona em qualquer plataforma. Portanto, passamos
para a terceira parte .