การใช้ใบรับรอง SSL ที่ลงนามเองสำหรับที่เก็บ APT ภายใน HTTPS


10

ฉันได้ตั้งค่าพื้นที่เก็บข้อมูล Debian (Ubuntu จริง ๆ ) สำหรับใช้ภายในกับแพคเกจส่วนตัวบางอย่างและตอนนี้ต้องการให้พร้อมใช้งานบนเว็บไปยังเซิร์ฟเวอร์เฉพาะบางแห่ง ฉันต้องการ apt-get / aptitude เพื่อเชื่อมต่อกับมันโดยใช้ HTTPS และเพราะฉันไม่ต้องการใช้เงินใด ๆ โดยใช้ใบรับรองที่ลงนามด้วยตนเอง

ฉันได้ลองติดตามหน้า man ของ apt.conf ที่ชี้ apt-get เพื่อใช้ใบรับรอง root CA ของตัวเองเพื่อตรวจสอบความถูกต้องของโฮสต์ แต่ดูเหมือนจะไม่ทำงาน

ไฟล์ apt.conf ของฉันมีลักษณะดังนี้:

#Acquire::https::repo.mydomain.com::Verify-Peer "false";
Acquire::https::repo.mydomain.com::CaInfo      "/etc/apt/certs/my-cacert.pem";
Acquire::https::repo.mydomain.com::SslCert     "/etc/apt/certs/my-cert.pem";
Acquire::https::repo.mydomain.com::SslKey      "/etc/apt/certs/my-key.pem";

ฉันยังใช้ใบรับรองไคลเอ็นต์ แต่ดูเหมือนจะไม่เป็นปัญหาเพราะเมื่อฉันตั้งค่า Verify-Peer เป็น "false" (ความคิดเห็นด้านบน) ทุกอย่างทำงานได้

การใช้ใบรับรอง CA เดียวกันใบรับรองไคลเอ็นต์และคีย์ทำงานได้ดีกับ curl

ฉันเปิดใช้งานการดีบัก apt (Debug :: Acquire :: https "true") แต่มีข้อมูลน้อยมาก

ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีการดำเนินการ?

คำตอบ:


5

ฉันไม่ได้ใช้การรับรองความถูกต้องของลูกค้าเพียง HTTPS แต่ฉันได้รับการทำงานโดยใช้สิ่งนี้:

Acquire::https {
        Verify-Peer "false";
        Verify-Host "false";
}

/etc/apt/apt.conf.dฉันใส่นี้ในแฟ้มภายใต้


1
นั่นคือสิ่งที่ฉันไม่ต้องการ - ฉันต้องการตรวจสอบเซิร์ฟเวอร์โดยใช้ CA Cert ของตัวเอง การปิดใช้งานการตรวจสอบใช้งานได้ แต่ฉันไม่ต้องการทำในระยะยาว
shevron

5

เมื่อเร็ว ๆ นี้ฉันพบปัญหาที่คล้ายกัน ฉันแก้ไขมันโดยการเพิ่มSslForceVersionตัวเลือก

การกำหนดค่าของฉันเป็นเช่น:

Acquire::https::test.com {
    Verify-Peer "true";
    Verify-Host "true";

    CaInfo "/tmp/ca.crt";

    SslCert "/tmp/client.crt";
    SslKey  "/tmp/client.key";
    SslForceVersion "SSLv3";
};

2
ระวังด้วยนะ เว็บไซต์เริ่มปิดการใช้งาน SSLv3 ด้วยเหตุผลด้านความปลอดภัยต่างๆ ในอนาคตเฉพาะ TLSv1 และสูงกว่าจะใช้งานได้และในภายหลังเท่านั้น TLSv1.2 +
Michael Hampton

3

ในAskubuntuฉันพบว่ารุ่นนี้ค่อนข้างง่ายกว่าของโซลูชันนี้และตัวเลือกนั้น จำกัด ตัวเลือกให้อยู่ในโฮสต์เดียว

Acquire::https::mirror.ufs.ac.za::Verify-Peer "false";

สิ่งนี้ใช้ได้สำหรับฉัน

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


