Я запускаю Apache 2.2 в Windows, и mod_ssl отлично работает для доставки коммерчески подписанного сертификата сервера. (Сертификат с подстановочными знаками, хотя я не думаю, что это имеет значение.)
Я пытаюсь заставить сервер на некоторых VirtualHosts запрашивать сертификат клиента, поэтому я создал файл SSLCACertificateFile, содержащий PEM; Насколько я понимаю, этот список подписывающих DN должен быть предложен клиенту для ответа во время установления SSL.
У меня есть личный сертификат удостоверения StartSSL, и если я помещаю корневой сертификат StartSSL в SSLCACertificateFile, браузер (протестированный Chrome и IE) выскакивает «выберите сертификат» и показывает мне мой сертификат StartSSL.
Однако мой реальный вариант использования - использовать свой собственный центр сертификации и подписывать сертификаты клиентов, и это что я не могу заставить работать. Я сам подписываю ЦС, затем создаю клиентский CSR, подписываю его сертификатом ЦС и загружаю его в свое хранилище сертификатов клиента, затем помещаю CA PEM в свой SSLCACertificateFile - и браузер не предлагает сертификат клиента в «выберите сертификат».
Черт возьми.
Поскольку все это работает с ЦС и сертификатом StartSSL, мне интересно, действительно ли это проблема с моим сертификатом ЦС или сертификатом клиента, но я не могу понять, в чем может быть проблема; сертификат CA работает для подписи и имеет CA: TRUE; клиентские сертификаты имеют цель аутентификации клиента ... чего не хватает.
Не знаю, как диагностировать; Спасибо.
Вот мой CA PEM, вставленный в SSLCACertificateFile:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
bf:45:a7:db:f9:8e:8f:d0
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=California, L=San Diego, O=TestCA, OU=TestCA-OU, CN=TestCA-CN
Validity
Not Before: Mar 8 21:39:52 2013 GMT
Not After : Apr 7 21:39:52 2013 GMT
Subject: C=US, ST=California, L=San Diego, O=TestCA, OU=TestCA-OU, CN=TestCA-CN
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
<snip>
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
5E:99:47:8A:52:D3:38:20:68:A5:91:D9:E1:2E:6B:50:0D:5C:98:CB
X509v3 Authority Key Identifier:
keyid:5E:99:47:8A:52:D3:38:20:68:A5:91:D9:E1:2E:6B:50:0D:5C:98:CB
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
<snip>
... и вот сертификат клиента:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 20481 (0x5001)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=California, L=San Diego, O=TestCA, OU=TestCA-OU, CN=TestCA-CN
Validity
Not Before: Mar 8 23:46:55 2013 GMT
Not After : Mar 8 23:46:55 2014 GMT
Subject: C=US, ST=California, L=San Diego, O=TestClient, OU=TestClient-OU, CN=TestClient-CN
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
<snip>
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Key Encipherment
X509v3 Extended Key Usage:
TLS Web Client Authentication
Signature Algorithm: sha1WithRSAEncryption
<snip>
/ *********************************************** ****************** /
Дополнительная информация по запросу Майка (мне потребовалось несколько попыток, чтобы заставить работать openssl s_client.)
Вот результаты: [...]
---
Acceptable client certificate CA names
/C=UK/O=Test Certificates/CN=Test CA
/C=US/ST=California/L=San Diego/O=TestCA/OU=TestCA-OU/CN=TestCA-CN
/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certific
ation Authority
---
[...]
Итак, сервер говорит
/ C = США / ST = Калифорния / L = Сан-Диего / O = TestCA / OU = TestCA-OU / CN = TestCA-CN
является приемлемым сертификатом клиента, и у клиента есть
Эмитент: C = США, ST = Калифорния, L = Сан-Диего, O = TestCA, OU = TestCA-OU, CN = TestCA-CN
в своем магазине, но браузер не включает это в список, из которого я могу выбрать. Браузер делает предложить клиенту сертификаты, подписанные
/ C = UK / O = Тестовые сертификаты / CN = Тестовый CA
и
/ C = IL / O = StartCom Ltd./OU=Secure Digital Certificate Signing / CN = Центр сертификации StartCom
... возвращая меня к "WTF?"
Да, я отвечаю на свой вопрос.
Решено.
Оказывается, что KeyUsage keyEncipherment
НЕ является правильным keyUsage для клиента SSL / TLS. Правильное ограничение KeyUsage: KeyUsage digitalSignature
; полезная информация была найдена на эта статья Mozilla.