【问题标题】:Error on loading certificate with boost::asio使用 boost::asio 加载证书时出错
【发布时间】:2016-06-23 15:02:16
【问题描述】:

我正在使用 boost::asio 在客户端和服务器应用程序之间建立加密连接。我通过以下方式生成了一个私钥文件和自签名证书:

openssl genrsa -out private_key.pem 2048
openssl req -new -key private_key.pem -out public_key.pem

生成的证书是:

-----BEGIN CERTIFICATE REQUEST-----
MIICxjCCAa4CAQAwgYAxCzAJBgNVBAYTAkJHMQ4wDAYDVQQIDAVTb2ZpYTEOMAwG
A1UEBwwFU29maWExDDAKBgNVBAoMA0VHVDEMMAoGA1UECwwDU0JTMRMwEQYDVQQD
DApJdmFuIEJvYmV2MSAwHgYJKoZIhvcNAQkBFhFib2JlZmZAZWd0LWJnLmNvbTCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM2OyY0BvtnmtxbPw7tblSc+
2TOopefy1/voELFT+6SCfmmXhIkL7HXcbFekc0z3VtCaSpq64Tk7NMGPtm2XiVt7
Yzftw5pItsgyVwGuCk5sAMZ5qtDVjwTJv6m9TEV4hBA91ypYsXgcYBz4CIIw9Zm9
uSJVznEsnraQE8xFE87D6Z78BLSFej83A7YsGqxPRIbNCtismtj1GeLFegnX/u5l
PeyPa6A4bgXKgtWFoOEfdCQhWxZwxER0la16JAbMPuKmM+ZM0JJOPBhwdDmXEpv4
tvZ+LXgVo8v71jKK1eMTjvQA2e3bBqZFtpPi0gvYTENQE1yXoRE479wPDHqrum8C
AwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAypIZnsX/C63kdeRoQeMOVJa5CObWr
ALxtQIHdaR83SzY6K1Gg3SybHMnQ3wVUr71/tcuCYri6hJAzFKNYo676EdOxH8X4
IJSNQIHUPBRRvcaB2us+wmAEsHhFytzlBdsYNo1UM+QXgDArV/BeHt9R1GYaN9kz
C8ZSf5IYd/8vjDHRzpoeJ5+n4zMONOtCgXZU2WMEa7n9xbumfTnnZmaYGb3y3VVg
FHtEAFsM1K80zKDW7Nech1vLXnJVi/SS5ABl+jqLOdVVqM+WKaowJY6y+U786by4
q55Eoas7JZQIN+g6LeKywWj59CpYpeMczsp/WygKey6JkQ3qi1FiLaUB
-----END CERTIFICATE REQUEST-----

在我的程序代码中,我对 SSL 上下文结构进行了以下初始化:

...
, m_sslContext(ssl::context::sslv23)
...
m_sslContext.set_verify_mode(ssl::verify_peer | ssl::verify_fail_if_no_peer_cert);
m_sslContext.use_rsa_private_key_file("private_key.pem", ssl::context::pem);
m_sslContext.use_certificate_file("public_key.pem", ssl::context::pem);
...

但是 use_ceritificate_file 方法抛出异常并带有消息:

use_certificate_file: 没有起始行

为什么函数会失败?用 OpenSSL 周围的 boost::asio 包装器建立安全连接的正确方法是什么?

【问题讨论】:

  • 公钥不是证书。
  • 根据this,证书包含公钥,所以我互换使用。
  • 证书包含公钥,是的。但是公钥不包含证书。
  • 哦,好吧,您的public_key.pem 既不是证书也不是公钥。这是一个证书请求。您必须处理(签署)此证书请求。

标签: ssl encryption boost openssl boost-asio


【解决方案1】:

正如 cmets 中所讨论的,公钥不是证书。但是,您的 public_key.pem 也不是公钥。这是一个证书请求,您通常会将其发送给证书颁发机构为您签名。由于您想自己签名,您可以查看How to create a self-signed certificate with openssl? 了解如何签署您的请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多