Проблема с респондентом OCSP для проверки подлинности клиента Apache

У меня проблема с настройкой Apache 2.4.29 в Windows для аутентификации клиента с работающим респондентом OCSP. Аутентификация клиента работает нормально, когда респондент OCSP выключен. Я также могу убедиться, что статус сертификата моего клиента является «хорошим», когда я вручную использую OpenSSL для отправки запроса ответчику OCSP. Это проблема только при использовании в Apache ...

Центр сертификации (я действую как собственный центр сертификации):

  • Корневой ЦС> Промежуточный ЦС

  • Промежуточный ЦС> сертификат клиента 1

  • Промежуточный ЦС> Сертификат подписи OCSP

Файлы сертификатов

  • ca-chain.cert.pem (сертификаты корневого и промежуточного ЦС)

  • Intermediate.cert.pem (Сертификат Промежуточного ЦС)

  • ocsp.mydomain.com.cert.pem (сертификат подписи OCSP)

  • client1.cert.pem (сертификат клиента)

Настройка Windows

  • Сертификаты корневого ЦС и промежуточного ЦС импортируются в хранилища «Доверенные корневые центры сертификации» и «Промежуточные центры сертификации» соответственно вместе с их закрытым ключом (импортированным как .pfx).
  • Сертификат клиента импортируется в «Личное» хранилище сертификатов вместе с его закрытым ключом (импортированным как .pfx).

Сервер ответа OCSP

openssl ocsp -port ocsp.mydomain.com:2560 -text -sha256 \
    -index intermediate/index.txt \
    -CA intermediate/certs/ca-chain.cert.pem \
    -rkey intermediate/private/ocsp.mydomain.com.key.pem \
    -rsigner intermediate/certs/ocsp.mydomain.com.cert.pem

Ручной запрос OCSP (просто чтобы убедиться, что все настроено прямо за пределами Apache)

  • Запрос

    openssl ocsp -CAfile intermediate/certs/ca-chain.cert.pem \
        -url http://ocsp.mydomain.com:2560 -resp_text \
        -issuer intermediate/certs/intermediate.cert.pem \
        -cert intermediate/certs/client1.cert.pem
    
  • Ответ (... представляет собой исключенный подробный вывод, которого нет в ответе)

    ...
    Certificate ID:
        ...
        Issuer Key Hash: 6FBE86C0DE4500EE4945D1ECC3E41F9DACF5CEEC
        ...
    ...
    Response verify OK
    intermediate/certs/client1.cert.pem: good
    
  • «Хэш ключа эмитента» выше соответствует сертификату клиента «Идентификатор ключа центра сертификации» в моем «личном» хранилище сертификатов, все выглядит хорошо.

Настройка Apache

SSLVerifyClient require
SSLVerifyDepth 10
SSLOCSPEnable on
SSLOCSPDefaultResponder "http://ocsp.mydomain.com:2560"
SSLCACertificateFile "${SRVROOT}/conf/ssl/ca-chain.cert.pem"

Ошибка Apache

Ошибка библиотеки: OCSP_basic_verify: корневой CA не является доверенным (информация журнала ниже)

    1973: connecting to OCSP responder 'ocsp.mydomain.com:2560'
    1975: sending request to OCSP responder
    AH02275: Certificate Verification, depth 2, CRL checking mode: none (0) [subject: CN=Generic Code Root CA,O=Generic Code,ST=New York,C=US / issuer: CN=Generic Code Root CA,O=Generic Code,ST=New York,C=US / serial: B0992B306BCDD3BD / notbefore: Mar 10 21:09:10 2018 GMT / notafter: Mar  5 21:09:10 2038 GMT]
    AH02275: Certificate Verification, depth 1, CRL checking mode: none (0) [subject: CN=Generic Code Intermediate CA,O=Generic Code,ST=New York,C=US / issuer: CN=Generic Code Root CA,O=Generic Code,ST=New York,C=US / serial: 1000 / notbefore: Mar 10 21:20:32 2018 GMT / notafter: Mar  7 21:20:32 2028 GMT]
    _util_ocsp.c(96):1973: connecting to OCSP responder 'ocsp.mydomain.com:2560'
    _util_ocsp.c(124):1975: sending request to OCSP responder
    _util_ocsp.c(234): 1981: OCSP response header: Content-type: application/ocsp-response
    _util_ocsp.c(234): 1981: OCSP response header: Content-Length: 2270
    _util_ocsp.c(282): 1987: OCSP response: got 2270 bytes, 2270 total
    1925: failed to verify the OCSP response
    Library Error: error:27069070:OCSP routines:OCSP_basic_verify:root ca not trusted
    AH02276: Certificate Verification: Error (50): application verification failure [subject: CN=Generic Code Intermediate CA,O=Generic Code,ST=New York,C=US / issuer: CN=Generic Code Root CA,O=Generic Code,ST=New York,C=US / serial: 1000 / notbefore: Mar 10 21:20:32 2018 GMT / notafter: Mar  7 21:20:32 2028 GMT]
    2008: library error 1 in handshake (server localhost:443)
    Library Error: error:14089086:SSL routines:ssl3_get_client_certificate:certificate verify failed
    1998: Connection closed to child 38 with abortive shutdown (server localhost:443)

