Я пытался заставить симулятор iOS хорошо играть с нашими внутренними серверами разработки.
Я установил root CA, перетащив его в симулятор. Он включен по умолчанию, но я все равно включил / выключил его, просто чтобы быть уверенным.
Я подключился через safari и получил ошибку в названии. Подключился через приложение (на самом деле XCTest) и получил:
2020-03-30 11:45:53.001800+0300 xctest[20258:5222958] [] nw_coretls_callback_handshake_message_block_invoke_3 tls_handshake_continue: [-9812]
2020-03-30 11:45:53.001 xctest[20258:5222959] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
2020-03-30 11:45:53.004 xctest[20258:5222951] Error in <file/line>: Optional(Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “<domain>” which could put your confidential information at risk." UserInfo={NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x7fd53fd12480>, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9813, NSErrorPeerCertificateChainKey=(
"<cert(0x7fd546009200) s: <domain> i: <CA>>"
), NSUnderlyingError=0x7fd541a157e0 {Error Domain=kCFErrorDomainCFNetwork Code=-1202 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x7fd53fd12480>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9813, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9813, kCFStreamPropertySSLPeerCertificates=(
"<cert(0x7fd546009200) s: <domain> i: <CA>>"
)}}, NSLocalizedDescription=The certificate for this server is invalid. You might be connecting to a server that is pretending to be “<domain>” which could put your confidential information at risk., NSErrorFailingURLKey=https://<url>, NSErrorFailingURLStringKey=<url>, NSErrorClientCertificateStateKey=0})
Я подключился с chrome на Ma c, и он работает нормально. Я фактически скопировал CA из цепочки для ключей ma c в симулятор.
Перебрал контрольный список из https://support.apple.com/en-us/HT210176:
- размер ключа = 4096
- га sh алгоритм SHA-256 RSA
- есть имя DNS в SAN (но также и в CN). В нем говорится, что имена CN не являются доверенными, но не говорится, что они не разрешены.
- В EKU есть значение
- Это действительно в течение двух лет
Я также сравнил сертификат, представленный в Safari iOS, с сертификатом Chrome Ma c. Выглядит хорошо. Наконец, я установил 10.3 на симуляторе, чтобы исключить некоторые новые ошибки / ограничения.
Работа на Catalina / Xcode 11.4
Буду признателен за помощь в одном из следующих действий:
- Фактическое решение
- Помогите диагностировать это. Ссылка на более современные требования или инструмент, чтобы увидеть, почему сертификат не работает.