การติดตั้งใบรับรองแบบลงนามด้วยตนเองอ้างว่าสำเร็จ


17

ฉันกำลังพยายามติดตั้งใบรับรองแบบลงนามด้วยตนเองสำหรับเว็บเซิร์ฟเวอร์ของฉันใน Android 4.3 ฉันมีไฟล์. crt ในรูทของการ์ด SD (ซึ่งจำลองขึ้นจริงเพราะฉันไม่มีการ์ด SD ในสล็อต)

ในการติดตั้งใบรับรองฉันไปที่การตั้งค่า -> ทั่วไป -> ความปลอดภัย -> ที่เก็บข้อมูลรับรอง -> ติดตั้งจากที่เก็บข้อมูลอุปกรณ์

ฉันได้รับกล่องโต้ตอบแสดงชื่อของใบรับรอง (ชื่อไฟล์ลบส่วนขยาย. crt) ซึ่งฉันสามารถแก้ไขได้ (แต่ไม่ใช่) เป็น "ใช้สำหรับ" ดึงลงด้วย "VPN และแอพ" ที่เลือกและข้อความที่ด้านล่าง ของไดอะล็อกที่แจ้งว่า "แพ็คเกจบรรจุ: ใบรับรองผู้ใช้หนึ่งใบ" ทุกอย่างดูโอเคฉันคลิก "ตกลง" กล่องโต้ตอบจะหายไปและข้อความขนมปังปิ้งปรากฏขึ้นพร้อมกับ "[ชื่อ] ติดตั้ง"

อย่างไรก็ตามถ้าฉันไปที่ "ข้อมูลประจำตัวที่เชื่อถือได้ในทันทีและเลือก" ผู้ใช้ "ไม่มีอะไรที่นั่นใบรับรองใหม่ก็ไม่ได้อยู่ภายใต้" ระบบ "แต่ฉันจะไม่คาดหวังว่าจะมีหากฉันไปที่เบราว์เซอร์หลังจากนี้และลองไปที่ เว็บไซต์ฉันยังคงได้รับคำเตือนว่าใบรับรองของไซต์นั้นไม่น่าเชื่อถือฉันได้ลองการรีบูตเครื่อง แต่ก็ไม่ได้สร้างความแตกต่าง

ผมทำอะไรผิดหรือเปล่า? การขาดข้อความแสดงข้อผิดพลาดทั้งหมดไม่มีประโยชน์ เป็นไปได้หรือไม่ว่าใบรับรองของฉันอยู่ในรูปแบบที่ไม่ถูกต้อง ฉันลองใช้ไฟล์. crt ในไดเรกทอรี ssl ของเซิร์ฟเวอร์แล้วฉันได้ลองแปลงเป็นรูปแบบ DER

อัปเดต: ฉันอ่านบางที่ Android ต้องใช้ใบรับรองในรูปแบบ p12 ดังนั้นฉันจึงแปลงใบรับรอง Apache2 เป็น p12 โดยใช้คำสั่งต่อไปนี้:

openssl pkcs12 -export -inkey server.key -in server.crt -out ~/server.p12

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

คำตอบ:


19

ฉันมีปัญหาเดียวกันในการทำให้ Android ติดตั้งใบรับรองจริงๆจนกว่าฉันจะพบไซต์นี้ซึ่งอธิบายวิธีการที่เหมาะกับฉัน มันเดือดลงไปในขั้นตอนต่อไปนี้:

  1. สร้างคีย์ส่วนตัวและใบรับรองสาธารณะ x509 ที่มีนามสกุล v3_req และเปิดใช้งานเป็น CA:

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/my_site.key -out /etc/ssl/certs/my_site.crt -reqexts v3_req -extensions v3_ca

  2. แปลงใบรับรองเป็นรูปแบบ DER ซึ่ง Android เข้าใจได้:

    sudo openssl x509 -in /etc/ssl/certs/my_site.crt -outform der -out my_site.der.crt

  3. ใช้วิธีการใดก็ได้เพื่อไปmy_site.der.crtยังอุปกรณ์ Android ของคุณ - ฉันพบว่ามันง่ายที่จะมีไฟล์ที่โฮสต์โดยเว็บเซิร์ฟเวอร์ของฉันและดาวน์โหลดผ่านเบราว์เซอร์ Android ซึ่งจะช่วยให้คุณติดตั้งได้โดยอัตโนมัติ

แม้ว่าฉันจะชอบขั้นตอนที่ 1 ที่จะแบ่งออกเป็นสอง (รุ่น 1 ของรหัสส่วนตัวและรุ่นที่ 1b ของใบรับรองสาธารณะ) ฉันไม่ได้ลงทุนเวลามากเกินไปในการตรวจสอบวิธีการทำเช่นนั้น โปรดแจ้งให้เราทราบในความคิดเห็นหากคุณพบวิธีการทำงานขอบคุณ

