下午好我们继续这个话题
今天我们进入实践部分。 让我们首先基于成熟的开源加密库 openSSL 设置我们的 CA。 该算法已使用 Windows 7 进行测试。
安装了openSSL后,我们可以通过命令行执行各种加密操作(例如创建密钥和证书)。
动作算法如下:
- 下载安装发行版 openssl-1.1.1g。
openSSL 有不同的版本。 Rutoken 的文档表示需要 openSSL 版本 1.1.0 或更高版本。 我用的是openssl-1.1.1g版本。 你可以从官方网站下载openSSL,但是为了更容易安装,你需要在网上找到windows的安装文件。 我为你做了这个:slproweb.com/products/Win32OpenSSL.html
向下滚动页面并下载 Win64 OpenSSL v1.1.1g EXE 63MB 安装程序。 - 在计算机上安装 openssl-1.1.1g。
安装必须按照标准路径进行,该路径自动指示在C:Program Files文件夹中。 该程序将安装在 OpenSSL-Win64 文件夹中。 - 为了按照您需要的方式设置 openSSL,可以使用 openssl.cfg 文件。 如果您按照上一段所述安装了 openSSL,则此文件位于 C:\Program Files\OpenSSL-Win64bin 路径中。 转到存储 openssl.cfg 的文件夹并使用(例如 Notepad++)打开此文件。
- 您可能猜到将通过更改 openssl.cfg 文件的内容来以某种方式配置证书颁发机构,您是完全正确的。 这需要自定义 [ ca ] 命令。 在 openssl.cfg 文件中,我们将进行更改的文本开头为:[ ca ]。
- 现在我将给出一个设置示例及其描述:
[ ca ] default_ca = CA_default [ CA_default ] dir = /Users/username/bin/openSSLca/demoCA certs = $dir/certs crl_dir = $dir/crl database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/ca.crt serial = $dir/private/serial crlnumber = $dir/crlnumber crl = $dir/crl.pem private_key = $dir/private/ca.key x509_extensions = usr_cert
现在我们需要创建 demoCA 目录和子目录,如上例所示。 并将其沿着 dir 中指定的路径放置在此目录中(我有 /Users/username/bin/openSSLca/demoCA)。
正确拼写 dir 非常重要 - 这是我们的认证中心所在目录的路径。 该目录必须位于/Users 中(即位于某个用户的帐户中)。 如果您将此目录放置在例如 C:Program Files 中,系统将看不到带有 openssl.cfg 设置的文件(至少对我来说是这样)。
$dir - 此处替换 dir 中指定的路径。
另一个重要的一点是创建一个空的index.txt 文件,没有此文件,“openSSL ca ...”命令将无法工作。
您还需要有一个串行文件、一个根私钥(ca.key)、一个根证书(ca.crt)。 下面将描述获取这些文件的过程。
- 我们连接Rutoken提供的加密算法。
此连接发生在 openssl.cfg 文件中。- 首先,您需要下载必要的Rutoken算法。 这些是文件 rtengine.dll、rtpkcs11ecp.dll。
为此,请下载 Rutoken SDK:www.rutoken.ru/developers/sdk .Rutoken SDK 是为想要试用 Rutoken 的开发人员提供的一切。 有两个使用不同编程语言使用 Rutoken 的单独示例,并且提供了一些库。 我们的库 rtengine.dll 和 rtpkcs11ecp.dll 分别位于 Rutoken sdk 中的位置:
sdk/openssl/rtengine/bin/windows-x86_64/lib/rtengine.dll
sdk/pkcs11/lib/windows-x86_64/rtpkcs11ecp.dll非常重要的一点。 如果没有安装 Rutoken 驱动程序,则库 rtengine.dll、rtpkcs11ecp.dll 将无法工作。 Rutoken 还必须连接到计算机。 (要安装 Rutoken 所需的一切,请参阅文章的前一部分
habr.com/en/post/506450 ) - rtengine.dll 和 rtpkcs11ecp.dll 库可以保存在用户帐户中的任何位置。
- 我们将这些库的路径写入 openssl.cfg 中。 为此,请打开 openssl.cfg 文件,并将该行放在该文件的开头:
openssl_conf = openssl_def
在文件末尾您需要添加:
[ openssl_def ] engines = engine_section [ engine_section ] rtengine = gost_section [ gost_section ] dynamic_path = /Users/username/bin/sdk-rutoken/openssl/rtengine/bin/windows-x86_64/lib/rtengine.dll MODULE_PATH = /Users/username/bin/sdk-rutoken/pkcs11/lib/windows-x86_64/rtpkcs11ecp.dll RAND_TOKEN = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP default_algorithms = CIPHERS, DIGEST, PKEY, RAND
Dynamic_path - 您必须指定 rtengine.dll 库的路径。
MODULE_PATH - 您需要设置 rtpkcs11ecp.dll 库的路径。
- 首先,您需要下载必要的Rutoken算法。 这些是文件 rtengine.dll、rtpkcs11ecp.dll。
- 添加环境变量。
请务必添加一个环境变量来指定 openssl.cfg 配置文件的路径。 就我而言,OPENSSL_CONF 变量是使用路径 C:Program FilesOpenSSL-Win64binopenssl.cfg 创建的。
在路径变量中,必须指定openssl.exe所在文件夹的路径,在我的例子中是:C:Program FilesOpenSSL-Win64bin。
- 现在您可以返回到步骤 5 并为 demoCA 目录创建缺少的文件。
- 第一个重要的文件是串行文件,没有它,任何事情都无法进行。 这是一个没有扩展名的文件,其值为01。您可以自己创建这个文件,并在里面写入01。您也可以从Rutoken SDK中沿着路径sdk/openssl/rtengine/samples/tool/demoCA下载它/。
demoCA目录包含串行文件,这正是我们所需要的。 - 创建根私钥。
为此,我们将使用 openSSL 库命令,该命令必须直接在命令行上运行:openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out ca.key
- 我们创建一个根证书。
为此,请使用以下 openSSL 库命令:openssl req -utf8 -x509 -key ca.key -out ca.crt
请注意,生成根证书需要使用上一步中生成的根私钥。 因此,命令行必须在同一目录中启动。
现在,一切都包含了 demoCA 目录完整配置的所有缺失文件。 将创建的文件放置在第 5 点所示的目录中。
- 第一个重要的文件是串行文件,没有它,任何事情都无法进行。 这是一个没有扩展名的文件,其值为01。您可以自己创建这个文件,并在里面写入01。您也可以从Rutoken SDK中沿着路径sdk/openssl/rtengine/samples/tool/demoCA下载它/。
我们假设完成所有 8 点后,我们的认证中心已完全配置。