คุณจะเพิ่มผู้ออกใบรับรอง (CA) ลงใน Ubuntu ได้อย่างไร


166

งานของฉันได้ตัดสินใจที่จะออกหน่วยงานออกใบรับรอง (CA) ของตัวเองเพื่อจัดการด้านต่างๆของงานของเราอย่างปลอดภัยโดยไม่ต้องจ่ายค่าใบรับรอง

  • การเซ็นชื่อเข้ารหัสอีเมล
  • เข้ารหัสเนื้อหาอีเมล
  • เข้าถึงสิ่งต่างๆเช่นใบรับรองIRCของ บริษัทตาม
  • เพิกถอนกุญแจของอดีตพนักงานโดยอัตโนมัติ

พวกเขาส่ง.pemไฟล์มาให้ฉันและฉันไม่แน่ใจว่าจะเพิ่มลงในการติดตั้ง Ubuntu ของฉันได้อย่างไร คำแนะนำที่ส่งคือ: "ดับเบิลคลิกที่มันบน Mac ควรติดตั้ง" 

ฉันจะดำเนินการอย่างไร ฉันต้องทำอะไรกับOpenSSLเพื่อสร้าง.key, .csrหรือ.crtไฟล์?


2
ความคิดเห็น "คำแนะนำที่ส่งคือ: \" ดับเบิลคลิกที่มันบน Mac ควรติดตั้ง \ "" ทำให้วันของฉัน
mzoll

คำตอบ:


231

การติดตั้ง CA

คัดลอกใบรับรองของคุณในรูปแบบ PEM (รูปแบบที่มี----BEGIN CERTIFICATE----อยู่) /usr/local/share/ca-certificatesและตั้งชื่อด้วย.crtนามสกุลไฟล์

sudo update-ca-certificatesจากนั้นเรียก

Caveats:การติดตั้งนี้มีผลเฉพาะกับผลิตภัณฑ์ที่ใช้ที่เก็บใบรับรองนี้เท่านั้น ผลิตภัณฑ์บางอย่างอาจใช้ร้านค้าใบรับรองอื่น ๆ หากคุณใช้ผลิตภัณฑ์เหล่านั้นคุณจะต้องเพิ่มใบรับรอง CA นี้ไปยังที่เก็บใบรับรองอื่น ๆ ด้วย ( คำแนะนำสำหรับ Firefox , คำแนะนำสำหรับ Chrome , คำแนะนำเกี่ยวกับ Java )

ทดสอบ CA

คุณสามารถตรวจสอบว่าสิ่งนี้ทำงานได้หรือไม่โดยการค้นหาใบรับรองที่คุณเพิ่งเพิ่มเข้าไป/etc/ssl/certs/ca-certificates.crt(ซึ่งเป็นเพียงรายการสั้น ๆ ของ CA ที่เชื่อถือได้ทั้งหมดของคุณเชื่อมต่อกัน)

คุณยังสามารถใช้ s_client ของ OpenSSL ได้โดยพยายามเชื่อมต่อกับเซิร์ฟเวอร์ที่คุณรู้ว่ากำลังใช้ใบรับรองที่ลงนามโดย CA ที่คุณเพิ่งติดตั้ง

$ openssl s_client -connect foo.whatever.com:443 -CApath /etc/ssl/certs

CONNECTED(00000003)
depth=1 C = US, ST = Virginia, O = "Whatever, Inc.", CN = whatever.com, emailAddress = admin@whatever.com
verify return:1
depth=0 C = US, ST = Virginia, L = Arlington, O = "Whatever, Inc.", CN = foo.whatever.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Virginia/L=Arlington/O=Whatever, Inc./CN=foo.whatever.com
   i:/C=US/ST=Virginia/O=Whatever, Inc./CN=whatever.com/emailAddress=admin@whatever.com

... snip lots of output ...

    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1392837700
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

สิ่งแรกที่ต้องมองหาคือห่วงโซ่ใบรับรองใกล้กับด้านบนของผลลัพธ์ นี่ควรแสดง CA เป็นผู้ออก (ถัดจากi:) สิ่งนี้บอกคุณว่าเซิร์ฟเวอร์กำลังแสดงใบรับรองที่ลงนามโดย CA ที่คุณกำลังติดตั้ง

