我正在尝试制作假CA并与其签署证书以与stunnel一起使用(它似乎只是调用OpenSSL例程,因此您可能不需要知道程序来帮助:)。但是,stunnel一直拒绝我的证书,说它没有用正确的密钥签名!
这就是我用OpenSSL生成密钥和证书的方式:
openssl genrsa -out ca_key.pem 1024
openssl req -config ./root2.cfg -new -sha1 -x509 -key ca_key.pem -out ca_cert.pem -subj "/CN=blah.blah.com/OU=Dev blah CA/C=CA/ST=blah/L=blah/O=Blah Software"
openssl genrsa -out MPS_key.pem 1024
openssl req -config ./MPS2.cfg -new -sha1 -key MPS_key.pem -out MPS_cert_req.pem -subj "/CN=blah.blah.com/OU=blah Certificate/C=CA/ST=blah/L=blah/O=Blah Software"
openssl x509 -req -in MPS_cert_req.pem -signkey ca_key.pem -out MPS_cert.pem -extensions MPS_ext
然后我的stunnel.conf有这些条目:
CAfile = ca_cert.pem
key = MPS_key.pem
cert = MPS_cert.pem
当我尝试启动stunnel时,我得到通用的OpenSSL“密钥与证书不匹配”错误:
2009.09.09 16:36:04 LOG3[492:172]: SSL_CTX_use_RSAPrivateKey_file: B080074: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
我在生成文件时做错了吗?
答案 0 :(得分:4)
我将总结你的设置:
如果您阅读了OpenSSL的x509命令(http://openssl.org/docs/apps/x509.html)的参考,您将看到-signkey参数指示OpenSSL使用给定的私钥对提供的证书进行自签名。这不你想要的。
您要做的是创建一个自签名CA,然后使用它来签署您的CSR并生成有效的证书。
openssl verify ca_cert.pem
ca_cert.pem: /CN=blah.blah.com/OU=Dev blah CA/C=CA/ST=blah/L=blah/O=Blah Software
error 18 at 0 depth lookup:self signed certificate
OK
openssl verify MPS_cert.pem
MPS_cert.pem: /CN=blah.blah.com/OU=blah Certificate/C=CA/ST=blah/L=blah/O=Blah Software
error 18 at 0 depth lookup:self signed certificate
OK
相关选项为-CA,-CAkey和-set_serial
openssl x509 -CA ca_cert.pem -CAkey ca_key.pem -set_serial 1 -req -in MPS_cert_req.pem -out MPS_cert2.pem -days 365
这应该会产生一个由您的CA签名的证书,该证书本身是自签名的。