创建客户端证书

p.c*_*ell 1 iis-7 ssl-certificate

我从 3rd 方证书颁发机构获得了 SSL 证书。这是一个.cer文件。该证书已安装并在 IIS7 中正常工作。

该证书将其预期用途显示为服务器身份验证、客户端身份验证。

该站点需要通过客户端证书进行身份验证。我们没有使用客户端证书映射,而只是使用客户端证书作为身份验证的一种措施——如果你有一个,你就通过了身份验证。

  • 如何创建客户端证书?
  • CA 是否必须这样做,涉及另一个 CSR?
  • 这是我可以用其他工具自己做的事情吗?(OpenSSL 或其他)
  • 客户端证书需要什么格式?

Chr*_*s S 5

IIS(或大多数 HTTPD)中的客户端证书身份验证有些复杂。您必须将用户映射到证书。证书本身可以由服务器信任的任何 CA 颁发;您可以设置 AD CS 实例来颁发证书,甚至可以根据需要使用OpenSSL的本地副本来创建证书。

IIS.net上有一篇文章描述了客户端证书映射;以及有关启用它和以编程方式将证书与用户关联的信息。

编辑:
使用 OpenSSL 发布客户端证书的超短版本。

  1. openssl genrsa -des3 -out my_ca.key 4096
  2. openssl req -new -key my_ca.key -out my_ca.csr
  3. openssl x509 -req -days 365 -in my_ca.csr -signkey my_ca.key -out my_ca.crt
    您现在拥有 CA 证书和密钥。
  4. 对于您将生成的每个客户端证书,您都需要一个证书签名请求。如果您愿意,您可以为每个用户使用相同的证书,但这并不是一个特别好的主意,您绝对应该还需要某种其他形式的身份验证(例如密码)。客户端可以自己生成 CSR,或者您可以再次使用 openssl(请注意,每个 CSR 首先需要一个私钥):
    openssl genrsa -des3 -out client1.key 1024
    openssl req -new -key client1.key -out client1.csr
  5. 编辑您的 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
    
    Run Code Online (Sandbox Code Playgroud)
  6. 使用 CA 证书对密钥进行签名
    openssl ca -in client1.csr -out client1.crt

  7. 如果您为客户端创建了密钥和 CSR,则需要导出它们。将证书对导出到 PKCS12 文件,以便客户端可以导入它。
    openssl pkcs12 -export -in client1.crt -inkey client1.key -out client1.p12
  8. 如果您完成了#7,请将您创建的 PKCS12 文件发送给客户端;否则向他们发送来自 #6 的证书。

请注意,这是颁发签名证书的一种糟糕方式,因为它只是授予 CSR 指定的任何类型的证书。一定要注意你在做什么。如果您要颁发大量证书,则需要花一些时间进行更安全的设置。