如何使用我自己的 CA 为每个用户创建 SSL 证书?

如何使用我自己的 CA 为每个用户创建 SSL 证书?

情况是这样的:我有一个安全服务器,但我只想向拥有特定证书文件的用户提供访问权限。我已经设置了 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
}

相关内容