ประการที่สองมองหาที่สิ้นสุดจะถูกตั้งค่าverify return code0 (ok)


3
อันนี้ใช้งานได้จริง
Sabareesh Kkanan

1
ขอขอบคุณที่สังเกตว่า firefox / chrome ไม่ได้ใช้ที่เก็บใบรับรองเริ่มต้น
ทิม Strijdhorst

4
โปรดทราบว่าใบรับรองการอัปเดตสามารถมีความระมัดระวังมาก (อาจเกิดจากการออกแบบ) mycert.pem.crt ไม่ทำงาน แต่ mycert.crt ทำ ฉันยังคิดว่ามันต้องเป็น / usr / local / share / ca-certificate ไม่ใช่ / usr / share / ca-certificate (แม้จะมีความคิดเห็นที่กล่าวไว้ใน /etc/ca-certificates.conf)
เขาวงกต

2
ขอบคุณสำหรับcrtความคิดเห็นส่วนขยายนั่นเป็นความลับในการทำให้งานนี้สำหรับฉันฉันได้รับใบรับรองพร้อมกับcertส่วนขยายและสับสนว่าทำไมไม่มีอะไรทำงาน
Ransom Briggs

3
ข้อแม้หนึ่ง: s_clientไม่ส่ง SNI โดยค่าเริ่มต้นและเซิร์ฟเวอร์อาจต้องการ SNI โดยเฉพาะถ้าสนับสนุนโฮสต์ / ไซต์เสมือนที่มี certs ต่างกัน -servername foo.whatever.comสำหรับกรณีนี้เพิ่ม หรือถ้ามันเป็นเว็บเซิร์ฟเวอร์ใช้ (รุ่นที่ทันสมัย) curlหรือwgetที่ SNI ทำโดยอัตโนมัติ
dave_thompson_085

66

ผู้ชาย update-ca-ใบรับรอง :

update-ca-certificates  is  a  program  that  updates   the   directory
/etc/ssl/certs to hold SSL certificates and generates certificates.crt,
a concatenated single-file list of certificates.

It reads the file /etc/ca-certificates.conf. Each line gives a pathname
of  a  CA  certificate  under /usr/share/ca-certificates that should be
trusted.  Lines that begin with "#" are comment lines and thus ignored.
Lines  that  begin with "!" are deselected, causing the deactivation of
the CA certificate in question.

Furthermore   all   certificates   found   below   /usr/local/share/ca-
certificates are also included as implicitly trusted.

จากข้างต้นผมจะอนุมานได้ว่าวิธีที่ต้องการที่จะได้รับไฟล์ใบรับรองท้องถิ่นเข้าไปในร้านที่เชื่อถือได้คือการทำให้พวกเขาเป็นและเรียกใช้/usr/local/share/ca-certificates update-ca-certificatesคุณไม่จำเป็นต้องสัมผัส/etc/ssl/certsโดยตรง


23
การตั้งชื่อใบรับรองที่มีนามสกุล. crt นั้นก็จำเป็นเช่นกัน
phyzome

ขอบคุณสำหรับ note @phyzome - คงไม่สามารถเพิ่มใบรับรองของฉันเป็นอย่างอื่นได้
Seiyria

1
ฉันต้องเพิ่ม--freshเพื่อให้มันใช้งานได้ เช่นupdate-ca-certificates --fresh
Elijah Lynn

15

ฉันมีปัญหาเดียวกันและผมต้องคัดลอก.pemไฟล์ไปยังเปลี่ยนชื่อเป็น/usr/local/share/ca-certificates ไฟล์ได้อย่างง่ายดายสามารถแปลงไปกับ OpenSSL ตัวอย่างเช่นถ้าคุณไม่ได้มี.crt.cer.pem.pem

sudo update-ca-certificatesหลังจากการคัดลอกไฟล์ที่คุณจะต้องดำเนินการ


openssl x509 -inform DER -in certificate.cer -out certificate.crt
webwurst

14

