Dodanie certyfikatu z podpisem własnym do iPhone Simulator?

90

Mam certyfikat z podpisem własnym w punkcie końcowym mojego interfejsu API. Próbuję przetestować niektóre rzeczy za pomocą symulatora, ale otrzymuję „niezaufany certyfikat serwera”.

Próbowałem użyć safari na symulatorze, aby pobrać plik .crt, ale to nie działa.

Skąd iPhone Simulator bierze swój brelok? Jak mogę dodać zaufany certyfikat, aby moja aplikacja działała?

AKTUALIZACJA

Uruchomiłem go, tworząc CA, a następnie dodając certyfikat CA za pomocą narzędzia do obsługi iPhone'a. Wtedy mogłem mieć certyfikat podpisany tym certyfikatem CA na serwerze API i NSConnection po prostu działało. Z jakiegoś powodu nie udało mi się uruchomić go przy użyciu certyfikatu z podpisem własnym. Muszę spróbować ponownie, używając oprogramowania do obsługi administracyjnej.

Moje prawdziwe pytanie brzmi: jak sprawić, by to działało na symulatorze? Myślę, że symulator używa pęku kluczy z rzeczywistego komputera.

jr.
źródło
1
Niedawno natrafiłem na to z hostem, któremu zaufał certyfikat CA, który został zaimportowany do pęku kluczy logowania na rozwijanym komputerze Mac. (To znaczy, moje lokalne Safari ufa witrynie, ale nie symulatorowi). Byłem zaskoczony, że nie działa z symulatorem. W jaki sposób można wykorzystać narzędzie do obsługi administracyjnej iPhone'a do manipulowania zaufanymi certyfikatami w symulatorze?
mpontillo

Odpowiedzi:

115

Tylko dla informacji, jeśli ktoś nadal napotyka ten problem:

po prostu przeciągnij i upuść swoje pliki .cer do uruchomionego okna Symulatora. Zobaczysz migające Safari, a następnie okno dialogowe importowania twojego certyfikatu (lub urzędu certyfikacji) ...

Praca dla symulatora iOS 7 (i myślę, że działała też na iOS 6).

seafoxx
źródło
3
Przeciąganie i upuszczanie działa dobrze na symulatorze iOS 7. Mogę zweryfikować, że NIE działa na symulatorach iOS 6.0 / 6.1.
John Bowers,
2
czy to ja, czy od czasu przejścia na Xcode 6, ta funkcja przeciągania i upuszczania działa teraz tylko w wersji symulatora iOS 8. Wypróbowałem symulator iPhone'a 5s iOS 7 i iOS 7.1, nic się nie dzieje, gdy przeciągam certyfikat na okno symulatora. A teraz utknąłem i nie mogę przetestować mojej aplikacji w niczym innym niż iOS 8.
Fred,
2
Znalazłem obejście dla iOS 7 i 7.1: umieść plik .cer na dostępnym serwerze internetowym (dodaj typ mime application / x-x509-ca-cert, jeśli jest to potrzebne) i użyj Safari na symulatorze, aby pobrać certyfikat z serwera WWW. Następnie poprosi Cię o zainstalowanie go tak, jakbyś go przeciągnął i upuścił.
Fred
3
Jesteś bogiem, przyjacielu
CommaToast
1
jesteś mężczyzną! Wiedziałem, że musi być na to szybki sposób.
pqsk
45

Dla tych, którzy stwierdzili, że przeciąganie i upuszczanie certyfikatu w symulatorze nie działa, wprowadzono ostatnią zmianę, która dodaje dodatkowy krok .

Symulatorowi należy wyraźnie poinstruować, aby ufał głównemu urzędowi certyfikacji. Zrób to, przechodząc do:

Ogólne -> Informacje -> Ustawienia zaufania certyfikatu -> „Włącz pełne zaufanie dla certyfikatu głównego” dla konkretnego certyfikatu

Zobacz pełną odpowiedź tutaj :

Gautham C.
źródło
13
Opcja „Enable Full Trust for Root Certificate” nie jest dostępna w moim symulatorze z systemem iOS 10.3
Jesus Rodriguez,
1
Czy kiedykolwiek rozwiązałeś ten problem - certyfikatu głównego nie ma na liście Certificate Trust Settings? Mój profil jest dodawany i zawiera certyfikat - to był po prostu pracuje mniej niż miesiąc temu. Zresetuj moje pamięci podręczne symulatora, teraz certyfikat został dodany, ale nie ma opcji, aby w pełni mu zaufać.
chrisp
3
W moim przypadku opcja „Włącz pełne zaufanie dla certyfikatu głównego” pojawia się tylko dla certyfikatów głównych. Nie pojawia się w przypadku certyfikatów pośrednich ani listów.
John Girata,
1
Odkryłem również, że certyfikat musi mieć opcję podstawowego ograniczenia CA ustawioną na true: basicConstraints = CA:TRUEpodczas generowania certyfikatu za pomocą openssl. W przeciwnym razie nie okaże się, że jest zaufany.
sandinmyjoints
3
Wygląda na to, że w wersji 12.2 (prawdopodobnie również we wcześniejszych wersjach) procedura polega teraz na przejściu do ogólnych> profili, wybraniu certyfikatu i
kliknięciu
23

Miałem ten sam problem od miesięcy i dzisiaj KOŃCOWO rozwiązałem go:

ADVTrustStore

Będziesz chciał użyć projektu o nazwie ADVTrustStore z github. Robi trochę fantazyjnej magii, ale poprawnie zainstaluje certyfikaty w twoim głównym magazynie zaufania w symulatorze.

Kroki, aby zainstalować niestandardowy certyfikat

# Clone the repo
git clone https://github.com/ADVTOOLS/ADVTrustStore.git

# Enter the repo directory
cd ADVTrustStore/

# Copy your .crt file 
cp somewhere/something.crt my.crt

# conver to a .pem file
openssl x509 -in my.crt -out my.pem -outform PEM

# Install the pem in the simulators
./iosCertTrustManager.py -a my.pem

Korzystając z tego procesu, mogłem uzyskać obrazy GoogleStreetView do prawidłowego renderowania, gdy znajdowałem się za firmową zaporą sieciową przy użyciu protokołu SSL, rezygnując z certyfikatów z podpisem własnym

tło

Używałem CharlesProxy i zauważyłem, że poprawnie instaluje certyfikaty w symulatorze, ale nie pojawiły się one w sekcji Ustawienia - Profile . Następnie po kilku poszukiwaniach odkryłem to narzędzie. Prawdopodobnie istnieje kilka innych narzędzi, ale w moim przypadku przeciąganie i upuszczanie nigdy nie działało poprawnie we wszystkich przypadkach. Safari byłoby w porządku, ale nie moje aplikacje.

Jeef
źródło
3
WSKAZÓWKA: zrestartuj symulator, aby zainstalować nowy certyfikat.
Kiko Seijo
1
To załatwiło sprawę z Xcode 10.1 i symulatorem iPhone'a 5s 12.1. Musisz tylko upewnić się, że powiesz skryptowi, aby zainstalował certyfikat w odpowiednim symulatorze. Jeśli używasz tego w połączeniu z badssl.test (tj. Badssl działającym lokalnie w dockerze), będziesz musiał zhakować plik .pem, aby usunąć wszystko oprócz samego certyfikatu.
Andrew Ebling
to uratowało mi życie. prawie nie ma wsparcia społeczności dla instalowania certyfikatów z podpisem własnym na iOS. Dziękuję Ci!
lsimonetti
Potwierdzam, że działa w Symulatorze 10.3 na iPhone X z iOS 12.4.
Siergiej Baszarow
10

Każdy, kto korzysta z OS X Catalina, powinien sprawdzić: https://forums.developer.apple.com/thread/124056 .

Catalina obecnie blokuje dostęp do folderu Pulpit, Dokumenty i Pobrane. Przeniosłem pliki certyfikatów do folderu współdzielonego i stamtąd przeciągam i upuszczam pliki do symulatora.

KnightCavalry
źródło
3
Bóg da ci zdrowie :)
Booharin
9

Przyjrzyj się skryptowi powłoki, którego używa Charles do zainstalowania własnego certyfikatu z podpisem własnym w pęku kluczy symulatora. http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

Zobacz też:

Wygląda na to, że zainstalowanie własnego certyfikatu w symulatorze może wymagać zainstalowania go na urządzeniu za pośrednictwem przeglądarki Safari, a następnie skopiowania wynikowego wiersza z urządzenia TrustStore.sqlite3do symulatora.

Jonasza
źródło
Odpowiedź @nailer zaktualizowana o kilka dodatkowych odniesień, o ile wiem, format tych obiektów blob w TrustStore.sqlite3 jest nieprzejrzysty (i może ulec zmianie), więc podejście innych wydaje się polegać na zainstalowaniu certyfikatu na urządzeniu za pośrednictwem Safari i kopiowanie wynikowego wiersza TrustStore do swojego symulatora.
Jonah,
2

Używając iPhone Backup Extractor , skopiowałem iPhone'a TrustStore.sqlite3do ~/Library/Application Support/iPhone Simulator/6.0/Library/Keychains, nadpisując istniejący plik. Próbowałem wstawić tylko jeden wiersz z następującym sqlite, ale nie mogłem go uruchomić.

sqlite3 ~/backup/iOS\ Files/TrustStore.sqlite3
sqlite3>.mode insert
sqlite3>.output working.sql
sqlite3>select * from tsettings;
sqlite3>.quit

Teraz working.sqlma całą zawartość tabeli tsettings (w moim przypadku 1 wiersz).

sqlite3 ~/Library/Application\ Support/iPhone\ Simulator/6.0/Library/Keychains/TrustStore.sqlite3
sqlite3>INSERT INTO tsettings VALUES(X'...
sqlite3>.quit

Ponownie, powyższe polecenia sqlite nie działały dla mnie, ale mogą być dobrym punktem wyjścia dla kogoś innego. Kopiowanie całości TrustStore.sqlite3z kopii zapasowej do symulatora działało dobrze.

Heath Borders
źródło
0

Przeciąganie i upuszczanie działało, ale nie działało na XCode 12. Udało mi się otworzyć przeglądarkę Safari w Symulatorze, a następnie wpisać adres URL pliku z certyfikatem .crt. Dawny.

file:///Users/[folder_path]/[certificate.crt]

Następnie musisz przejść do ustawień symulatora i zainstalować certyfikat, przechodząc do sekcji Ogólne> Profile.

Tharindu Madushanka
źródło