
У меня есть SSL-сертификат от стороннего центра сертификации. Это файл .cer
. Сертификат установлен и работает нормально в IIS7.
Сертификат отображает свои предполагаемые цели как «Аутентификация сервера», «Аутентификация клиента».
Сайт требует аутентификации через клиентские сертификаты. Мынетне с использованием сопоставления клиентских сертификатов, а просто с использованием клиентских сертификатов в качестве меры аутентификации — если у вас есть один, вы аутентифицированы.
- Как создать клиентский сертификат?
- Должен ли центр сертификации делать это, привлекая другого представителя службы сертификации?
- Могу ли я сделать это самостоятельно с помощью другого инструмента? (OpenSSL или другого)
- Какой формат требуется для клиентских сертификатов?
решение1
Аутентификация клиентского сертификата в IIS (или большинстве HTTPD) несколько сложна. Вам нужно сопоставить пользователей с сертификатом. Сами сертификаты могут быть выпущены любым CA, которому доверяет сервер; вы можетенастроить экземпляр AD CSвыдавать сертификаты или даже использовать локальную копиюOpenSSLдля создания сертификатов, если хотите.
Есть статья на темуIIS.netописываяСопоставление клиентских сертификатов; с информацией о его включении и программной привязке сертификатов к пользователям.
Редактировать:
Сверхкороткая версия выпуска клиентских сертификатов с помощью 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. Обязательно уделяйте внимание тому, что вы делаете. Если вы собираетесь выпускать много сертификатов, вам нужно будет потратить некоторое время на более безопасную настройку.