创建由我自己签名的OpenSSL证书
Create OpenSSL certificates signed by myself
我正在为服务器和客户端使用boost ssl,并且我脑海中有一个服务器/客户端程序的模型,但我不确定它是否会起作用。
我心目中的模型是成为我的程序证书的唯一权威。我的主要问题是:我该怎么做?
在我的服务器程序中,我定义键如下:
context_.use_certificate_chain_file("../sslkeys/server.crt");
context_.use_private_key_file("../sslkeys/server.key", boost::asio::ssl::context::pem);
context_.use_tmp_dh_file("../sslkeys/dh512.pem");
我使用以下方法创建/签署这些密钥/证书:
$ openssl genrsa -des3 -out server.key 2048
$ openssl req -new -key server.key -out server.csr
$ openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
$ cp server.key server.key.secure
$ openssl rsa -in server.key.secure -out server.key
$ openssl dhparam -out dh512.pem 512
对于我的客户端程序,我想创建一个证书并通过我的"服务器.key"对其进行签名,因为我认为(我可能是错的,如果我是,请纠正我)这就是这样做的方法。客户端程序需要使用以下命令的密钥:
ctx.load_verify_file("../sslkeys/client.csr");
因此,我使用以下命令创建了一个密钥,并使用服务器密钥对其进行签名:
$ openssl genrsa -des3 -out client.key 2048
$ openssl req -new -key client.key -out client.csr
$ openssl x509 -req -days 3650 -in client.csr -signkey ../sslkeys/server.key -out client.crt
现在,当我运行客户端并尝试连接服务器时,出现错误:Handshake failed: certificate verify failed
我正在做的事情有什么问题?我怎样才能实现我提到的模型?
如果您需要任何其他信息,请询问。
感谢您的任何努力。
您的签名证书无权签名,因为它没有设置 CA 标志。签名仍然有效,但验证将失败。由于互联网上已经有很多指南,它们将详细展示如何正确操作,因此您可以在此处或此处查看更多详细信息。
此外,仅使用 512 位 Diffie-Hellman 会将密钥交换的安全性降低到 512 位,这在今天是可利用的(另请参阅Logjam 攻击)。2048 RSA 密钥在这里没有帮助。如果您使用最新版本的OpenSSL,则使用512位甚至可能不起作用,出于安全原因,OpenSSL只是将最小大小增加到768位。
相关文章:
- OpenSSL TLS服务器-使用客户端证书白名单
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- 通过 OpenSSL C++从证书获取颁发者证书
- 如何使用openssl续订过期的证书密钥或创建自签名证书密钥any.pem Poco c ++
- 将私钥和证书存储在C++/OpenSSL中
- openssl 是否需要熵用于生成证书和密钥以外的其他目的?
- 如何读取证书以使用 openssl 验证签名
- 如何使用openssl解析带有奇怪OID的x509证书
- OpenSsl无法读取DER格式的证书
- OpenSSL X509证书获得弦乐人类可读
- 证书验证在客户端服务器通信中使用boost :: asio和openssl失败
- 如何在OpenSSL中获取SSL证书
- 无法使用OpenSSL验证服务器证书
- 如何使用OpenSSL从证书中提取所有OID
- 获取Openssl证书错误中的错误字符串
- 有没有办法获取 OpenSSL X509 证书名称,该证书名称将在 C++ 中发送到对等方
- 如何在 OpenSSL 中使用 SSL 证书与 gsoap,使用 C++ 客户端/服务器
- 如何正确实施 OpenSSL 证书
- 创建由我自己签名的OpenSSL证书
- DHE交换的OpenSSL证书生成