pyOpenSSL创建一个pem文件

时间:2013-10-29 06:54:22

标签: python pyopenssl

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

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

3 个答案:

答案 0 :(得分:3)

我希望这将有助于未来的人们,因为我有同样的需求而无法找到答案所以我自己做了。以为我会和你分享。

1。创建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

答案 1 :(得分:2)

我知道这是一个老问题 - 但正如我刚发现的那样,我以为我会添加一个答案。

使用Python 3.x执行此操作的最简单方法是使用PyCryptodome

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

digest

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

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)

答案 2 :(得分:0)

您可以按照以下教程创建.pem键:

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

假设您要创建一个CA(证书颁发机构)证书 因为你必须从某个地方获得CA,所以很简单 因为它不是免费的。

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

然后确保首先安装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连接守护进程一起工作。