Infrastructure de clé publique: utilitaire de génération de demande de certificat qualifié

image L'un des objets centraux de l'infrastructure à clé publique (PKI / PKI) avec la paire de clés est un certificat, qui est aujourd'hui en fait un analogue d'un passeport civil.

Ayant un certificat en main, un citoyen peut accéder au portail des services de l'État, payer des impôts, protéger son courrier électronique , signer et crypter des documents, et bien plus encore.

Un certificat, comme un passeport , est délivré sur la base d'une demande et de la fourniture d'un certain nombre de documents. La liste des documents pour l'obtention d'un certificat se trouve dans tout centre de certification accrédité par le Ministère des communications (le nouveau nom est Ministère du développement numérique, des télécommunications et des communications de masse). La demande de passeport porte la signature manuscrite du demandeur. À la réception du passeport, le demandeur apposera sa signature sur le passeport, qui sera certifiée par l'employé du bureau des passeports et le cachet officiel. La photo et la capacité du propriétaire à reproduire sa signature et à lui permettre d'être identifié comme titulaire d'un passeport spécifique.

Un schéma similaire est utilisé pour obtenir un certificat de clé de vérification de signature électronique (SKEPEP). Tout d'abord, un citoyen qui souhaite recevoir un certificat doit acquérir la «compétence» en apposant sa propre signature. Cette «compétence» est réalisée grâce à la réception par le demandeur d'une paire de clés contenant la clé publique ou la clé de vérification de signature électronique (KEPP) et la clé privée ou la clé de signature électronique, ce qui, en fait, vous permet de générer une signature électronique et de signer un document électronique. L'identification d'une signature électronique sous un document est effectuée selon l'algorithme suivant. À partir du certificat, il est déterminé par quelle clé (GOST R 34.10-2001, GOST R 34.10-2012 avec une longueur de clé de 64 ou 128 octets) le document a été signé. Le type de clé détermine l'algorithme de hachage utilisé lors de la signature du document. Il peut s'agir de GOST R 34.11-94 ou GOST R 34.11-2012 avec une longueur de hachage de 256 ou 512 bits. Selon l'algorithme sélectionné, le hachage du document source est pris en compte. Et par la valeur du hachage calculé à partir du document source, de la clé publique (KEPP) et de ses paramètres (tout cela est extrait du certificat SKEPEP), l'authenticité de la signature électronique sous le document est vérifiée.

Pour créer une paire de clés, divers moyens de protection des informations cryptographiques (CPSI) sont utilisés qui prennent en charge les algorithmes cryptographiques GOST R 34.10-2001 et GOST R 34.10-2012. Il ne faut pas oublier que l'utilisation du schéma de signature GOST R 34.10-2001 pour générer une signature après le 31 décembre 2018 n'est pas autorisée! Les outils de protection des informations cryptographiques qui implémentent divers algorithmes et protocoles cryptographiques peuvent être à la fois logiciels et matériels. L'accès à la protection des informations cryptographiques s'effectue via des interfaces cryptographiques. La grande majorité des systèmes de protection des informations cryptographiques certifiés avec cryptographie russe prend en charge soit l'interface cryptographique PKCS # 11 universelle, qui est prise en charge sur toutes les plateformes, soit l'interface Microsoft CSP et CryptoAPI sur les plateformes MS Windows (ci-après dénommée MS CSP). Ce sont ces deux interfaces cryptographiques qui sont prises en charge, par exemple, par le portail des services d'État . Ces deux types de protection des informations cryptographiques seront examinés plus avant:


Il convient de garder à l'esprit que si vous souhaitez ou devez travailler avec une signature électronique non seulement sur la plate-forme Windows, mais également sur d'autres plates-formes (Linux, macOS, etc.), alors les jetons PKCS # 11 avec prise en charge de la cryptographie russe doivent être choisis.

En plus de la fonction principale liée à la génération d'une demande, l'utilitaire fournit des fonctions pour travailler avec des jetons et des certificats:


