使用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')
通过“ cert”结构的“ export”对我的HSM的API的相应调用。有可能吗?
所以经过一天的研究,我在Adding a signature to a certificate上找到了满意的答案。尽管似乎有一些Python示例说明了如何使用pyasn1通过Python构建证书,但最健壮的似乎是Java中使用boucycastle库的证书。在这里How to generate certificate if private key is in HSM?(主要是第3点和第4点)中,如何将它与openssl结合在一起,我也找到了一个很好的答案,但是这种方法远远超出了我的能力范围。