Пока что HTTPS у меня работает уже давно, поэтому не думаю, что с сертификатами сервера есть какие-то проблемы. Теперь я попытался добавить это в lighttpd.conf:
ssl.engine = "enable"
ssl.cipher-list = "ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4-SHA:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM"
ssl.pemfile = "/etc/ssl/private/steinbitglis.domain.pem"
ssl.ca-file = "/etc/ssl/private/GandiStandardSSLCA.pem"
ssl.verifyclient.activate = "enable"
ssl.verifyclient.enforce = "enable"
Журнал ошибок lighttpd говорит следующее:
(connections.c.299) SSL: 1 error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate
Firefox утверждает следующее:
ssl_error_handshake_failure_alert
Моя цель - заменить имя пользователя + кодовую фразу на сертификаты браузера, но я еще даже не смог запросить какой-либо сертификат из браузера. Если кто-нибудь знает хороший источник, чтобы узнать все подробности, которые мне нужны, чтобы поиграть с этой технологией, это было бы здорово.
Это тест, который я проводил на удаленном компьютере.
$ openssl s_client -CAfile GandiStandardSSLCA.pem -showcerts -connect steinbitglis.domain:443
CONNECTED(00000003)
depth=2 C = US, ST = UT, L = Salt Lake City, O = The USERTRUST Network, OU = http://www.usertrust.com, CN = UTN-USERFirst-Hardware
verify return:1
depth=1 C = FR, O = GANDI SAS, CN = Gandi Standard SSL CA
verify return:1
depth=0 OU = Domain Control Validated, OU = Gandi Standard SSL, CN = steinbitglis.domain
verify return:1
139713412519584:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1195:SSL alert number 40
139713412519584:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:591:
---
Certificate chain
0 s:/OU=Domain Control Validated/OU=Gandi Standard SSL/CN=steinbitglis.domain
i:/C=FR/O=GANDI SAS/CN=Gandi Standard SSL CA
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
1 s:/C=FR/O=GANDI SAS/CN=Gandi Standard SSL CA
i:/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
---
Server certificate
subject=/OU=Domain Control Validated/OU=Gandi Standard SSL/CN=steinbitglis.domain
issuer=/C=FR/O=GANDI SAS/CN=Gandi Standard SSL CA
---
Acceptable client certificate CA names
/C=FR/O=GANDI SAS/CN=Gandi Standard SSL CA
---
SSL handshake has read 2657 bytes and written 347 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : SSLv3
Cipher : AES256-SHA
Session-ID: CFD6D9A88B96888E9114F1EFF5DD23C83082D24F571B30105BA793FD06A1C311
Session-ID-ctx:
Master-Key: 4106EE7BB7FF8DE9793431CFFD4175842D02C08AC055D315DBEF7B9BCAD3FF5032769A18775142BEA2AF9E80694A32B3
Key-Arg : None
PSK identity: None
PSK identity hint: None
Start Time: 1338161044
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---
No client certificate CA names sent
Это означает, что Lighttpd не сообщает клиенту, какие центры сертификации действительны для клиентских сертификатов. Обычно это означает, что клиент не отправляет сертификат клиента (поскольку он не может решить, какой сертификат использовать).
Это не очень понятно, но # 1288 означает, что ssl.ca-file
директива используется для указания доверенных центров сертификации для аутентификации клиента, и я думаю, что она будет использоваться для отправки клиенту списка приемлемых центров сертификации. Убедитесь, что ваш ca-file
включает ЦС, которым подписан ваш клиентский сертификат.