2009-01-13 98 views
5

编辑:还没有解决我的问题,但我已经转移到新的和更令人兴奋的问题。
如果任何人有足够的洞察力,并且能够帮助未来绊倒这个问题的人,那就留在这里吧。Openssl命令行麻烦

嗨, 我试图发送一个加密的电子邮件从PHP到Outlook。因此,我需要生成一个证书以导入Outlook。使用openssl和它附带的CA.pl脚本生成一组密钥是没有问题的,但是当我尝试运行命令生成PKCS12文件以导入到Outlook时,它抱怨缺少“demoCA”目录。看来这个目录是openssl的一部分,并且在openssl配置文件中被引用......但我不知道它在哪里。我以许多方式从grep到聚光灯搜索驱动器(在os x上,虽然我真的不期望聚光灯找到任何东西),并且无法提供任何东西。

我试图运行的命令是:

$ openssl ca -cert newcert.pem -ss_cert newcert.pem 
Using configuration from /sw/etc/ssl/openssl.cnf 
./demoCA/private/cakey.pem: No such file or directory trying to load CA private key 
19918:error:02001002:system library:fopen:No such file or directory:bss_file.c:245:fopen('./demoCA/private/cakey.pem','r') 
19918:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:247: 

我有点当涉及到加密/ SSL一个小白的,所以我可能会丢失一些愚蠢的事(我敢肯定,如果它,哈哈)。

回答

6

您应该通过提供的脚本创建一个新的CA,这比处理所有openssl选项更容易。你可以做到这一点,它是在Windows内部与Cygwin捆绑在一起的openssl,或者使用你最喜欢的Unix发行版。我会告诉你如何用bash脚本来完成它(但perl脚本应该是相同的)。

$ ./CA.sh -newca 

这创建了带CA证书的demoCA目录。在您调用上述命令时,您将提示有关CA证书(CN,OU等)和CA私钥密码短语的字段。

现在您可以从证书请求中创建证书请求或证书。

$ ./CA.sh -newreq 

这提示新的证书请求字段和密码来加密生成的私钥。默认情况下,请求保留在与CA.sh(newreq.pem)相同的目录中。使用CN(Common Name)作为您的电子邮件地址非常重要。

现在你只需要签名并且你有一个完整的证书。

$ ./CA.sh -sign 

这将产生newcert.pem这是签名的证书请求。您拥有证书,您只需将证书和私钥打包在Microsoft CSP可识别的PFX或P12文件中。

然后将newreq.pem和newcert.pem的内容复制到文件中。

$ cat newreq.pem > keypair.pem 
$ cat newcert.pem >> keypair.pem 

现在通过openssl shell生成P12文件(这次我们没有任何脚本的帮助)。它会提示您输入生成请求时使用的密码,然后提示输出密码(用于加密p12文件中的私钥)。

$ openssl pkcs12 -export -in keypair.pem -out mykeypair.p12 
Enter pass phrase for keypair.pem: 
Enter Export Password: 
Verifying - Enter Export Password: 

等voilà。您有一个PKCS#12文件,您可以在Windows中双击并将其导入到密钥库,并将其用作邮件签名证书(我不记得默认选项是否足够,或者您需要在创建证书,以便Outlook将其识别为电子邮件签名证书)。您还需要将CA证书导入为受信任的CA(将cacert.pem复制到demoCA目录中的cacert.cer,然后双击它导入)。

+1

感谢您的真棒答案。你真的把所有的随机文档总结成一个让所有人都齐聚一堂的形式。谢谢!仅供参考,似乎CA.pl/sh允许创建PKCS#12文件。 CA.pl -pkcs12“[email protected]” – 2009-01-14 15:38:47