2017-07-06 13 views
18

W naszej wewnętrznej sieci używamy samopodpisanego certyfikatu CA. Działa to dobrze od lat, zarówno w Safari, jak i naszym iOS, aż po iOS 10. Po prostu instalujemy certyfikat CA na dowolnym nowym urządzeniu lub symulatorze i wszystko działa, nawet z ATS. Umożliwia to dostęp do wszystkich naszych wewnętrznych serwerów testowych bez konieczności indywidualnego zaufania do każdego serwera.Zainstalowane certyfikaty iOS 11 nie są zaufane automatycznie (podpisane automatycznie)

Począwszy od iOS 11 zainstalowany certyfikat CA nie pozwala już Safari ani naszej aplikacji na zaufanie do certyfikatu dla żadnego z serwerów. Otrzymujemy następujące istotne dane z CFNETWORK_DIAGNOSTICS włączona do naszej aplikacji:

Error Code kCFErrorDomainCFNetwork Domain = -1200 =
_kCFNetworkCFStreamSSLErrorOriginalValue = -9802
_kCFStreamErrorDomainKey =
_kCFStreamErrorCodeKey = - 9802
NSLocalizedDescription = Wystąpił błąd SSL i bezpieczne połączenie z serwerem r nie można wykonać.
NSLocalizedRecoverySuggestion = Czy mimo to chcesz połączyć się z serwerem?

Spędziłem dużo czasu próbując rozwiązać ten problem, przeszukując StackOverflow i resztę sieci. Chociaż używamy AFNetworking w naszej aplikacji, wydaje się to nieistotne, ponieważ Safari już nie ufa tym serwerom za pośrednictwem CA. Wyłączenie ATS poprzez NSAllowsArbitraryLoads umożliwia dostęp do serwerów, ale oczywiście nie jest rozwiązaniem.

Nie wprowadzono żadnych zmian w naszym kodzie -URLSession:didReceiveChallenge:completionHandler, a my mamy odpowiednią (działającą od lat) implementację odpowiedzi na wezwanie przez challenge.protectionSpace.serverTrust.

Ponownie oceniłem i przetestowałem zarówno certyfikaty urzędu certyfikacji, jak i serwera, w każdym razie, o czym myślę, i działają wszędzie, z wyjątkiem iOS 11. Co mogło się zmienić w ATS na iOS 11, które mogło spowodować ten problem?

+0

Nasz zespół ds. Kontroli jakości zgłosił, że każde urządzenie Apple zaktualizowane do iOS 11 nie może już używać przeglądarki Safari ani przeglądarki Chrome do uzyskiwania dostępu do jakichkolwiek wewnętrznych stron https. Normalny sposób akceptowania certyfikatów z podpisem własnym, który działał przez lata i nadal działa z niezaktualizowanymi urządzeniami, przestał działać. Wygląda na to, że wiele osób ma ten sam problem https://twitter.com/jfsiman/status/910269395959795712 – rob

Odpowiedz

18

Podczas pisania tego pytania odkryłem odpowiedź. Zainstalowanie urzędu certyfikacji z przeglądarki Safari nie powoduje już automatycznego zaufania. Musiałem ręcznie zaufać mu z panelu Ustawienia zaufania certyfikatu (również wspomniano w this question).

enter image description here

Zastanawiałem anulowanie pytanie, ale myślałem, że to może być pomocne mieć niektóre z odpowiednim kodem i szczegóły ktoś szuka zalogować. Nigdy nie natknąłem się na ten problem aż do wersji iOS 11. Nawet wróciłem i potwierdziłem, że to automatycznie działa poprzez iOS 10.

Nigdy wcześniej nie musiałem dotykać tego panelu ustawień, ponieważ wszystkie zainstalowane certyfikaty były automatycznie zaufane. Być może zmieni się w czasie, gdy iOS 11 będzie dostarczany, ale wątpię w to. Mam nadzieję, że pomoże to uratować komuś czas, który zmarnowałem.

Jeśli ktoś wie, dlaczego zachowuje się inaczej w przypadku niektórych osób w różnych wersjach systemu iOS, chciałbym to wiedzieć w komentarzach.

