俄罗斯授权认证机构的根源证书和中间证书

与许多其他国家一样,俄罗斯使用授权的俄罗斯证书颁发机构(UC)颁发的x509证书进行官方电子文档管理。 与许多其他国家不同,它使用自己的密码。

很长时间以来,我一直想自动验证当局答案的签名(我非常有同情心),并自动验证Roskomnadzor的“卸货”的真实性(根据公共活动的性质)。 最大的问题是从链中获取中间证书。 因为在通信部的网站上存在根CA的模糊Excel文件,仅此而已。 并且必须在各个CA的站点上搜索中间的。 生活是痛苦。
什么是“中间证书” 。 让我提醒您它是如何工作的。 假设我们要检查一些签名的信。 这封信是用钥匙签名的。 有一个证明该密钥的证书。 该证书是由某人签发的,并且还由带有随附证书的某些密钥签名。 该证书完全相同。 依此类推,直到证书颁发给自己为止。 检查时,我们已经(从包装中取出,从包装中取出,给了我们一个闪存驱动器)某些最终证书,我们相信这些证书。 我们相信,因为我们相信将他们交给我们的人。 在网络世界中,我们信任浏览器及其根证书集。 在网络世界中,通过HTTPS连接时,中间证书也从服务器传输到客户端。 因此,在网络世界中,我们始终拥有整个链条。
突然(我不知道确切的时间),并且在国家服务局的网站上不知不觉中出现了这样的链接:
e-trust.gosuslugi.ru/CA

我匆忙编写了一个程序 ,可以将带有该站点的CA和证书列表的XML文件转换为熟悉的PEM格式。

然后,我对其进行了自动化,并以* NIX世界熟悉的形式获得了一个不断维护的证书存储库

GOST加密


LibreSSL支持GOST加密;我不记得哪个版本。 但是在Alpine Linux 3.5中已经支持。 使用OpenSSL,事情变得更加复杂。 从1.0.0版到1.0.2版(含)的OpenSSL附带了GOST加密。 但是例如,CentOS没有GOST加密。 CentOS用户必须受苦​​。 对于Debian,Mint,具有OpenSSL版本1.1.0和更高版本的Ubuntu,需要安装libengine-gost-openssl1.1软件包,并由加密爱好者Vartan Khachaturov支持(顺便说一句,您可以为他提供帮助)。

好吧,在2018年我们有了Docker,正如我提到的,在Alpine Linux中,一切正常。

使用方法


简短的示例,用于检查具有完整签名的Roskomnadzor的“卸载”。 “上载”文件是dump.xml,未标记的签名是dump.xml.sig。 甚至我之前都只检查签名的完整性,而不检查与来源的对应关系。

使用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 

使用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 

当然,您可以在certs文件夹中使用c_rehash实用程序,然后使用-CAdir选项而不是-CAfile。

从现在开始,您不能使用国家服务,Contour和诸如CryptoPro之类的奇怪程序的网站来完成验证签名的简单任务。 最重要的是,现在可以实现自动化。

Source: https://habr.com/ru/post/zh-CN423187/


All Articles