เพิ่มใบรับรองที่ลงนามด้วยตนเองไปยังเครื่องจำลอง iPhone หรือไม่


90

ฉันมีใบรับรองที่ลงนามด้วยตนเองที่จุดสิ้นสุดของ API ของฉัน ฉันกำลังพยายามทดสอบบางอย่างโดยใช้โปรแกรมจำลอง แต่ได้รับ "ใบรับรองเซิร์ฟเวอร์ที่ไม่น่าเชื่อถือ"

ฉันได้ลองใช้ซาฟารีบนโปรแกรมจำลองเพื่อดาวน์โหลดไฟล์. crt แต่ดูเหมือนจะไม่ได้ผล

iPhone Simulator รับพวงกุญแจมาจากไหน? ฉันจะเพิ่มใบรับรองที่เชื่อถือได้เพื่อให้ใบสมัครของฉันทำงานได้อย่างไร

อัปเดต

ฉันใช้งานได้โดยการสร้าง CA จากนั้นเพิ่มใบรับรอง CA โดยใช้เครื่องมือจัดเตรียม iPhone จากนั้นฉันก็สามารถมีใบรับรองที่ลงนามโดยใบรับรอง CA นั้นบนเซิร์ฟเวอร์ API และ NSConnection ก็ใช้งานได้ ฉันไม่สามารถทำให้มันใช้งานได้โดยใช้ใบรับรองที่ลงชื่อด้วยตนเองด้วยเหตุผลบางประการ ฉันต้องลองใหม่อีกครั้งโดยใช้ซอฟต์แวร์การจัดเตรียม

คำถามที่แท้จริงของฉันคือฉันจะทำให้สิ่งนี้ทำงานกับเครื่องจำลองได้อย่างไร ฉันคิดว่าเครื่องจำลองใช้พวงกุญแจของคอมพิวเตอร์จริง


1
ฉันเพิ่งได้รับสิ่งนี้กับโฮสต์ที่เชื่อถือได้โดยใบรับรอง CA ที่นำเข้าสู่พวงกุญแจการเข้าสู่ระบบบน Mac การพัฒนา (นั่นคือ Safari ในพื้นที่ของฉันเชื่อถือไซต์ แต่ไม่ใช่ตัวจำลอง) ฉันรู้สึกประหลาดใจที่มันใช้งานไม่ได้กับเครื่องจำลอง เราจะใช้เครื่องมือจัดเตรียม iPhone เพื่อจัดการใบรับรองที่เชื่อถือได้บนเครื่องจำลองได้อย่างไร
mpontillo

คำตอบ:


115

สำหรับข้อมูลหากยังมีคนพบปัญหา:

เพียงแค่ลากและวางไฟล์. cer ของคุณลงในหน้าต่าง Simulator ที่กำลังทำงานอยู่ คุณจะเห็น Safari กะพริบจากนั้นกล่องโต้ตอบการนำเข้าสำหรับใบรับรองของคุณ (หรือผู้ออกใบรับรอง) ...

ทำงานกับ iOS 7 Simulator (และฉันคิดว่าก็ใช้ได้กับ iOS 6 ด้วย)


3
การลากและวางใช้งานได้ดีสำหรับโปรแกรมจำลอง iOS 7 นั่นเอง ฉันสามารถตรวจสอบได้ว่ามันใช้ไม่ได้กับเครื่องจำลอง iOS 6.0 / 6.1
John Bowers

2
เป็นฉันหรือตั้งแต่ฉันอัปเกรดเป็น Xcode 6 ตอนนี้สิ่งลากและวางนี้ใช้งานได้กับโปรแกรมจำลอง iOS 8 เท่านั้น ลองใช้เครื่องจำลอง iPhone 5s iOS 7 และ iOS 7.1 แล้วไม่มีอะไรเกิดขึ้นเมื่อฉันลากใบรับรองไปที่หน้าต่างจำลอง ตอนนี้ฉันติดขัดและไม่สามารถทดสอบแอปของฉันใน iOS 8 ได้เลย
Fred

2
หาวิธีแก้ปัญหาสำหรับ iOS 7 และ 7.1: วางไฟล์. cer บนเว็บเซิร์ฟเวอร์ที่เข้าถึงได้ (เพิ่มประเภทใบ้แอปพลิเคชัน / x-x509-ca-cert หากต้องการ) และใช้ Safari บนเครื่องจำลองเพื่อดาวน์โหลดใบรับรอง จากเว็บเซิร์ฟเวอร์ จากนั้นจะขอให้คุณติดตั้งเหมือนกับว่าคุณลากแล้วทิ้ง
Fred

