如何配置我的apache服务器以验证我发给用户的x509证书?

时间:2013-03-08 21:43:37

标签: openssl x509 authentication

提前抱歉,这可能会成为一个漫长而混乱的帖子;因为那就是我所在的地方:我一直试图这样做两天而且我很困惑: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, Kvorak

1 个答案:

答案 0 :(得分:0)

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

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

第二个提供SSLCACertificateFile指令。

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

您需要做的是生成自签名CA,使用SSLCACertificateFile将其提供给Apache HTTPd,并发出由此CA签名的客户端证书。