如何在不直接访问私钥的情况下创建x X.509证书?

问题描述 投票:0回答:1

使用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的相应调用。有可能吗?

python openssl x509
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.