Le champ combiné (combobox) «Select a token:» dans la fenêtre principale contient une liste des outils de protection des informations cryptographiques disponibles pour générer une paire de clés. Si l'utilitaire de génération de demande s'exécute sur la plate-forme Windows et que des fournisseurs de cryptographie CSP prenant en charge la cryptographie russe y sont installés, le jeton MS_CSP virtuel sera défini dans la liste des outils de protection des informations cryptographiques disponibles («Sélectionnez un jeton:»). Donc, si vous souhaitez utiliser le fournisseur de chiffrement MS CSP, il doit être installé sur le système avant de démarrer l'utilitaire.

Pour ajouter la prise en charge du nouveau jeton PKCS # 11, sélectionnez simplement l'élément de menu "Gestion des jetons -> Ajouter un jeton". L'ajout de la prise en charge du nouveau jeton consiste à choisir la bibliothèque PKCS # 11 pour le type de plug-in de jetons / cartes à puce et à définir un nom pratique (surnom). Lors de l'ajout de la prise en charge d'un nouveau type de jetons (ainsi qu'au démarrage de l'utilitaire, si la prise en charge des jetons a été précédemment ajoutée) avec un jeton connecté (inséré), un code PIN sera nécessaire pour y accéder:


Mais cela ne se produira que si le jeton est non seulement connecté, mais également en état de fonctionnement, c'est-à-dire initialisé. Vérifiez le jeton et, si nécessaire, initialisez-le, modifiez le code PIN pour y accéder, etc. commodément avec l'utilitaire p11conf :


En sélectionnant l'élément "Token Management-> Token Mechanisms", vous pouvez voir les mécanismes cryptographiques d'un jeton particulier, par exemple, y a-t-il un support pour l'algorithme GOST R 34.10-2012. Pour le jeton virtuel MS_CSP, tous les fournisseurs CSP prenant en charge les algorithmes GOST et les mécanismes pris en charge par eux sont répertoriés:


Si le jeton sélectionné ne prend pas en charge le type de paire de clés sélectionné, un message correspondant s'affiche:


Avant de procéder directement au remplissage des champs de demande, il est nécessaire de décider dans quel but un certificat est nécessaire, c'est-à-dire spécifiez le «Rôle du certificat». Aujourd'hui, ces rôles ont accumulé plus d'une douzaine:


Et chaque rôle est associé à de nombreux OID différents inclus dans le certificat. Ainsi, par exemple, pour accéder au portail des services publics, les outils suivants sont nécessaires:

{} {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} 

Les OID pour d'autres rôles (par exemple, "Site Gazprombank", "Consommateur d'alcool", etc.) peuvent être trouvés dans le code source de l'utilitaire (variable oid_roles_bad, opérateur:

 set oid_roses_bad {. . .} 
)
La présence de tant de liquides est difficile à comprendre. Nous parlons de certificats qualifiés, dans lesquels il y a oid TIN, PSRN, SNILS, etc., qui identifient à la fois une personne physique et une entité juridique et, il semble, cela suffirait pour accéder au portail des services de l'État, et d'autres aussi. Mais, Dura lex, sed lex - La loi est sévère, mais c'est une loi.

Dans le champ «Nom du CIPF», il est nécessaire d'indiquer le nom du CIPF (token / smart card, CSP), qui est inscrit dans le certificat de conformité (à ne pas confondre avec le certificat X509) du Service fédéral de sécurité de Russie ou tout autre document similaire, dont une copie doit être fournie au moment de l'achat du CIPF. Par la suite, la valeur de ce champ sera incluse dans le certificat.

Ainsi, après avoir décidé du système de protection des informations cryptographiques et de la paire de clés, vous pouvez procéder à la demande / demande électronique de certificat de clé de vérification de signature électronique (SKEPEP):


Le premier champ à remplir est le «Nom commun», dans lequel le nom complet du futur titulaire du certificat est entré. Pour un individu, c'est le nom complet comme dans le passeport. Pour une personne morale, il s'agit du nom de l'entreprise du registre. Ces informations pour une personne morale seront automatiquement dupliquées dans le champ «Nom de l'organisation» («O»):


Lorsque vous remplissez le formulaire, l'exactitude du remplissage des champs TIN, BIN, SNILS est vérifiée (lorsque vous entrez un nombre, le champ devient rouge, les champs correctement remplis deviennent verdâtres), adresses e-mail:


Après avoir rempli tous les champs de demande et cliqué sur le bouton «Terminer», une demande de certificat sera finalement reçue:


Lors de la création d'une demande, une paire de clés sera générée sur le jeton sélectionné. Dans le même temps, si le jeton virtuel «MS_CSP» est sélectionné comme jeton, qui, à son tour, prend en charge divers supports pour stocker la paire de clés, il sera proposé de choisir un support spécifique:


Rappelons qu'une paire de clés contient deux clés: privée et publique. La clé publique, également appelée clé de vérification de signature électronique, est envoyée à la demande de certificat. Pour visualiser la requête générée, qui contient la clé publique, utilisez le menu "Certificats-> Afficher la requête":


La clé privée reste avec le demandeur sur son jeton, dont le code PIN (mot de passe) doit être stocké comme la prunelle de son œil. Et comme il existe une correspondance sans ambiguïté entre les clés publiques et privées, vous pouvez toujours vérifier à qui appartient la demande de certificat, puis le certificat lui-même, la signature sur le document, etc.

Maintenant, avec tous les documents nécessaires, avec la demande générée sur un lecteur flash, vous pouvez vous rendre au centre de certification le plus proche et recevoir un certificat. Ainsi, la demande vient de délivrer un certificat dans l'une des CA, créé en tenant compte de la loi fédérale du 6 avril 2011. N ° 63- "Sur signature électronique":


La demande à l'AC passera par les étapes d'importation, d'examen, d'approbation et de délivrance d'un certificat pour cette demande:


Le certificat émis sera publié sur l'un des services CA, d'où il pourra être téléchargé. Et maintenant, il suffit que le certificat émis soit exporté vers le lecteur flash du demandeur:


Et maintenant, lorsque le certificat est reçu, il reste à le mettre sur le CIPF (PKCS # 11, MS CSP) (Certificats-> Import x509):


Pour vérifier que le certificat se trouve sur le jeton, vous pouvez afficher le contenu du jeton / de la carte à puce (Certificats-> Afficher x509 sur le jeton):


Eh bien, pour qu'il s'agisse d'une «armure» (Donnez-moi un tel document! Final Paper, Armor. (Dog Heart c / f)), connectez le jeton au navigateur Firefox avec la prise en charge de la cryptographie russe et recherchez le certificat émis dans les certificats personnels (y compris ces certificats, pour lequel le jeton a une clé privée):


Utilitaire CreateCSRCAFL63 développé sur Tcl / Tk . Pour accéder aux fonctions cryptographiques des jetons MS CSP et PKCS # 11, le package cwapi a été développé qui implémente les exigences pour les bibliothèques C par Tcl. Il n'est pas difficile de mettre en œuvre ces exigences, mais cela prend parfois beaucoup de temps en raison de sa routine. Et ici l'utilité publique SWIG vient à la rescousse . , qui vous permet de créer des modules d'interface entre les bibliothèques C / C ++ et d'autres langages. Ce n'est pas seulement Tcl, mais aussi Java et autres. Le projet est très bien documenté et a de bons exemples. Son utilisation n'est pas difficile. Dans notre cas, pour obtenir le module d'interface, un simple fichier source cwapi.i a été écrit pour l'utilitaire swig:

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

Le fichier cwapi.h contient des descriptions des fonctions du projet principal 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 

En exécutant la commande:

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

dans le fichier cwapi_wrap.c nous obtenons un module d'interface prêt à l'emploi. Ajoutez-le au projet cwapi, reconstruisez-le et obtenez un nouveau package, qui est utilisé dans cet utilitaire.
Pour obtenir le kit de distribution, il est très pratique d'utiliser l'utilitaire freewrap , tandis que la bibliothèque cwapi est également incluse directement dans le package de distribution. Les utilitaires de code source et les distributions sont disponibles pour les plates-formes Windows et Linux.

Je voudrais mentionner un autre utilitaire, à savoir tcl2c . Cet utilitaire «enveloppe» le code tcl / tk en code C.

Pour obtenir le code exécutable, exécutez simplement la commande:

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

Les distributions pour la plate-forme Linux incluent également une distribution C avec une connexion statique du package cwapi.

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


All Articles