Я пытаюсь включить аутентификацию сертификата клиента в nginx, где сертификаты были подписаны промежуточным центром сертификации. Я могу получить эту работу отлично при использовании сертификата, подписанного самозаверяющим корневым центром сертификации; однако это не работает, когда подпись CA является промежуточным CA.
Мой простой раздел сервера выглядит следующим образом:
server {
listen 443;
server_name _;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
ssl_client_certificate ca.pem;
ssl_verify_client on;
ssl_verify_depth 1;
location / {
root html;
index index.html index.htm;
}
}
Для содержимого ca.pem я попытался использовать только промежуточный CA, а также конкатенацию промежуточного сертификата CA и корневого CA cert, то есть что-то вроде:
cp intermediate.crt ca.pem
cat root.crt >> ca.pem
Я также подтвердил, что сертификат действителен с точки зрения openssl при использовании той же самой цепочки CA:
openssl verify -CAfile /etc/nginx/ca.pem certs/client.crt
certs/client.crt: OK
Я экспериментировал с установкой ssl_verify_depth явно на 1 (как указано выше), а затем даже на 0 (не уверен, что именно это число означает точно), но все равно получает ту же ошибку.
Ошибка, которую я получаю во всех вариантах промежуточного CA, это "400 Bad Request" и, более конкретно, "Ошибка сертификата SSL" (не уверен, что именно это означает).
Может, nginx просто не поддерживает цепочки сертификатов для промежуточных сертификатов? Любая помощь очень ценится!