-2

提前抱歉,这最终可能是一个冗长而混乱的帖子;因为这就是我所在的地方:我已经尝试这样做两天了,我很困惑:P

上下文:我有一个网站(我们将其称为 www.mysite.com),并且我从主要 CA 获得了有效证书。HTTPS 工作正常,证书是各​​种有效的。

目标:我现在想向我授权使用我的网站的人颁发证书,以便我可以为其添加额外的安全层,并让 Apache 在他们看到 PHP 网站的结果之前拒绝未经授权的用户或使用这些凭据登录。

我所做的:我至少遵循了三个不同的教程,并阅读了六篇关于如何颁发这些证书的教程,但简而言之,它们无法验证。大多数教程都谈到了建立我自己的自签名 CA 证书,然后使用该证书的密钥来签署用户请求的其他证书。我已经尝试过了,Firefox(版本 19.02)和 IE(版本 8 :( )都无法连接,我不明白为什么了。

所以具体的问题:

1. Apache的命令有错吗? 当我包括:

    SSLEngine on    
    SSLCertificateFile /etc/path/to/www.mysite.com.crt
    SSLCertificateKeyFile /etc/path/to/www.mysite.com.key
    SSLCACertificateFile /etc/path/to/www.mysite.com.cabundle
    SSLVerifyClient require
    SSLVerifyDepth 10

在我的 httpd.conf 文件中,服务器适当地拒绝没有证书的访问。但是,我已经为最终用户生成了我认为是有效的证书,但它仍然被拒绝。如果上面显示的文件是主要 CA (VeriSign) 给我的文件,那么我只是创建了一个错误的用户证书吗?那些 apache 命令实际检查的是什么?

2. openssl 的标志是如何工作的? 我正在创建用户的证书:

openssl ca -in ./path/to/usersrequest.csr -cert ./etc/path/to/www.mysite.com.crt -keyfile ./etc/path/to/www.mysite.com.key -out ./path/to/userscert.crt

也许我使用了错误的密钥或什么?我应该使用从 VeriSign 证书中获得的公钥还是私钥?如果我理解正确阅读的内容,我应该能够简单地向我的最终用户颁发一个新证书,用我的“官方”证书中的相同密钥签名,它应该可以工作......但它不是:(

我也试过:

openssl x509 -req -CA /etc/path/to/cert.pem -CAkey /etc/path/to/cert.pem -CAcreateserial -in usersrequest.csr -out user.crt

我得到一个错误,上面写着unable to load CA private key......我什至不知道那是什么意思。

最后,我知道这些可能是 n00b 问题,答案正盯着我的脸,但我一直在努力学习这个主题并编写代码两天了,我的大脑只是被炒了......我会继续努力,但如果有人能指出我正确的方向,我会非常感激。

TIA,科沃夏克

4

1 回答 1

0

您需要了解签署服务器证书的 CA 与用于签署用户客户端证书的自签署证书之间的区别。

您使用 SSLCertificateChainFile 指令向 Apache HTTPd 提供第一个,如果我正确理解您的设置,您需要指定 /etc/path/to/www.mysite.com.cabundle 作为参数。

第二个由 SSLCACertificateFile 指令提供。

理论上它们可能是相同的,但这意味着您需要为您需要颁发的每个客户端证书发送一个由主要 CA 签名的证书请求 (CSR),因为您不能自己签名。您不能使用服务器证书对其进行签名,因为它不是AC而是服务器证书,因此无法有效地签署其他证书。

您需要做的是生成一个自签名 CA,将其与 SSLCACertificateFile 一起提供给 Apache HTTPd,并颁发由该 CA 签名的客户端证书。

于 2013-03-08T22:29:13.320 回答