我在使用 openssl 命令行工具创建证书时遇到了一些问题。
私钥的规格是:
“使用带有 SHA-1 散列函数 (RSA-SHA1-1024) 的 RSA 1024 位密钥的数字签名”
创建如下
openssl genrsa -out rsa.key 1024
生成 CSR
openssl req -new -key rsa.key -out csr.csr
该证书具有以下规格:
- 格式 = x.509
- 字符集 = UTF-8
- 编码 = Base-64
- 字节序 = 小字节序
- OAEP 填充 = PKCS1 v1.5 填充
- 私钥大小 = 1024 位
- 哈希消息格式 = SHA-1
我已经尝试了以下的大量组合:
openssl x509 -req -utf8 -enc base64 -pkcs -sha1 rsa:1024 -in csr.csr -signkey rsa.key -out server.crt
我根本无法使上述命令的大量组合起作用,总是有一些参数会破坏它。
根据规范,我们应该使用给定的证书签署 RSA 消息摘要。我有点困惑为什么以及如何我们应该这样做,也许它是一个错误的规范?
我正在使用OpenSSL 1.1.0f 2017 年 5 月 25 日
我什至找不到如何使用 openssl 命令行工具设置它的字节序,这里的任何帮助将不胜感激!
除非我读错了,否则该文档似乎自相矛盾。它谈到了证书的创建和自签名证书是可以的,但后来又说他们希望你发送给 NTA 的唯一东西就是公钥。签署数据不需要证书,只需要私钥。所以我想知道为什么他们不只是让你创建一个公钥/私钥对,而不是一个只会放在盒子上并且永远不会被使用的整个证书。
以下是创建简单 RSA 1024 私钥并将公钥提取到其自己的文件中的方法:
该
rsa.pub
文件是您要发送给 NTA 的文件。我从来没有听说过有人需要用 openssl 明确地处理字节顺序。所以我可能是错的,但你可能不必担心。UTF8 字符集可能只对带有像主题这样的文本字段的实际证书很重要。Openssl 使用 ASCII 编码输出 PEM 文件,这很好(并且正常),因为 PEM 是 Base64 编码的。PKCS1 v1.5 填充也是标准的。所以现在你已经拿到了你的钥匙。让我们尝试签署他们文档第 2.2.5 节中的示例数据。首先,将数据放入文件中,以便在示例中使用。
显示 SHA1 哈希只是为了证明我们有与示例匹配的数据
对数据进行散列和签名,将其转换为 base64,不带换行符并将其保存到文件中。
假设,其中的文本
data.sig
现在就是您在示例中用于“signature_for_this_receipt”的内容。要验证,我们可以执行以下操作,输出“验证成功”。
如果由于某种原因您确实需要一个实际的证书文件,您可以将生成私钥的第一个命令替换为这个将生成密钥和自签名证书的衬里。您仍然需要相同的第二个命令来提取公钥。