คำตอบอื่น ๆ เกี่ยวกับupdate-ca-certificatesนั้นถูกต้องสำหรับแอปพลิเคชันที่อ่านจากที่เก็บใบรับรองระบบ สำหรับ Chrome และ Firefox และอาจจะต้องมีใบรับรองอยู่ใน nssdb ซึ่งเป็นแบ็กเอนด์สำหรับไลบรารี Mozilla NSS

จาก https://code.google.com/p/chromium/wiki/LinuxCertManagement :

ตัวอย่างเช่นหากต้องการเชื่อถือใบรับรองรูท CA สำหรับการออกใบรับรองเซิร์ฟเวอร์ SSL ให้ใช้

certutil -d sql: $ HOME / .pki / nssdb -A -t "C ,," -n <ชื่อเล่นใบรับรอง> -i <ชื่อไฟล์ใบรับรอง>

อยู่ที่ไหน<certificate nickname>โดยพลการและ<certificate filename>เป็นไฟล์. pem หรือ. crt

การอ้างอิงที่มีประโยชน์อื่น ๆ :


ขอบคุณ มันทำงานบน Ubuntu 16.04 สำหรับ Chrome 53.0.2785.143 แต่ Firefox 49 ดูเหมือนว่าจะมีการแยกฐานข้อมูลร้านค้าและจะต้องเพิ่มจาก about: preferences # advanced [advanced Certificates] -> [Authorities] -> [Import] เพิ่มเติมเกี่ยวกับ firefox cert store askubuntu.com/a/248326/535154
mauron85

อย่างไรก็ตามถ้าคุณต้องการติดตั้งใบรับรองก่อนที่จะรัน Chrome ครั้งแรก (เช่นในขณะที่. pki / dir ยังคงหายไป) คุณต้องสร้าง nssdb:mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
akavel

มีวิธีรับ Chrome และ Firefox ให้อ่านจากที่เก็บใบรับรองระบบ ดูคำตอบของฉัน: superuser.com/a/1312419/506107
wheeler

11

สำหรับบิวด์ที่ใหม่กว่าโดยใช้ Debian คุณอาจต้องเรียกใช้:

sudo dpkg-reconfigure ca-certificates

หมายเหตุ: sudo dpkg-reconfigure ca-certificate เรียกการอัพเดต -a- ใบรับรองภายใน

แน่นอนว่าคุณจะต้องคัดลอกใบรับรอง (ไฟล์. crt) ไปยัง / usr / share / ca-certificate ก่อนที่จะทำสิ่งนี้ :)


4

จากคำตอบของ dwmw2 คุณสามารถบอกแอปพลิเคชันที่ใช้ NSS สำหรับการจัดการใบรับรองเพื่อใช้ที่เก็บระบบที่เชื่อถือได้

libnss3โดยค่าเริ่มต้นจะจัดส่งพร้อมกับชุดใบรับรอง root CA แบบอ่านอย่างเดียว ( libnssckbi.so) ดังนั้นเวลาส่วนใหญ่ที่คุณต้องเพิ่มด้วยตนเองนั้นไปยังร้านค้าที่เชื่อถือได้ของผู้ใช้ใน$HOME/.pki/nssdbพื้นที่ p11-kitมีดรอปแทนสำหรับที่ทำหน้าที่เป็นอะแดปเตอร์ใบรับรองหลักทั้งระบบที่ติดตั้งในlibnssckbi.so/etc/ssl/certs

แก้ไข:

ดูเหมือนจะมีรุ่นอื่น ๆlibnssckbi.soมากกว่าที่จะlibnss3มา ต่อไปนี้เป็นสคริปต์เพื่อค้นหาทั้งหมดสำรองข้อมูลและแทนที่ด้วยลิงก์ไปยังp11-kit:

sudo apt-get update && sudo apt-get install -y p11-kit libnss3
find / -type f -name "libnssckbi.so" 2>/dev/null | while read line; do
    sudo mv $line ${line}.bak
    sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so $line
done

คำแนะนำเดิม:

หากต้องการทำสิ่งนี้ให้ติดตั้งp11-kitและlibnss3(หากยังไม่ได้ติดตั้งไว้):

sudo apt-get update && sudo apt-get install -y p11-kit libnss3

จากนั้นสำรองข้อมูลที่มีอยู่libnssckbi.soโดยlibnss3:

