Документация для ssl_client_certificate
говорит:
Specifies a file with trusted CA certificates in the PEM format used to verify client certificates and OCSP responses if ssl_stapling is enabled.
The list of certificates will be sent to clients. If this is not desired, the ssl_trusted_certificate directive can be used.
Почему этот список рассылается клиентам? Я думал, что в процессе проверки клиента клиент отправляет свой сертификат (и промежуточные звенья) на сервер для проверки. Это неэффективно, если файл, на который указывает это свойство, большой?
С другой стороны, он говорит использовать ssl_trusted_certificate
если вы не хотите отправлять сертификаты клиенту. Если я удалю ssl_client_certificate
и только установить ssl_trusted_certificate
тогда nginx не запускается, так как у меня ssl_verify_client on;
В рамках подтверждения TLS сервер (если он настроен на требование аутентификации клиента через сертификаты X.509) отправит клиенту запрос сертификата. Часть этого запроса представляет собой список сертификатов ЦС, которым доверяет сервер. Ожидается, что клиент отправит сертификат проверки подлинности клиента, связанный с одним из сертификатов CA в этом списке.
Если подумать, то для клиента бессмысленно отправлять сертификат, если он не может быть проверен сервером, поэтому для сервера имеет смысл отправить список сертификатов CA, которым он доверяет. Для клиента было бы неэффективно отправлять сертификаты на сервер, если сервер им не доверяет. Это особенно верно для клиента, у которого много сертификатов - ему придется отправлять их все в надежде, что сервер доверяет одному из них.
nginx
генерирует этот список из файла сертификатов, на который указывает ssl_client_certificate
. Вам нужно отправить этот список или выключить ssl_verify_client
.
Также обратите внимание, что ssl_trusted_certificate
будет проверять клиентские сертификаты, но сертификаты в файле, на который указывает эта директива, не отправляются клиенту как часть рукопожатия TLS. Вместо этого эти сертификаты CA могут использоваться для проверки ответов OCSP при настройке сшивания OCSP.
Вы можете прочитать об этом в RFC 5246, раздел 7.4.4 и пока вы там, вы можете прочитать обо всех других кровавых подробностях рукопожатия TLS.