อีกครั้งไม่สิ่งที่ฉันต้องการ - ฉันทำตรวจสอบเพียร์จำเป็น ที่กล่าวว่าส่วนตัวฉันมีการตั้งค่าการทำงาน (ดูวิธีแก้ปัญหาของฉันด้วย stunnel) สิ่งนี้อาจช่วยผู้อื่นได้
shevron

3

ฉันแก้ไขมันด้วยวิธีอื่นโดยติดตั้งใบรับรอง CA

  1. คัดลอก*.crtไฟล์ของคุณไปยัง `/ usr / local / share / ca-certificate /
  2. วิ่ง sudo update-ca-certificates

วิธีนี้ใช้ได้กับ Ubuntu 14.04 เป็นอย่างน้อย


1
นอกจากนี้ยังสามารถแก้ไขพร็อกซีที่ใช้การสกัดกั้น / ถอดรหัส SSL เพียงเพิ่มใบรับรองไปยัง / etc / ssl / certs ไม่ได้ ขอบคุณสำหรับสิ่งนี้!
จอร์แดน

1
ไม่ทำงานเนื่องจากใบรับรองที่ฉันติดตั้งเป็นใบรับรองที่ลงชื่อด้วยตนเองจากไฟร์วอลล์ของเรา ฉันไม่มีใบรับรองอื่น
พอล

1

หวังว่านี่จะช่วยผู้อื่น - ฉันไม่สามารถแก้ไขได้โดยตรง

เพื่อเป็นการหลีกเลี่ยงปัญหาตอนนี้ฉันใช้ stunnel4 เพื่อสร้างช่องสัญญาณไปยังที่เก็บ HTTPS ของฉัน certs ที่ลงชื่อเองและใบรับรองไคลเอ็นต์ฉันทำงานได้ดีกับ stunnel4

ฉันตั้งค่า stunnel เพื่อฟังบน localhost: 8888 สำหรับการเชื่อมต่อขาเข้าและนำไปยัง repo ของฉัน (repo.mydomain.com:443) ฉันได้ตั้งค่าแนวโน้มที่จะมองหาพื้นที่เก็บข้อมูลของฉันที่http: // localhost: 8888 /

จนถึงตอนนี้มันใช้งานได้ดีแม้ว่ามันจะดูเหมือนแฮ็คที่ไม่จำเป็น


-1

GnuTLS หรือ apt น่าจะเป็นรถ หากชื่อโฮสต์จากแหล่งข้อมูล apt ของฉันไม่ตรงกับ Apache ServerName จากเว็บเซิร์ฟเวอร์ที่เก็บข้อมูลของฉันฉันได้รับข้อผิดพลาดต่อไปนี้โดยใช้ TLSv1:

W: ไม่สามารถดึงข้อมูล https: //repo.example/debian/dists/unstable/non-free/binary-amd64/Packages : gnutls_handshake () ล้มเหลว: ได้รับการแจ้งเตือนคำเตือน TLS แล้ว

การใช้ SSLv3 ทุกอย่างทำงานได้ดี

หมายเหตุ: สิ่งนี้ไม่เกี่ยวข้องกับใบรับรอง SSL ใบรับรองที่ไม่ถูกต้องจะส่งผลให้เกิดข้อผิดพลาดดังต่อไปนี้:

ข้อผิดพลาดhttps: //repo1.example i386 แพ็คเกจที่ไม่เสถียร / ไม่ใช่ฟรี SSL: ชื่อหัวเรื่องใบรับรอง (repo.example) ไม่ตรงกับชื่อโฮสต์เป้าหมาย 'repo1.example'


ที่จริงแล้วถูกต้องแล้ว - Apache รองรับ SNI และแจ้งเตือนเมื่อชื่อโฮสต์ที่ได้รับจากลูกค้าไม่ตรงกับชื่อโฮสต์ที่กำหนดค่าของเซิร์ฟเวอร์ มันจะดีถ้าฉลาดจะพิมพ์รายละเอียดการแจ้งเตือน แต่มันก็ทำในสิ่งที่ถูกต้อง การย้อนกลับไปสู่ ​​SSLv3 นั้นไม่ฉลาดมากในวันนี้และมีเพียง "ใช้งาน" เพราะคุณกำลังปิดการใช้งานคุณสมบัติที่คุณควรใช้จริง ๆ
djmitche
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.