我从第三方证书颁发机构获得了 SSL 证书。这是一个.cer
文件。该证书已在 IIS7 中安装并正常运行。
该证书显示其预期用途为服务器身份验证、客户端身份验证。
该网站需要通过客户端证书进行身份验证。我们不是使用客户端证书映射,但仅仅使用客户端证书作为身份验证的一种衡量标准 - 如果您有一个,那么您就通过了身份验证。
- 如何创建客户端证书?
- CA 是否必须这么做,并让另一个 CSR 参与?
- 我可以用其他工具来做这件事吗?(OpenSSL 或其他)
- 客户端证书需要什么格式?
答案1
IIS(或大多数 HTTPD)中的客户端证书身份验证有些复杂。您必须将用户映射到证书。证书本身可以由服务器信任的任何 CA 颁发;您可以设置 AD CS 实例颁发证书,或者甚至使用本地副本OpenSSL如果需要的话,创建证书。
有一篇文章互联网信息服务描述客户端证书映射;提供有关启用它以及以编程方式将证书与用户关联的信息。
编辑:
使用 OpenSSL 颁发客户端证书的超短版本。
openssl genrsa -des3 -out my_ca.key 4096
openssl req -new -key my_ca.key -out my_ca.csr
openssl x509 -req -days 365 -in my_ca.csr -signkey my_ca.key -out my_ca.crt
您现在拥有 CA 证书和密钥。- 对于您将生成的每个客户端证书,您都需要一个证书签名请求。如果您愿意,您可以为每个用户使用相同的证书,但这不是一个特别好的主意,您肯定还需要其他形式的身份验证(例如密码)。客户端可以自己生成 CSR,或者您可以再次使用 openssl(请注意,每个 CSR 首先需要一个私钥):
openssl genrsa -des3 -out client1.key 1024
openssl req -new -key client1.key -out client1.csr
编辑你的 openssl.cnf 文件并填写相关的 CA 部分。它们是:
[ ca ] default_ca = CA_default # The default ca section [ CA_default ] dir = ./ # top dir database = $dir/my_ca.index # index file. new_certs_dir = $dir/newcerts # new certs dir certificate = $dir/my_ca.crt # The CA cert serial = $dir/my_ca.srl # serial no file private_key = $dir/my_ca.key # CA private key RANDFILE = $dir/rand # random number file default_days = 365 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = md5 # md to use policy = policy_any # default policy email_in_dn = no # Don't add the email into cert DN name_opt = ca_default # Subject name display option cert_opt = ca_default # Certificate display option copy_extensions = none # Don't copy extensions from request [ policy_any ] countryName = supplied stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional
使用 CA 证书对密钥进行签名
openssl ca -in client1.csr -out client1.crt
- 如果您为客户端创建了密钥和 CSR,则需要将其导出。将证书对导出到 PKCS12 文件,以便客户端可以导入它。
openssl pkcs12 -export -in client1.crt -inkey client1.key -out client1.p12
- 如果您完成了#7,请向客户端发送您创建的 PKCS12 文件;否则向他们发送#6 中的证书。
请注意,这是一种颁发签名证书的糟糕方法,因为它只是授予 CSR 指定的任何类型的证书。请务必注意您正在做的事情。如果您要颁发大量证书,则需要花一些时间进行更安全的设置。