Como muitos outros países, a Rússia usa certificados x509 emitidos por autoridades de certificação russas autorizadas para gerenciamento oficial de documentos eletrônicos. E, ao contrário de muitos outros países, ele usa suas próprias cifras.
Durante muito tempo, eu queria automatizar a verificação das assinaturas das respostas das autoridades (eu me correspondo muito) e a verificação das “descargas” de Roskomnadzor para autenticidade (pela natureza da atividade pública). O maior problema foi obter certificados intermediários da cadeia. Porque havia um arquivo Excel arrastado de CAs raiz no site do Ministério das Comunicações e é tudo. E os intermediários tiveram que ser pesquisados nos sites das respectivas CAs. A vida é uma dor.
O que são "certificados intermediários" . Deixe-me lembrá-lo como funciona. Suponha que desejamos verificar alguma carta assinada. A carta é assinada com uma chave. Há um certificado que certifica essa chave. O certificado foi emitido por alguém e também assinado por alguma chave com o certificado anexado. E esse certificado é exatamente o mesmo. E assim por diante até o momento em que o certificado é emitido para si mesmo. Ao checar, temos (trazido, entregue a partir do pacote, recebemos uma unidade flash) um determinado conjunto desses certificados finais, que acreditamos. Acreditamos porque acreditamos em quem os deu para nós. No mundo da web, confiamos no navegador e em seu conjunto de certificados raiz. No mundo da Web, ao se conectar via HTTPS, os certificados intermediários também são transferidos do servidor para o cliente. Portanto, no mundo da web, sempre temos toda a cadeia.
De repente (não sei exatamente quando) e imperceptivelmente no site do Serviço de Estado, apareceu um link:
e-trust.gosuslugi.ru/CAEscrevi às pressas
um programa que transforma um arquivo XML com uma lista de CAs e certificados deste site no formato PEM familiar.
Depois automatizei e obtive um
repositório de certificados constantemente mantido na forma familiar ao mundo * NIX.
Criptografia GOST
A criptografia GOST é suportada no LibreSSL; não lembro qual versão. Mas no Alpine Linux a partir do 3.5 já é suportado. Com o OpenSSL, as coisas ficam mais complicadas. A criptografia GOST vem com o OpenSSL da versão 1.0.0 para a versão 1.0.2, inclusive. Mas, por exemplo, o CentOS não possui criptografia GOST. Usuários do CentOS devem sofrer. Para Debian, Mint, Ubuntu com OpenSSL versão 1.1.0 e superior, é necessária a instalação do pacote libengine-gost-openssl1.1, suportada pelo entusiasta de criptografia Vartan Khachaturov (a propósito, você pode ajudá-lo).
Bem, em 2018, temos o Docker e, no Alpine Linux, como mencionei, tudo funciona.
Como usá-lo
Pequenos exemplos para verificar a "descarga" de Roskomnadzor com uma assinatura ininterrupta. O arquivo de "upload" é dump.xml, a assinatura sem marcação é dump.xml.sig. Até eu os verifiquei antes apenas na integridade da assinatura, mas não na correspondência com a fonte.
Usando o OpenSSL:
git clone https://github.com/schors/gost-russian-ca.git ./ openssl smime -verify -engine gost \ -CAfile gost-russian-ca.git/certs/ca-certificates.pem \ -in dump.xml.sig -inform DER -content dump.xml -out /dev/null
Usando o LibreSSL:
git clone https://github.com/schors/gost-russian-ca.git ./ openssl smime -verify -CAfile gost-russian-ca.git/certs/ca-certificates.pem \ -in dump.xml.sig -inform DER -content dump.xml -out /dev/null
E, é claro, você pode usar o utilitário c_rehash na pasta
certs e, em seguida, usar a opção -CAdir em vez de -CAfile.
E a partir de agora, você não poderá usar o site do Serviço de Estado, Contour e programas estranhos como o CryptoPro para a simples tarefa de verificar uma assinatura. E o mais importante, agora é possível automatizar.