Infraestrutura de chave pública: Utilitário de geração de solicitação de certificado qualificado

imagem Um dos objetos centrais da infra-estrutura de chave pública (PKI / PKI), juntamente com o par de chaves, é um certificado, que hoje é realmente um análogo de um passaporte civil.

Com um certificado em mãos, um cidadão pode obter acesso ao portal dos Serviços de Estado, pagar impostos, proteger seu email , assinar e criptografar documentos e muito mais.

Um certificado, como um passaporte , é emitido com base em um pedido e no fornecimento de vários documentos. A lista de documentos para a obtenção de um certificado está em qualquer centro de certificação credenciado pelo Ministério das Comunicações (o novo nome é Ministério do Desenvolvimento Digital, Telecomunicações e Comunicações de Massa). O pedido de passaporte tem a assinatura manuscrita do requerente. Após o recebimento do passaporte, o solicitante colocará sua assinatura no passaporte, que será certificado pelo funcionário do escritório de passaportes e pelo carimbo oficial. A foto e a capacidade do proprietário de reproduzir sua assinatura e permitir que ele seja identificado como o proprietário de um passaporte específico.

Um esquema semelhante é usado para obter um certificado de uma chave de verificação de assinatura eletrônica (SKEPEP). Primeiro, um cidadão que deseja receber um certificado deve adquirir a "habilidade" de apor sua própria assinatura. Essa "habilidade" é realizada através do recebimento pelo solicitante de um par de chaves que contém a chave pública ou chave de verificação de assinatura eletrônica (KEPP) e a chave privada ou chave de assinatura eletrônica, que, de fato, permitem gerar uma assinatura eletrônica e assinar um documento eletrônico. A identificação de uma assinatura eletrônica em um documento é realizada de acordo com o seguinte algoritmo. A partir do certificado, é determinado por qual chave (GOST R 34.10-2001, GOST R 34.10-2012 com um comprimento de chave de 64 ou 128 bytes) o documento foi assinado. O tipo de chave determina o algoritmo de hash usado ao assinar o documento. Pode ser GOST R 34.11-94 ou GOST R 34.11-2012 com um comprimento de hash de 256 ou 512 bits. De acordo com o algoritmo selecionado, o hash do documento de origem é considerado. E pelo valor do hash calculado do documento de origem, chave pública (KEPP) e seus parâmetros (tudo isso é retirado do certificado SKEPEP), a autenticidade da assinatura eletrônica no documento é verificada.

Para criar um par de chaves, são utilizados vários meios de proteção de informações criptográficas (CPSI) que suportam algoritmos criptográficos GOST R 34.10-2001 e GOST R 34.10-2012. Deve-se lembrar que o uso do esquema de assinatura GOST R 34.10-2001 para gerar uma assinatura após 31 de dezembro de 2018 não é permitido! As ferramentas de proteção de informações criptográficas que implementam vários algoritmos e protocolos criptográficos podem ser tanto software quanto hardware. O acesso à proteção de informações criptográficas é realizado por meio de interfaces criptográficas. A grande maioria dos sistemas de proteção de informações criptográficas certificados com criptografia russa suporta a interface criptográfica universal PKCS # 11 , que é suportada em todas as plataformas, ou a interface Microsoft CSP e CryptoAPI nas plataformas MS Windows (a seguir denominada MS CSP). São essas duas interfaces criptográficas que são suportadas, por exemplo, pelo portal de Serviços de Estado . Esses dois tipos de proteção de informações criptográficas serão considerados ainda mais:


Deve-se ter em mente que, se houver um desejo ou necessidade de trabalhar com uma assinatura eletrônica, não apenas na plataforma Windows, mas também em outras plataformas (Linux, macOS etc.), os tokens PKCS # 11 com suporte à criptografia russa devem ser escolhidos.

Além da função principal relacionada à geração de uma solicitação, o utilitário fornece funções para trabalhar com tokens e certificados:


Campo combinado (caixa de combinação) “Selecionar token:” na janela principal contém uma lista de ferramentas de proteção de informações de criptografia disponíveis para gerar um par de chaves. Se o utilitário de geração de solicitação estiver em execução na plataforma Windows e os provedores de criptografia CSP com suporte para criptografia russa estiverem instalados, o token MS_CSP virtual será definido na lista de ferramentas de proteção de informações criptográficas disponíveis (“Selecione um token:”). Portanto, se houver um desejo de usar o provedor de criptografia MS CSP, ele deverá ser instalado no sistema antes de iniciar o utilitário.