sudo mv /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so.bak

สุดท้ายสร้างลิงก์สัญลักษณ์:

sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so

เพื่อยืนยันว่าใช้งานได้คุณสามารถเรียกใช้ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.soและควรแสดงลิงก์:

lrwxrwxrwx 1 root root 49 Apr  9 20:28 /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so -> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

ตอนนี้หากคุณเพิ่มใบรับรองไปยังร้านค้า CA ที่ใช้update-ca-certificatesอยู่ใบรับรองเหล่านี้จะพร้อมใช้งานสำหรับแอปพลิเคชันที่ใช้ NSS ( libnss3) เช่น Chrome


1

ดังที่กล่าวไว้แอปพลิเคชันต่างๆที่ใช้ NSS มีที่เก็บใบรับรองของตนเอง เมื่อสิ่งต่าง ๆ เกิดขึ้นบน Ubuntu คุณต้องใช้certutilการเพิ่ม CA ของคุณสำหรับแต่ละแอปพลิเคชันด้วยตนเองสำหรับผู้ใช้แต่ละคน

ในดิสทริบิวชันอื่น ๆ เช่น Fedora สิ่งนี้ Just Works ™และคุณควรยื่นข้อบกพร่องกับแอพพลิเคชั่นที่ไม่เชื่อถือ CA ที่คุณติดตั้งโดยupdate-ca-trustอัตโนมัติ

คุณสามารถแก้ไขได้ใน Ubuntu ด้วยการติดตั้งp11-kit-modulesแพคเกจจากนั้นเปลี่ยนโมดูลรูทที่เชื่อถือได้ของ NSS ด้วยp11-kit-trust.soโดยสร้างลิงก์สัญลักษณ์เช่นจาก/usr/lib/firefox/libnssckbi.soเป็น/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

จากนั้นคุณจะได้รับรากความน่าเชื่อถือที่ตั้งค่าไว้ของระบบไม่ใช่ฮาร์ดโค้ดบางตัว โปรดทราบว่าเรืออูบุนตูหลายที่แตกต่างกันสำเนาของห้องสมุด libnssckbi.so ว่ามีการกำหนดค่าตายตัวรากความไว้วางใจและคุณต้องเปลี่ยนทั้งหมดของพวกเขา!

cf เลย https://bugs.launchpad.net/ubuntu/+source/nss/+bug/1647285


เมื่อฉันไม่sudo find / -type f -name "libnssckbi.so"ได้พบlibnssckbi.soในสามสถานที่: /usr/lib/thunderbird/, และ/usr/lib/firefox/ /usr/lib/x86_64-linux-gnu/nss/คุณกำลังบอกว่าฉันควรเชื่อมโยงlibnssckbi.soโฟลเดอร์ทั้งสามนี้เข้ากับp11-kit-trust.so?
wheeler

1
ตกลงเพิ่งยืนยันว่าการเชื่อมโยง/usr/lib/x86_64-linux-gnu/nss/libnssckbi.so-> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.soทำงานได้เหมือน CHARM ฉันสามารถเพิ่มใบรับรองลงใน/usr/local/share/ca-certificatesเรียกใช้sudo update-ca-certificatesและ PRESTO, Chrome เริ่มยอมรับใบรับรองที่ลงชื่อด้วยตนเอง
wheeler

0

คำตอบที่โง่อย่างจริงจังที่จะเพิ่มที่นี่ แต่ฉันใช้เวลา 2 ชั่วโมงในการกลับไปกลับมากับลินุกซ์ในลินุกซ์ ... ฉันแน่ใจว่าทุกอย่างถูกต้อง:

hutber@hutber-mint /var/www/asos-mvt-framework $ certutil -L -d sql:${HOME}/.pki/nssdb

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

anyproxy                                                     CT,, 
rootCA                                                       CT,, 
myasos                                                       CT,, 

แต่ถึงกระนั้นในโครเมียมไม่มีอะไรทำงาน ฉันพยายามทุกอย่างในที่สุด ....

Restarting Chrome

กุญแจสู่ความสำเร็จของฉันหลังจากทำตาม: คำแนะนำของSteven Monday

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