Я пытаюсь настроить свой apache, чтобы он доставлял все файлы сертификатов, чтобы всегда получать положительную проверку.
Чтобы было ясно, с какими-либо браузерами проблем нет, я говорю о openssl s_client
и curl
.
Например, бег openssl s_client
дает следующий результат:
CONNECTED(00000003)
depth=1 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Class 1 Primary Intermediate Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/C=DE/CN=xxx
i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
1 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
---
Server certificate
...
subject=/C=DE/CN=xxx
issuer=/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
---
No client certificate CA names sent
---
SSL handshake has read 4602 bytes and written 518 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 4096 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : DHE-RSA-AES256-GCM-SHA384
Session-ID: C45A306052F9815DF5ED7CDC7B6AD21FE4E54AC47A7B51BF3BF433748DECB318
Session-ID-ctx:
Master-Key: 8396742DE006FC8CEAEDE280B2CD839D0575D1FAD51498C855825BED82D484CC28F8F1D9F549512F08182FCD3BFF3FCD
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - 67 85 0d a9 99 68 b2 cc-d6 fb a6 8f ee ba 67 4f g....h........gO
0010 - 09 c1 e9 a3 1d 3e a0 49-96 54 7f df cf 0d fb ef .....>.I.T......
0020 - 57 3c c3 b4 8b e2 d9 b2-c1 92 db c7 c1 0c 3f 4b W<............?K
0030 - 1c 3b 14 f4 bf 8d 94 09-7f 00 f7 20 9a 2b 6f f0 .;......... .+o.
0040 - 34 48 d2 68 a5 e5 a0 58-3c 84 8b aa 3b 9a 27 27 4H.h...X<...;.''
0050 - 16 4b cd 3d cb 74 40 b8-08 96 a4 95 52 86 f4 aa .K.=.t@.....R...
0060 - d9 38 fb 9f 3f fc a8 ab-b9 c9 72 20 cd 3c 75 06 .8..?.....r .<u.
0070 - 2e b6 81 df bb e1 a6 b7-f4 bb 52 e1 8c ba 20 42 ..........R... B
0080 - e5 db 5c 48 cd 30 d6 f2-23 24 c6 be 6c 23 09 fa ..\H.0..#$..l#..
0090 - 9a cf 44 78 13 e7 f6 3e-7d c1 4e e3 1f 81 08 46 ..Dx...>}.N....F
00a0 - 49 3c 0e 80 00 d4 f5 f1-ad 95 99 9d 6f 33 e9 62 I<..........o3.b
00b0 - b2 82 14 a2 5d 82 95 49-88 8c 54 e2 d4 64 a6 1d ....]..I..T..d..
00c0 - e0 0f 75 88 57 ec 9a 81-41 0c 7b 71 81 8a 93 34 ..u.W...A.{q...4
Start Time: 1411561048
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
closed
Моя конфигурация apache выглядит так:
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/apache2/ssl/....cert.pem
SSLCertificateKeyFile /etc/apache2/ssl/....key.pem
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
Я также пробовал использовать ca-bundle.pem так как SSLCertificateChainFile и / или SSLCACertificateFile.
Второй результат в 19 (самоподписанный сертификат в цепочке сертификатов).
Как я могу настроить apache для доставки «правильного» файла CA, чтобы обойти установку сертификата CA на клиенте?
Что случилось?
Спасибо за любые подсказки.
Вы не можете обойтись без установленного на клиенте сертификата CA верхнего уровня, сертификат CA необходим для установления цепочки доверия. Промежуточные сертификаты могут быть предоставлены удаленным хостом с помощью Apache, но на вершине цепочки доверия CA должен присутствовать общедоступный корневой сертификат CA на клиенте.
Судя по вашим выводам, похоже, что ваш веб-сервер имеет сертификат, выданный StartCom Ltd. a.k.a. Startssl.
Похоже, что сертификат пакета CA или каталог CA на хосте, на котором запущены openssl и cURL, либо не включают сертификат CA StartCom Ltd., либо пакет или каталог CA не загружаются при запуске этих утилит. Я думаю, что это приводит к verify error:num=20:unable to get local issuer certificate
ошибка.
У меня нет под рукой чистого Debian, но Ubuntu может быть достаточно похожим, чтобы /etc/ssl/certs
это каталог для сертификатов CA. Вы можете попробовать заставить файл CA с --CAfile <filename>
или -CApath /etc/ssl/certs
в командной строке openssl работает правильно.