我在python中使用pyOpenSSL使用以下代码创建了一个密钥对:
from OpenSSL import crypto
k = crypto.PKey()
k.generate_key(crypto.TYPE_RSA, 2048)
答案 0 :(得分:3)
我希望这将有助于未来的人们,因为我有同样的需求而无法找到答案所以我自己做了。以为我会和你分享。
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连接守护进程一起工作。