A autenticação de certificado de cliente no IIS (ou na maioria dos HTTPDs) é um pouco complicada. Você precisa mapear os usuários para o certificado. Os próprios certificados podem ser emitidos por qualquer autoridade de certificação na qual o servidor confie; você pode configura uma instância do AD CS para emitir os certificados, ou até mesmo usar uma cópia local de OpenSSL para criar os certificados se você quiser.
Há um artigo sobre IIS.net descrevendo Mapeamento de certificado de cliente ; com informações sobre como ativá-lo e associar programaticamente certificados a usuários.
Editar:
A versão ultracurta da emissão de certificados do cliente com o 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
Agora você tem um certificado de autoridade de certificação e uma chave. - Para cada um dos certificados de cliente gerados, você precisa de uma solicitação de assinatura de certificado. Você pode usar o mesmo certificado para cada usuário se quiser, mas não é uma boa idéia e você definitivamente deve exigir alguma outra forma de autenticação (como uma senha). Os clientes podem gerar os próprios CSRs, ou você pode com o openssl novamente (observe que cada CSR precisa de uma chave privada primeiro):
openssl genrsa -des3 -out client1.key 1024
openssl req -new -key client1.key -out client1.csr
-
Edite seu arquivo openssl.cnf e preencha as partes relevantes da CA. Eles são:
[ 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
-
Assinar a chave usando o certificado da CA
openssl ca -in client1.csr -out client1.crt
- Se você criou a chave e o CSR para o cliente, precisará exportá-los. Exporte o par de certificados para um arquivo PKCS12 para que o cliente possa importá-lo.
openssl pkcs12 -export -in client1.crt -inkey client1.key -out client1.p12
- Se você concluiu # 7, envie ao cliente o arquivo PKCS12 que você criou; caso contrário, envie-lhes o certificado do nº 6.
Observe que essa é uma maneira ruim de emitir certificados assinados porque ela simplesmente concede o tipo de certificado especificado pelo CSR. Certifique-se de prestar atenção ao que você está fazendo. Se você vai emitir muitos certificados, precisará investir algum tempo em uma configuração mais segura.