Apache ClientCertificateRequest에 대한 "허용 CA" 목록을 무시하는 TLS 1.2 클라이언트

Apache ClientCertificateRequest에 대한 "허용 CA" 목록을 무시하는 TLS 1.2 클라이언트

자체 서명된 CA와 iOS 및 MacOS의 테스트 클라이언트를 사용하여 Apache 2.4.54에서 작동하는 TLS 1.2 상호 인증이 있습니다. 클라이언트가 CertificateRequest에서 "허용되는 클라이언트 인증서 CA"를 인식하지 못한다는 점을 제외하면 모든 것이 작동합니다. 따라서 사용자/앱은 어느 것을 선택할지 알아야 합니다. 내 iOS 앱에서 URLAuthenticationChallenge.protectionSpace.distinguishedNames이 목록을 전달해야 하는 필드가 비어 있습니다. MacOS Safari에서는 단 1개의 인증서에만 올바른 발급자 CA가 있더라도 설치된 모든 인증서 중에서 사용자에게 인증서를 선택하라는 메시지가 표시됩니다. 사용

openssl s_client -connect myserver.com:443 -prexit

보고

Acceptable client certificate CA names
/C=US/ST=x/L=x/O=x/OU=x/CN=myca.com/emailAddress=x

관련 Apache 구성은 다음과 같습니다.

SSLCACertificateFile /etc/pki/CA/cacert.pem
SSLCADNRequestFile /etc/pki/CA/cacert.pem
SSLVerifyClient require
SSLVerifyDepth  1

없이도 동일한 결과를 얻습니다 SSLCADNRequestFile. Apache 로그를 보면 LogLevel trace8CertificateRequest에 기록되는 적절한 고유 이름이 표시된 것으로 보입니다. 이것은 원시 덤프이므로 이진 필드를 읽을 수 없지만 CA CN에 대한 올바른 ASCII는 볼 수 있습니다. iOS/MacOS에서 이 데이터를 볼 수는 있지만 사용할 수 없다고 판단한 것 같습니다.

CA 인증서에 가 있지만 X509v3 Basic Constraints: CA:TRUEkeyUsage 사양이 없습니다. 인증이 작동하므로 클라이언트가 올바른 인증서를 선택하는 한 인증서는 괜찮다고 가정합니다.

내가 뭘 잘못하고 있는지, 아니면 추가 디버깅 방법에 대한 아이디어가 있습니까?

답변1

내가 틀렸어. 허용되는 CA 목록이 내 iOS 앱에 전달됩니다(SSLCADNRequestFile 포함 여부에 관계없음). 연결 시작 시 두 개의 앱 콜백이 있으며 두 번째에는 DER로 인코딩된 CA 목록이 전달됩니다. MacOS Safari가 왜 잘못된 CA가 있는 인증서를 선택할 수 있는 옵션을 제공했는지 알아내야 하지만 적어도 목록은 제공됩니다.

관련 정보