2015-06-18 19 views
0

我使用的example server from boost asio,而我无法运行,并收到此错误,提高ASIO例外:use_private_key_file:键值不匹配

异常:use_private_key_file:键值不匹配

我改变绝对没有在程序中,除了键和端口。

我愿意使用我自己的关键权威,看起来好像在图书馆有问题,不排除我可能做一些根本性的错误,所以请协助。

在节目中,我使用的键下面几行:

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"); 

而创建这些键,我做了以下内容:

1-创建的证书颁发机构(CA)

openssl genrsa -aes256 -out ca.key 4096 
openssl req -new -x509 -extensions v3_ca -key ca.key -out ca.crt -days 36500 

2-创建服务器密钥并用权限密钥对其进行签名

openssl genrsa -des3 -out server.key 2048 
openssl x509 -req -days 3650 -in server.csr -signkey ../sslca/ca.key -out server.crt 
cp server.key server.key.secure 
openssl rsa -in server.key.secure -out server.key 
openssl dhparam -out dh512.pem 1024 

现在当我用这个配置运行服务器时,我得到了那个错误......我做错了什么?

如果您需要任何其他信息,请询问。

编辑:

所以我检查键与命令提示:

OpenSSL的RSA -noout -modulus -in server.key OpenSSL的REQ -noout -modulus -in server.csr 的OpenSSL x509 -noout -modulus -in server.crt

前两个产生相同的密钥,而最后一个是不同的。我必须确认crt文件是使用

openssl x509 -req -days 3650 -in server.csr -signkey ../sslca/ca.key -out server.crt 

建议?我的意思是如果不匹配密钥和证书是一个问题,那么我的签名方法是错误的!我究竟做错了什么?

+0

您可能希望使用“证书”与“钥匙”更加小心。一个证书_contains_一个密钥对,但它不一样。传统上,公钥被认为是证书的一部分。私钥是什么应该被称为密钥,但私钥(显然)需要匹配公钥(因此证书)或它不能工作。不知道这是否会有所帮助,但将它放在那里,因为你的措辞留有足够的空间来模糊 – sehe

+0

*“传统上,公钥被认为是证书的一部分......”* - 一个X.509证书将公钥绑定到身份。这是它的人生目标。公钥一直存在...... – jww

+0

@jww先生,请你解释一下吗?我真的需要帮助,不需要报价。我在做什么错了? –

回答

1

根据错误输出,您可以尝试的第一步是通过openssl命令确保您的证书与私钥匹配。这可能是这样做的,

openssl rsa -noout -modulus -in server.key 
openssl req -noout -modulus -in server.csr 
openssl x509 -noout -modulus -in server.crt 

如果模数相同,这意味着文件匹配,然后看看升压程序。 否则,可能会有文件混淆。

+0

这也是我的意思。 (你是什么意思“查看助推计划”?) – sehe

+0

是的,你是对的。对于那种不清楚的表达感到抱歉。我的意思是,检查/调查boost.org中的相关server.cpp源代码。 –

+0

密钥和csr文件具有相同的模数,但crt文件不同并且更长。我检查了我是如何签署它的,它使用'openssl x509 -req -days 3650 -in server.csr -signkey ../sslca/ca.key -out server.crt'。这看起来错了吗? –