情况是这样的:我有一个安全服务器,但我只想向拥有特定证书文件的用户提供访问权限。我已经设置了 Apache(请参阅如何为不支持 SSL 的 Web 服务器提供 HTTPS 访问?)。我想知道如何创建不同的证书来与我自己的 CA 进行验证。
此外,我可以在 Firefox/Chromium 等浏览器中导入这些证书文件吗?
(当然我希望使用 openssl 来实现这一切)
编辑:httpd.conf 的一部分
httpd.conf
# require a client certificate which has to be directly
# signed by our CA certificate in ca.crt
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile conf/ssl.crt/ca.crt
答案1
如果我理解正确,您需要大多数 openssl 发行版中附带的 easy-rsa 内容。您基本上需要构建 CA 部分(看起来您已经这样做了,但您可能希望根据这些文档重新执行此操作),然后创建客户端证书并使用 CA 证书对其进行签名(所包含的脚本会处理所有这些问题)。您可以在此处获取更多信息:
http://openvpn.net/index.php/open-source/documentation/miscellaneous/77-rsa-key-management.html
或者找到你的 openssl 安装的 easy-rsa 目录,它应该如下所示:
# cd /usr/share/doc/openvpn-2.0.9/easy-rsa/;ls
2.0 build-dh build-key build-key-pkcs12 build-req clean-all make-crl README revoke-full vars
build-ca build-inter build-key-pass build-key-server build-req-pass list-crl openssl.cnf revoke-crt sign-req Windows
按照 README 中的说明操作,然后使用 ./build-key 创建客户端证书。正如您所提到的,您需要在客户端上安装 ca.crt。我相信 Chrome 会使用系统 openssl(如果您愿意),我认为 Firefox 必须将证书安装到其自己的密钥库中(根据我的经验)。
我现在使用这个别名来构建客户端密钥,以便在将证书发送给用户之前它们会得到 CA 的签名:
build_key is a function
build_key ()
{
cd /usr/share/doc/openvpn-2.0.9/easy-rsa/;
echo "key name?";
read answer;
./build-key $answer
}