Ответ сервера ответчика OCSP при обнаружении ошибки Apache

  • Ответ (... представляет собой исключенный подробный вывод, которого нет в ответе)

    ...
    Certificate ID:
        ...
        Issuer Key Hash: 79D4440D1471385397B194EF1038CEEEEFBBAC24
        ...
    Cert Status: unknown
    ...
    
  • «Хэш ключа эмитента» выше соответствует идентификатору ключа центра сертификации корневого ЦС в моем хранилище сертификатов «Доверенные корневые центры сертификации», WTF? Почему?

Может ли кто-нибудь увидеть что-то неправильное в том, что я сделал, или узнать, почему это не работает?


person jbaranski    schedule 11.03.2018    source источник
comment
кажется, что проверка ocsp промежуточного ЦС терпит неудачу (не сертификат клиента). Может ли ваш сервер OCSP напрямую проверить промежуточный сертификат, если вы выполните запрос с помощью openssl ?.   -  person pedrofb    schedule 11.03.2018
comment
В ручном запросе OCSP в моем примере выше я передаю флаг эмитента с промежуточным сертификатом. Это то, что вы имеете в виду, говоря напрямую о проверке промежуточного сертификата?   -  person jbaranski    schedule 11.03.2018
comment
Нет, я хочу проверить промежуточное звено в качестве сертификата и корневой ЦС в качестве эмитента. похоже, что apache отправляет два запроса, один для сертификата, а другой для промежуточного звена. Проверьте, правильно ли работает второй   -  person pedrofb    schedule 11.03.2018
comment
Привет, у меня та же ошибка, что и у Apache, root ca не доверяет. Спасибо за подсказку, так что я буду отлаживать это дальше. Вы знаете, почему это произошло?   -  person jbaranski    schedule 12.03.2018
comment
Также следует отметить, что я не настраивал промежуточный ЦС для проверки на соответствие каким-либо респондентам OCSP. Сам сертификат корневого ЦС имеет свой собственный index.txt (IE: база данных) информации о сертификате, отдельный от промежуточного ЦС (ЦС, который выдает сертификаты клиента) - также при использовании OpenSSL напрямую он не выполняет этот второй запрос для проверки Промежуточный сертификат CA для ответчика OCSP, знаете ли вы, почему Apache это делает?   -  person jbaranski    schedule 12.03.2018
comment
Чтение документов mod_ssl ближе говорит, что SSLOCSPEnable проверяет всю цепочку сертификатов клиента, и я не вижу способа отключить какую-либо часть цепочки от проверки OCSP (промежуточный и корневой ЦС не были явно настроены для использования любого типа OCSP check) - я думаю, мне нужно вернуться и настроить все это и повторно запустить мой тест, кажется не идеальным ...   -  person jbaranski    schedule 12.03.2018


Ответы (1)


У меня это работает.

  • Повторно выпустите промежуточный центр сертификации с информацией OCSP
  • Настройте второй ответчик OCSP для информации OCSP на промежуточном ЦС, сертификат подписи второго респондента OCSP был подписан корневым ЦС
  • Повторно запустите тест, и теперь все в порядке

Похоже, что mod_ssl должен проверять всю цепочку сертификатов, а не останавливаться на самом сертификате клиента. Хотелось бы, чтобы это было настраиваемым, но сейчас этого нет ...

person jbaranski    schedule 12.03.2018