【发布时间】:2020-04-10 09:27:08
【问题描述】:
使用 HSM 我可以下载 RSA 4096 的公钥,并且可以使用 HSM 使用我无法下载的相应私钥加密 blob。 我正在尝试查找有关如何使用 HSM api 自己构建 X509 证书的参考。我可以在 python 中找到下面的示例,包装 openssl 库。 它几乎可以做所有事情,但是
from OpenSSL import crypto, SSL
from socket import gethostname
from pprint import pprint
from time import gmtime, mktime
CERT_FILE = "selfsigned.crt"
KEY_FILE = "private.key"
def create_self_signed_cert():
# create a key pair
k = crypto.PKey()
k.generate_key(crypto.TYPE_RSA, 1024)
# create a self-signed cert
cert = crypto.X509()
cert.get_subject().C = "UK"
cert.get_subject().ST = "London"
cert.get_subject().L = "London"
cert.get_subject().O = "Dummy Company Ltd"
cert.get_subject().OU = "Dummy Company Ltd"
cert.get_subject().CN = gethostname()
cert.set_serial_number(1000)
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(10*365*24*60*60)
cert.set_issuer(cert.get_subject())
cert.set_pubkey(k)
cert.sign(k, 'sha1')
open(CERT_FILE, "wt").write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
open(KEY_FILE, "wt").write(crypto.dump_privatekey(crypto.FILETYPE_PEM, k))
create_self_signed_cert()
大多数情况下,我希望可以替换该行
cert.sign(k, 'sha1')
通过“证书”结构的“导出”对我的 HSM 的 API 进行相应调用。有可能吗?
【问题讨论】:
-
如果它是可能的,那不是完全违背了拥有证书的目的吗?
-
一点也不。您使用私钥生成证书。在您拥有某种凭据的基于硬件的设备中进行加密,而不是在您计算机上的文件上进行加密实际上是您想要的方式。通常 OpenSSL 或其他桌面将支持与 HSM 透明对话的引擎。就我而言,希望能够以编程方式完成。