Para adicionar suporte ao novo token PKCS # 11, basta selecionar o item de menu "Gerenciamento de token-> Adicionar token". Adicionar suporte para o novo token consiste em escolher a biblioteca PKCS # 11 para o tipo de plug-in de tokens / cartões inteligentes e definir um nome conveniente (apelido). Ao adicionar suporte para um novo tipo de tokens (assim como ao iniciar o utilitário, se o suporte ao token foi adicionado anteriormente) a um token conectado (inserido), será necessário um código PIN para acessá-lo:


Mas isso acontecerá apenas se o token não estiver apenas conectado, mas também em condições de trabalho, ou seja, inicializado. Verifique o token e, se necessário, inicialize-o, altere o código PIN para acessá-lo, etc. convenientemente com o utilitário p11conf :


Ao selecionar o item "Gerenciamento de token-> Mecanismos de token", é possível ver os mecanismos criptográficos de um token específico, por exemplo, existe suporte para o algoritmo GOST R 34.10-2012. Para o token virtual MS_CSP, todos os provedores de CSP com suporte para algoritmos GOST e os mecanismos suportados por eles estão listados:


Se o token selecionado não suportar o tipo de par de chaves selecionado, uma mensagem correspondente será exibida:


Antes de prosseguir diretamente para o preenchimento dos campos de solicitação, é necessário decidir para que finalidade um certificado é necessário, ou seja, especifique a "Função do certificado". Hoje, esses papéis acumularam mais de uma dúzia:


E cada função está associada a muitos OIDs diferentes incluídos no certificado. Assim, por exemplo, para acessar o portal de serviços públicos, são necessários os seguintes oids:

{} {clientAuth, emailProtection, 1.3.6.1.4.1.311.20.2.2, 1.2.643.100.2.1, 1.2.643.2.2.34.6, 1.3.6.1.5.5.7.3.2, 1.3.6.1.5.5.7.3.4, 1.2.643.5.1.24.2.1.3, 1.2.643.6.14, 1.2.643.3.215.4, 1.2.643.3.215.5, 1.2.643.3.215.6, 1.2.643.3.215.7, 1.2.643.3.215.8, 1.2.643.3.215.9, 1.2.643.3.215.11, 1.2.643.3.215.12, 1.2.643.3.215.13, 1.3.6.1.4.1.40870.1.1.1, 1.2.643.2.64.1.1.1, 1.2.643.3.5.10.2.12, 1.2.643.6.3.2, 1.2.643.5.1.24.2.46, 1.2.643.6.45.1.1.1, 1.2.643.5.1.24.2.30, 1.2.643.5.1.28.2, 1.2.643.5.1.28.3, 1.2.643.3.202.1.8} 

OIDs para outras funções (por exemplo, "Gazprombank Site", "Alcohol Consumer" etc.) podem ser encontrados no código-fonte do utilitário (variável oid_roles_bad, operador:

 set oid_roses_bad {. . .} 
)
A presença de tantos oids é difícil de entender. Estamos falando de certificados qualificados, nos quais existem oid TIN, PSRN, SNILS etc., que identificam exclusivamente um indivíduo e uma entidade legal e, ao que parece, isso seria suficiente para acessar o portal de serviços do Estado e outros também Mas, Dura lex, sed lex - A lei é dura, mas é uma lei.

No campo "Nome do CIPF", é necessário indicar o nome do CIPF (token / cartão inteligente, CSP), que está escrito no certificado de conformidade (que não deve ser confundido com o certificado X509) do Serviço de Segurança Federal da Rússia ou outro documento semelhante, cuja cópia deve ser fornecida no momento da compra do CIPF. Posteriormente, o valor desse campo será incluído no certificado.

Portanto, depois de decidir sobre o sistema de proteção de informações criptográficas e o par de chaves, você pode prosseguir com o preenchimento do pedido / pedido eletrônico do certificado da chave de verificação de assinatura eletrônica (SKEPEP):


O primeiro campo a ser preenchido é o "Nome comum", no qual o nome completo do futuro titular do certificado é inserido. Para um indivíduo, esse é o nome completo, como no passaporte. Para uma entidade legal, esse é o nome da empresa do registro. Essas informações para uma entidade legal serão duplicadas automaticamente no campo "Nome da organização" ("O"):


Ao preencher o formulário, a correção do preenchimento dos campos TIN, BIN, SNILS é verificada (quando você digita um número, o campo fica vermelho, os campos preenchidos corretamente ficam esverdeados), endereços de email:


Após preencher todos os campos da solicitação e clicar no botão "Concluir", uma solicitação de certificado será recebida no final:


No processo de criação de uma solicitação, um par de chaves será gerado no token selecionado. Ao mesmo tempo, se o token virtual “MS_CSP” for selecionado como o token, que, por sua vez, suporta várias mídias para armazenar o par de chaves, será proposto escolher um meio específico:


Lembre-se de que um par de chaves contém duas chaves: privada e pública. A chave pública, também chamada chave de verificação de assinatura eletrônica, é enviada para a solicitação de certificado. Para visualizar a solicitação gerada, que contém a chave pública, use o menu "Certificados-> Exibir solicitação":


A chave privada permanece com o requerente em seu token, o código PIN (senha) a partir do qual deve ser armazenado como a menina do olho. E como existe uma correspondência inequívoca entre chaves públicas e privadas, você sempre pode verificar quem é o proprietário da solicitação de certificado e, posteriormente, o próprio certificado, a assinatura no documento etc.

Agora, com todos os documentos necessários, com a solicitação gerada em uma unidade flash, você pode ir ao centro de certificação mais próximo e receber um certificado. Portanto, a solicitação passa a emitir um certificado em uma das CAs, criada levando em consideração a Lei Federal de 6 de abril de 2011. No. 63- "Na assinatura eletrônica":


A solicitação à CA passará pelas etapas de importação, revisão, aprovação e emissão de um certificado para esta solicitação:


O certificado emitido será publicado em um dos serviços da CA, de onde pode ser baixado. E agora basta exportar o certificado emitido para a unidade flash do requerente:


E agora, quando o certificado é recebido, resta colocá-lo no CIPF (PKCS # 11, MS CSP) (Certificados-> Importar x509):


Para verificar se o certificado está localizado no token, você pode exibir o conteúdo do token / cartão inteligente (Certificados-> Exibir x509 no token):


Bem, para que fosse "armadura" (dê-me um PAPEL! Documento final, armadura. (Dog Heart c / f)), conecte o token ao navegador Firefox com suporte à criptografia russa e encontre o certificado emitido em certificados pessoais (incluindo esses certificados, para o qual o token possui uma chave privada):


Utilitário CreateCSRCAFL63 desenvolvido em Tcl / Tk . Para acessar as funções criptográficas dos tokens MS CSP e PKCS # 11, foi desenvolvido o pacote cwapi que implementa os requisitos para bibliotecas C pelo Tcl. Não é difícil implementar esses requisitos, mas às vezes leva muito tempo devido à sua rotina. E aqui o utilitário público SWIG vem em socorro . , que permite criar módulos de interface entre bibliotecas C / C ++ e outros idiomas. Este não é apenas o Tcl, mas também o Java e outros. O projeto está muito bem documentado e tem ótimos exemplos. Usá-lo não é difícil. No nosso caso, para obter o módulo de interface, um arquivo de origem simples cwapi.i foi escrito para o utilitário swig:

 %module cwapi %inline %{ #include "cwapi.h" %} %include "cwapi_SWIG.h" 

O arquivo cwapi.h contém descrições de funções do projeto principal do cwapi:
 #ifdef __cplusplus extern "C" { #endif int CW_Initialize (char *configdir); int CW_Finalize (); int addp11mod (char *nickname, char *library); int remp11mod (char *nickname); char * lmod (); char * ltok (); char * lcert (char *token, int priv_cert); char* createreq (char *token, char *subject, char *keyusage, int keyparams, int pem, char *skzi, char* role); char* viewx509 (char *nickname, int CertOrReq); char* x509pem (char *nickname); char* x509fromfile(char *token, char *infile, char *trusts); int delcert (char *nickname, int priv_cert); int p12tofile (char *token, char *nickname, char *outfile); char* p12fromfile(char *token, char *infile); char* lmech(char* token); char* tinfo(char* token); #ifdef __cplusplus } #endif 

Executando o comando:

 $export SWIG_LIB=/usr/local/swig-3.0.12/Lib $/usr/local/swig-3.0.12/swig -tcl8 -o cwapi_wrap.c cwapi_.i $ 

no arquivo cwapi_wrap.c, obtemos um módulo de interface pronto. Adicione-o ao projeto cwapi, reconstrua-o e obtenha um novo pacote, usado neste utilitário.
Para obter o kit de distribuição, é muito conveniente usar o utilitário freewrap , enquanto a biblioteca cwapi também está incluída diretamente no pacote de distribuição. Utilitários e distribuições de código-fonte estão disponíveis para as plataformas Windows e Linux.

Eu gostaria de mencionar outro utilitário, ou seja, o tcl2c . Este utilitário "agrupa" o código tcl / tk no código C.

Para obter o código executável, basta executar o comando:

 $cc -o create_csr_ create_csr.c -ltcl -ltk $ 

As distribuições para a plataforma Linux também incluem uma distribuição C com uma conexão estática do pacote cwapi.

Source: https://habr.com/ru/post/pt412993/


All Articles