3
คุณคือพระเจ้าเพื่อนของฉัน
CommaToast

1
คุณคือผู้ชาย! ฉันรู้ว่าต้องมีวิธีที่รวดเร็วในการทำเช่นนี้
pqsk

45

สำหรับผู้ที่พบว่าการลากและวางของใบรับรองบน Simulator ที่ไม่ได้ทำงานมีการเปลี่ยนแปลงล่าสุดที่เพิ่มขั้นตอนพิเศษ

ต้องมีการแจ้งโปรแกรมจำลองอย่างชัดเจนให้เชื่อถือ root CA โดยไปที่:

General -> About -> Certificate Trust Settings -> "Enable Full Trust for Root Certificate" สำหรับใบรับรองเฉพาะของคุณ

ดูคำตอบทั้งหมดที่นี่ :


13
ตัวเลือก "Enable Full Trust for Root Certificate" ไม่มีในเครื่องจำลองของฉันที่ใช้ iOS 10.3
Jesus Rodriguez

1
คุณเคยแก้ไขปัญหานี้หรือไม่ - ใบรับรองหลักไม่อยู่ในรายการCertificate Trust Settingsหรือไม่? โปรไฟล์ของฉันถูกเพิ่มและมีใบรับรองซึ่งเพิ่งใช้งานได้ไม่ถึงเดือนที่ผ่านมา รีเซ็ตแคชเครื่องจำลองของฉันตอนนี้มีการเพิ่มใบรับรอง แต่ไม่มีตัวเลือกให้เชื่อถือได้อย่างเต็มที่
chrisp

3
ในกรณีของฉันตัวเลือก "Enable Full Trust for Root Certificate" จะปรากฏขึ้นสำหรับใบรับรองหลักเท่านั้น ไม่ปรากฏสำหรับใบรับรองระดับกลางหรือใบ
John Girata

1
ฉันยังพบว่าใบรับรองต้องมีตัวเลือกข้อ จำกัด พื้นฐานของ CA ที่ตั้งค่าเป็น true: basicConstraints = CA:TRUEเมื่อสร้างใบรับรองโดยใช้ openssl มิฉะนั้นจะไม่ปรากฏว่าเชื่อถือได้
sandinmyjoints

3
ดูเหมือนว่าในวันที่ 12.2 (อาจเป็นเวอร์ชันก่อนหน้านี้เช่นกัน) ขั้นตอนคือไปที่ทั่วไป> โปรไฟล์เลือกใบรับรองและกดติดตั้งที่ด้านขวาบน
MaxPRafferty

23

ฉันมีปัญหาเดียวกันนี้มาหลายเดือนแล้วและในที่สุดวันนี้ฉันก็แก้ไขได้ด้วย:

ADVTrustStore

คุณจะต้องการใช้โปรเจ็กต์ชื่อADVTrustStoreจาก github มันใช้เวทมนตร์แฟนซี แต่จะติดตั้งใบรับรองอย่างถูกต้องในร้านค้าที่เชื่อถือได้ของคุณบนเครื่องจำลอง

ขั้นตอนในการติดตั้งใบรับรองแบบกำหนดเอง

# 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

เมื่อใช้กระบวนการนี้ฉันสามารถรับภาพ GoogleStreetView เพื่อแสดงผลได้อย่างถูกต้องในขณะที่อยู่หลังไฟร์วอลล์ขององค์กรโดยใช้ SSL ลาออกพร้อมใบรับรองที่ลงนามด้วยตนเอง

พื้นหลัง

ผมใช้ CharlesProxy และผมสังเกตเห็นมันก็ถูกต้องติดตั้งลงในใบรับรอง Simulator แต่พวกเขาไม่ได้แสดงในการตั้งค่า - โปรไฟล์ส่วน หลังจากการค้นหาบางครั้งฉันก็ค้นพบเครื่องมือนี้ อาจมีเครื่องมืออื่น ๆ อยู่บ้าง แต่ในกรณีของฉันการลากแล้วปล่อยไม่เคยทำงานอย่างถูกต้องในทุกกรณี Safari จะดี แต่ไม่ใช่แอปพลิเคชันของฉัน