(แทนที่จะเพิ่มความคิดเห็นฉันรู้สึกว่านี่เป็นส่วนหนึ่งของคำตอบสำหรับการอ้างอิงในอนาคตดังนั้นฉันจึงแก้ไขมัน - ไมเคิล)

แทนที่จะสร้างใบรับรองที่เปิดใช้งานเป็น CA ฉันสร้าง CA ที่ลงชื่อด้วยตนเองจากนั้นลงชื่อคีย์ / csr ที่มีอยู่ของฉันใหม่ด้วย CA ใหม่ จากนั้นฉันก็เพิ่ม CA ที่ลงชื่อด้วยตัวเองลงใน Android และ voila! มันได้ผล!

การสร้าง CA ที่ลงนามเอง:

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem

ลงชื่อ CSR ที่มีอยู่เดิมที่ฉันมีจากการสร้างคีย์จาก

openssl x509 -req -in existing.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out existing.crt -days 3649

ตอนนี้ใช้รูปแบบที่ปรับเปลี่ยนของคำสั่งที่สองของคุณฉันแปลงใบรับรอง CA เป็นรูปแบบ DER:

openssl x509 -in /etc/apache2/ssl/rootCA.pem -outform der -out ~/rootCA.der.crt

สิ่งที่ยอดเยี่ยมเกี่ยวกับเรื่องนี้คือใบรับรองที่ไม่น่าเชื่อถือเพิ่มเติมใด ๆ ที่ตอนนี้ลงชื่อใหม่ด้วย CA ที่ลงชื่อด้วยตนเองใหม่จะเชื่อถือได้บนอุปกรณ์ใด ๆ มากกว่าที่ติดตั้ง CA ใหม่โดยไม่จำเป็นต้องติดตั้งอะไรอีก สิ่งนี้ไม่ได้ช่วยแก้ปัญหาของการเชื่อถือไซต์ที่คุณไม่สามารถควบคุมได้ แต่มันอาจทำให้ง่ายขึ้นถ้าคุณมีอิทธิพลเหนือแผนกไอทีของคุณสำหรับเซิร์ฟเวอร์ภายในหรืออะไรบางอย่าง


1
ฉันมีใบรับรองที่ฉันต้องการติดตั้งแล้วดังนั้นฉันจึงลองขั้นตอนที่ 2 แต่ก็ยังไม่ปรากฏใน User Trusted Credentials หลังจากอ้างว่าติดตั้งได้สำเร็จและ Chrome ยังคงแสดงข้อผิดพลาด "เว็บไซต์ที่ไม่น่าเชื่อถือ" หลังจากรีสตาร์ท
Michael

1
มีบางอย่างเกี่ยวกับส่วนขยาย v3_req และเปิดใช้งานเป็น CA ที่ต้องใช้ใบรับรองเพื่อให้ Android ใช้หรือไม่ ถ้าเป็นเช่นนั้นมีคำสั่งที่ฉันสามารถใช้เพื่อรับใบรับรองที่มีอยู่และเพิ่มข้อมูลนั้นลงไปเนื่องจากฉันไม่สามารถควบคุม certs ทั้งหมดที่ฉันต้องการติดตั้งได้
ไมเคิล

3
เพื่อตอบคำถามครึ่งแรกของคำถามก่อนหน้านี้ฉันอ่านหน้าที่คุณเชื่อมโยงและปรากฏว่าปัญหาคือ Android ปฏิเสธที่จะติดตั้งใบรับรองที่ลงชื่อด้วยตนเอง (แต่ไม่ใช่ CA ที่ลงชื่อด้วยตนเอง) สิ่งนี้ดูเหมือนว่าจะยกเลิกการลงทะเบียนแล้วและความจริงที่ว่า Android แกล้งทำเป็นติดตั้งทำให้ยิ่งแย่ลงไปอีก แต่คำถามยังคงอยู่ถ้าฉันมีใบรับรองที่ลงชื่อด้วยตัวเองซึ่งฉันไม่สามารถควบคุมได้มีวิธีใดที่จะ "CA" - แก้ไขเพื่อให้ฉันสามารถติดตั้งได้หรือไม่
ไมเคิล

1
@ ฉันหวังว่าคุณจะไม่รังเกียจฉันจะแก้ไขคำตอบของคุณเพื่อรวมโซลูชันของฉันแทนที่จะรวมไว้ในความคิดเห็นเนื่องจากเป็นส่วนหนึ่งของคำตอบ
Michael

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