【gmssl】Can‘t open ./private/cakey.pem for reading, No such file or directory

问题描述

  在使用gmssl对用户生成证书的过程中,出现了错误Can't open ./private/cakey.pem for reading, No such file or directory,情况如下:
在这里插入图片描述
命令为gmssl ca -days 3650 -in Alice.csr -out caAlice.crt

解决方法

  提示信息很明显,这是由于没有对应文件的问题。首先明确报错中的路径./private/cakey.pem在哪里。打开gmssl的配置文件,默认目录应该是/usr/local/ssl/openssl.cnf,找到配置文件中关于证书的部分,具体如下:

  在这里先说明,配置文件中CA部分指定的文件基本(crlnumber目前没有用到)在生成CA的过程中都需要调用。那么这些文件的位置在哪里呢?dir指明了路径,在没修改该文件前,默认路径应该是./demoCA,这个路径是什么意思呢,就是dir路径在配置文件目录下的demoCA文件夹下。但是我们查看该dir路径下的文件信息,根据配置文件我们知道,这里需要包含文件夹crtscrlnewcertsprivate和文件index.txtserialcacert.pemcakey.pem,因此若没有包含上述文件夹或文件,就会导致调用失败,这便是引起报错的原因

  所以现在我们知道,我们需要查看上述文件是否包含在dir路径下,若没有则需自行创建(印象中好像连demoCA文件夹gmssl都没有帮用户创建),其中serial的内容为01,命令如下:

sudo mkdir crts # 文件夹举例
sudo touch index.txt # 文件举例

  为了方便修改,笔者将dir变成了绝对路径/usr/local/ssl,防止配置文件路径发生变化时又要重新配置的问题。

  下面详细讲述cacert.pemcakey.pem两个文件的问题。如果我们仅创建空的这两个文件,将会导致报错Can't open /usr/local/ssl/cacert.pem for reading, No such file or directory,如下:
在这里插入图片描述
  这是因为上述两文件为空,没有办法使用两文件中的CA私钥和CA自签名信息,因此我们需要首先生成这两个文件,上面我们已经说到,由于生成ca的过程中必调用到目录/usr/local/ssl/private下的cakey.pem文件和目录/usr/local/ssl下的cacert.pem文件,因此我们在生成这两个文件时也必须生成到上述对应目录下,具体命令为:

sudo gmssl ecparam -genkey -name sm2p256v1 -out /usr/local/ssl/private/cakey.pem  # 生成CA私钥
sudo gmssl req -x509 -sm3 -days 3650 -key /usr/local/ssl/private/cakey.pem -out /usr/local/ssl/cacert.pem # 生成CA自签名信息

  命令中添加sudo是为了避免报错ecparam: Cannot open output file /usr/local/ssl/private/cakey.pem, Permission denied,如下:
在这里插入图片描述
  上述命令中直接使用绝对路径是因为配置文件决定了指定访问文件的固定路径,因此当我们在其他文件夹下使用命令时会是相对目录下的文件,将导致配置文件访问失败,这也是很多类似错误出现的根本原因,就是配置文件中指定路径与用户生成路径不同,导致文件找不到。

题外话

  在使用命令gmssl ca -days 3650 -in Alice.csr -out caAlice.crt过程中的问题:

  • 遇到Sign the certificate? [y/n]:请不要直接Enter,因为默认选项是no
    在这里插入图片描述
  • 命令请加上sudo否则权限不够可能提示报错如下:
    在这里插入图片描述

成功CA后应该信息大致如下:

lyg@DESKTOP-C3PNG35:/mnt/e/密码学课设/gmssl$ sudo gmssl ca -days 3650 -in Alice.csr -out caAlice.crt
Using configuration from /usr/local/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Sep 22 02:12:53 2020 GMT
            Not After : Sep 20 02:12:53 2030 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = HuBei
            organizationName          = Hust
            organizationalUnitName    = CSE
            commonName                = Alice
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: 
                Key Encipherment
            Netscape Comment: 
                GmSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                9B:DA:54:DB:E8:BE:EE:2E:EB:5E:EF:C7:9C:78:31:6F:EE:A4:48:96
            X509v3 Authority Key Identifier: 
                keyid:99:6C:AC:90:8C:1C:68:B3:8C:A8:65:1E:EB:15:6F:4A:DA:CD:7A:B0

Certificate is to be certified until Sep 20 02:12:53 2030 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

参考资料

OpenSSL - 利用OpenSSL自签证书和CA颁发证书

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D-A-X

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值