pyOpenSSL创建pem-fi

2024-05-14 01:12:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中使用pyOpenSSL创建了一个密钥对,代码如下:

from OpenSSL import crypto
k = crypto.PKey()
k.generate_key(crypto.TYPE_RSA, 2048)
  1. 现在如何从key对象创建私钥和公钥.pem文件?
  2. 如果有任何可用的教程,请让我知道。我什么也没找到。从手册中,很难知道我是OpenSSL新手。
  3. 如果RSA中没有使用特定的唯一密钥,那么同一代码创建两个相同密钥对的可能性有多大?

Tags: 对象key代码fromimporttype密钥crypto
3条回答

可以通过以下教程创建.pem密钥:

https://help.ubuntu.com/community/OpenSSL

假设您要创建一个CA(证书颁发机构)证书 有点复杂,因为你已经从某个地方拿到了CA 因为这不是免费的。

如果您只想为ssl连接创建一个密钥,请测试它 更好地创造 自签名证书。

然后,确保首先安装了openssl,并且在服务上解析了CN(公共名称)。否则,您将很难使用创建的证书。

对于自签名证书,请使用以下命令行:

$ openssl genrsa -des3 -passout pass:x -out server.pass.key 2048
$ openssl rsa -passin pass:x -in server.pass.key -out server.key
$ rm server.pass.key
$ openssl req -new -key server.key -out server.csr (list of question to answer)
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt 

创建证书后,必须激活 服务器mod ssl并添加查找证书的行。 稍后您必须将该证书插入到您的IE证书中 列出以使其与apache ssl连接守护进程协同工作。

我希望这能帮助人们在未来,因为我有同样的需要,找不到答案,所以我自己做了。我想和你分享。

一。创建PEM文件

bio_pub = _new_mem_buf()  # Memory buffers to write to
bio_priv = _new_mem_buf()

helper = OpenSSL.crypto._PassphraseHelper(OpenSSL.crypto.FILETYPE_PEM, None)

pk = OpenSSL.crypto.PKey()
pk.generate_key(OpenSSL.crypto.TYPE_RSA, n)

# Convert from EVP_PKEY type to RSA type
rsa_pkey = _lib.EVP_PKEY_get1_RSA(pk._pkey)


result_code = _lib.PEM_write_bio_RSAPublicKey(bio_pub, rsa_pkey)
result_code = _lib.PEM_write_bio_RSAPrivateKey(
    bio_priv, rsa_pkey, _ffi.NULL, _ffi.NULL, 0,
    helper.callback, helper.callback_args)

在这一部分之后,您将在缓冲区中拥有公钥和私钥。 要将其作为字符串获取,可以调用以下函数:

_bio_to_string(bio_pub), _bio_to_string(bio_priv)

我将这些导入用于OpenSSL.crypto的特殊“私有”函数:

import OpenSSL
from OpenSSL._util import lib as _lib, ffi as _ffi
from OpenSSL.crypto import _new_mem_buf, _bio_to_string

我知道这是一个老问题-但我刚找到它,我想我会补充一个答案。

使用Python 3.x实现这一点的最简单方法是使用PyCryptodome

在Python中(对于2048位密钥):

from Cryptodome.PublicKey import RSA
key = RSA.generate(2048)
pv_key_string = key.exportKey()
with open ("private.pem", "w") as prv_file:
    print("{}".format(pv_key_string.decode()), file=prv_file)

pb_key_string = key.publickey().exportKey()
 with open ("public.pem", "w") as pub_file:
    print("{}".format(pb_key_string.decode()), file=pub_file)

如果要在(Linux)命令行上检查私钥,请使用:

$ openssl rsa -check -inform pem -noout -in private.pem 
RSA key ok
...

相关问题 更多 >