3
เคล็ดลับ: รีสตาร์ทโปรแกรมจำลองเพื่อรับใบรับรองใหม่ที่ติดตั้ง
Kiko Seijo

1
นี่เป็นเคล็ดลับสำหรับฉันด้วยโปรแกรมจำลอง Xcode 10.1 และ iPhone 5s 12.1 คุณต้องแน่ใจว่าคุณบอกสคริปต์ให้ติดตั้งใบรับรองในโปรแกรมจำลองที่ถูกต้อง หากคุณใช้สิ่งนี้ร่วมกับ badssl.test (เช่น badssl ทำงานในเครื่องเทียบท่า) คุณจะต้องแฮ็ก. pem เพื่อลบทุกอย่างยกเว้นใบรับรองจริง
Andrew Ebling

สิ่งนี้ช่วยชีวิตฉัน แทบไม่มีการสนับสนุนจากชุมชนสำหรับการติดตั้งใบรับรองที่ลงนามด้วยตนเองลงใน iOS ขอขอบคุณ!
lsimonetti

ฉันยืนยันว่ามันใช้งานได้ใน Simulator 10.3 สำหรับ iPhone X ที่ใช้ iOS 12.4
Sergei Basharov

10

สำหรับทุกคนที่ใช้ OS X Catalina โปรดตรวจสอบนี้: https://forums.developer.apple.com/thread/124056

ขณะนี้ Catalina กำลังบล็อกการเข้าถึงโฟลเดอร์เดสก์ท็อปเอกสารและดาวน์โหลด ฉันย้ายไฟล์ใบรับรองไปยังโฟลเดอร์ที่แชร์แล้วลากและวางไฟล์ไปยังโปรแกรมจำลองจากที่นั่น


3
พระเจ้าประทานสุขภาพให้คุณ :)
Booharin

9

ดูเชลล์สคริปต์ Charles ใช้เพื่อติดตั้งใบรับรองที่ลงนามด้วยตนเองลงในพวงกุญแจของเครื่องจำลอง http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

ดูสิ่งนี้ด้วย:

ดูเหมือนว่าการติดตั้งใบรับรองของคุณเองในโปรแกรมจำลองอาจต้องติดตั้งบนอุปกรณ์ผ่าน Safari จากนั้นคัดลอกแถวผลลัพธ์จากอุปกรณ์TrustStore.sqlite3ลงในเครื่องจำลอง


คำตอบของ @nailer ได้รับการอัปเดตด้วยการอ้างอิงเพิ่มเติมเท่าที่ฉันทราบรูปแบบของ blobs เหล่านั้นใน TrustStore.sqlite3 นั้นทึบแสง (และอาจมีการเปลี่ยนแปลง) ดังนั้นวิธีการอื่น ๆ ดูเหมือนว่าจะติดตั้งใบรับรองบนอุปกรณ์ผ่าน Safari และคัดลอกแถว TrustStore ที่เป็นผลลัพธ์ลงในเครื่องจำลอง
โยนาห์

2

ใช้iPhone Backup Extractorฉันคัดลอก iPhone ของฉันTrustStore.sqlite3ลง~/Library/Application Support/iPhone Simulator/6.0/Library/Keychainsในไฟล์โดยเขียนทับไฟล์ที่มีอยู่ ฉันพยายามแทรกแถวเดียวด้วย sqlite ต่อไปนี้ แต่ไม่สามารถใช้งานได้

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

ตอนนี้working.sqlมีเนื้อหาทั้งหมดของตาราง tsettings (ในกรณีของฉัน 1 แถว)

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

อีกครั้งคำสั่ง sqlite ข้างต้นไม่ได้ผลสำหรับฉัน แต่อาจเป็นจุดเริ่มต้นที่ดีสำหรับคนอื่น การคัดลอกทั้งหมดTrustStore.sqlite3จากข้อมูลสำรองไปยังโปรแกรมจำลองนั้นใช้ได้ดี



0

การลากและวางเคยใช้งานได้ แต่ใช้ไม่ได้กับ XCode 12 สำหรับฉัน สิ่งที่ได้ผลสำหรับฉันคือการเปิดเบราว์เซอร์ Safari บน Simulator จากนั้นพิมพ์ URL ของไฟล์สำหรับไฟล์ใบรับรอง. crt เช่น

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

หลังจากนั้นคุณต้องไปที่การตั้งค่าโปรแกรมจำลองและติดตั้งใบรับรองโดยไปที่ทั่วไป> ส่วนโปรไฟล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.