+3

Witaj - Niestety mój certyfikat nie pojawia się w ustawieniach zaufania certyfikatu - czy masz jakieś sugestie na ten temat? – user3601148

+1

Twój certyfikat może nie pojawić się w ustawieniach zaufania certyfikatu, jeśli certyfikat jest typu zablokowanego. – Stoull

+2

Nice find - Zwraca uwagę, że tak było, odkąd iOS 10.3. Tutaj znajduje się odpowiedni wpis dotyczący pomocy technicznej firmy Apple: https://support.apple.com/en-au/HT204477 – F3CP

1

Zdarzyło się to również po tym, jak odwróciłem się na IOS11 na moim iPhonie. Kiedy próbuję połączyć się z siecią korporacyjną, wywołuje ona korporacyjny certyfikat i mówi, że nie jest zaufany. Naciskam przycisk "Zaufanie", a połączenie nie powiedzie się, a certyfikat nie pojawi się na liście zaufanych certyfikatów.

1

Ręka Apple trzy kategorie certyfikatów: Trusted, Always Ask i Blocked. Napotkasz problem, jeśli typ certyfikatu znajduje się na liście Blocked i Always Ask. Na Safari to show lubię: enter image description here

i można znaleźć typ Always Ask certyfikatów w Ustawienia> Ogólne> O> Certyfikat Zaufanie Ustawienie

Jest List of available trusted root certificates in iOS 11

Blocking Trust for WoSign CA Free SSL Certificate G2

+0

Nie ma opcji w Ustawieniach, która pozwala mi zawsze ufać certyfikatom? – aleclarson

+0

Od czasu aktualizacji mojego iPhone'a do iOS 11 napotykam ten problem. Certyfikat jest dostarczany przez Godaddy (nie mam kontroli nad). Jedynym sposobem na uzyskanie dostępu do sieci Wi-Fi jest najpierw zapomnieć o sieci, a następnie wprowadzić poświadczenia, a następnie zaufać certyfikatowi. Certyfikat nie pojawia się w Ustawieniach zaufania certyfikatu i nie widzę sposobu, aby go dodać. Następnym razem, gdy zaloguję się do sieci, jeśli najpierw nie zapomnę sieci, najpierw poprosi mnie o zaufanie do certyfikatu, następnie poprosi o poświadczenia, następnie poproszę ponownie o zaufanie do certyfikatu, ale błąd następnie staje się niepoprawny login. – rockhammer

3

Zalecane rozwiązanie jest instalacja i zaufanie certyfikatu z podpisem własnym (root). Zakładając, że utworzyłeś własny urząd certyfikacji, a hierarchia certyfikatów jest poprawna, nie musisz zmieniać oceny zaufania serwera. Jest to zalecane, ponieważ nie wymaga żadnych zmian w kodzie.

  1. Generowanie CA i certyfikatów (można użyć OpenSSL. Generating CA and self-signed certificates
  2. zainstalować certyfikat główny (plik * .cer) na urządzeniu - można otworzyć go przez Safari i powinien przekierować cię do Ustawienia
  3. Kiedy certyfikat jest zainstalowany, przejdź do świadectwa ustawień zaufania (Ustawienia> Ogólne> O> certyfikat ustawienia zaufania), jak w MattP odpowiedź.

Jeśli nie jest to możliwe, to trzeba zmienić ocenę zaufania serwera.

Więcej informacji w tym dokumencie: Technical Q&A QA1948 HTTPS and Test Servers

+0

Nie wiedziałem o # 3. Dziękuję bardzo! Szukałem tego dłużej, niż bym chciał. – adrum

+0

# 3 wykonał lewę. Dzięki! –

+0

Dziękujemy! Spędziłem kilka godzin próbując ustalić, dlaczego mój certyfikat podpisany przez mój CA jest niezaufany tylko na iOS. Nic złego w tym certyfikacie. To było # 3 powyżej. Zastanawiam się, dlaczego ustawienie zaufania nie jest powiązane z obszarem profili CA Ustawienia iOS. –

Powiązane problemy