ฉันไม่ใช่ผู้ดูแลระบบหรือผู้ดูแลระบบเครือข่าย (ฉันมีพื้นหลังเป็นนักพัฒนาซอฟต์แวร์) ฉันพบปัญหาบางอย่างในการพยายามทำตามบทช่วยสอนนี้เพื่อนำไปใช้ การรับรองความถูกต้องไคลเอนต์ SLL ในเวอร์ชัน Ubuntu 20.04: https://www.makethenmakeinstall.com/2014/05/ssl-client-authentication-step-by-step/
ฉันรู้ว่าบทช่วยสอนนี้ค่อนข้างเก่า แต่ดูเหมือนว่าจะใช้งานได้ดี ยกเว้นจุดเดียว
โดยพื้นฐานแล้วฉันทำตามขั้นตอนทั้งหมดที่ระบุไว้ในบทช่วยสอนก่อนหน้านี้ ฉันสรุปไว้ที่นี่เพื่อให้คุณสามารถให้ข้อเสนอแนะกับฉันได้หากฉันเข้าใจสิ่งที่ฉันทำ:
สร้างใบรับรองผู้ออกใบรับรอง (CA): เป็นสิ่งแรกที่ฉันสร้างใบรับรอง CA ถ้าฉันเข้าใจดี ก็เหมือนกับการสร้างผู้ออกใบรับรองส่วนตัวของฉันเอง (เช่น cacert.org) สิ่งเดียวคือในกรณีนี้ไม่มีสถาบันที่ตรวจสอบใบรับรองที่ออกโดย CA นี้ ความเข้าใจนี้ถูกต้องหรือไม่?
openssl req -newkey rsa:4096 -keyform PEM -keyout ca.key -x509 -วัน 3650 -outform PEM -out ca.cer
โดยทั่วไปคำสั่งนี้จะถามฉันว่า วลีรหัสผ่าน PEM ที่ฉันจะใช้ในการโต้ตอบกับ CA ของฉันเองและรายละเอียดบางอย่าง ฉันใส่พารามิเตอร์เหล่านี้:
คุณกำลังจะถูกขอให้ป้อนข้อมูลที่จะรวมเข้าด้วยกัน
ในคำขอใบรับรองของคุณ
สิ่งที่คุณกำลังจะป้อนคือสิ่งที่เรียกว่า Distiminated Name หรือ DN
มีฟิลด์ค่อนข้างน้อย แต่คุณสามารถเว้นว่างไว้ได้
สำหรับบางฟิลด์จะมีค่าเริ่มต้น
หากคุณป้อน '.' ช่องนี้จะเว้นว่างไว้
-----
ชื่อประเทศ (รหัสตัวอักษร 2 ตัว) [AU]:IT
ชื่อรัฐหรือจังหวัด (ชื่อเต็ม) [บางรัฐ]:.
ชื่อท้องที่ (เช่น เมือง) []:.
ชื่อองค์กร (เช่น บริษัท) [Internet Widgits Pty Ltd]:Notariato
ชื่อหน่วยขององค์กร (เช่น ส่วน) []:.
ชื่อสามัญ (เช่น เซิร์ฟเวอร์ FQDN หรือชื่อของคุณ) []:.*
ที่อยู่อีเมล []:[email protected]
บันทึก: ในคำตอบก่อนหน้านี้ ฉันใส่ไวด์การ์ด (*) สำหรับชื่อสามัญเพื่อ "เพิกเฉย" ที่จะใช้ใบรับรอง มันสามารถทำงานได้?
ดังนั้นคำสั่งนี้จึงสร้างไฟล์ แคลิฟอร์เนีย ไฟล์ที่ฉันจะใช้เพื่อสร้างเซิร์ฟเวอร์และใบรับรองไคลเอ็นต์ของฉัน
ฉัน สร้างคีย์และใบรับรอง SSL ของเซิร์ฟเวอร์ Apache ของฉัน: นี่ยังไม่ใช่ใบรับรองไคลเอนต์ (ใบรับรองที่ไคลเอนต์ใช้เพื่อพูดกับเซิร์ฟเวอร์: "ฉันเป็นไคลเอนต์ที่ผ่านการรับรอง !!!") นี่คือใบรับรองเซิร์ฟเวอร์ที่บอกกับไคลเอนต์: "ฉันเป็นเซิร์ฟเวอร์ที่ถูกต้อง ไม่ใช่คนตรงกลาง". ถูกต้องหรือไม่?
หากต้องการสร้างใบรับรอง serer นี้ ก่อนอื่นฉันสร้างเซิร์ฟเวอร์ รหัสส่วนตัว:
openssl genrsa -out server.key 4096
จากนั้นฉันใช้รหัสส่วนตัวของเซิร์ฟเวอร์นี้เพื่อสร้างคำขอสร้างใบรับรอง
opensl req -new -key server.key -out server.req -sha256
นอกจากนี้ที่นี่ยังถามฉันด้วยพารามิเตอร์บางอย่าง:
คุณกำลังจะถูกขอให้ป้อนข้อมูลที่จะรวมเข้าด้วยกัน
ในคำขอใบรับรองของคุณ
สิ่งที่คุณกำลังจะป้อนคือสิ่งที่เรียกว่า Distiminated Name หรือ DN
มีฟิลด์ค่อนข้างน้อย แต่คุณสามารถเว้นว่างไว้ได้
สำหรับบางฟิลด์จะมีค่าเริ่มต้น
หากคุณป้อน '.' ช่องนี้จะเว้นว่างไว้
-----
ชื่อประเทศ (รหัสตัวอักษร 2 ตัว) [AU]:IT
ชื่อรัฐหรือจังหวัด (ชื่อเต็ม) [บางรัฐ]:.
ชื่อท้องที่ (เช่น เมือง) []:.
ชื่อองค์กร (เช่น บริษัท) [Internet Widgits Pty Ltd]:Notariato
ชื่อหน่วยขององค์กร (เช่น ส่วน) []:.
ชื่อสามัญ (เช่น เซิร์ฟเวอร์ FQDN หรือชื่อของคุณ) []:*
ที่อยู่อีเมล []:[email protected]
บันทึก: ที่นี่ฉันใส่ไวด์การ์ด (*) สำหรับชื่อสามัญเพื่อ "เพิกเฉย" ที่จะใช้ใบรับรอง มันสามารถทำงานได้?
จากนั้นฉันใช้คำขอสร้างใบรับรองและใบรับรอง CA เพื่อสร้างใบรับรองเซิร์ฟเวอร์:
opensl x509 -req -in server.req -CA ca.cer -CAkey ca.key -set_serial 100 -extensions เซิร์ฟเวอร์ -days 1460 -outform PEM -out server.cer -sha256
จากนั้นฉันพยายามติดตั้งใบรับรองใน Apache ของฉันโดย:
คัดลอกใบรับรอง CA ไปยังสถานที่ถาวร เราจะต้องระบุใบรับรอง CA ของเราใน Apache เนื่องจากเป็น CA ที่สร้างขึ้นเอง ไม่ใช่ใบรับรองที่มีอยู่ในระบบปฏิบัติการทุกที่:
cp ca.cer /etc/ssl/certs/
คัดลอกใบรับรองเซิร์ฟเวอร์และรหัสส่วนตัวไปยังตำแหน่งถาวร:
cp server.cer /etc/ssl/certs/server.crt
cp server.key /etc/ssl/private/server.key
เปิดใช้งานโมดูล SSL ใน Apache:
a2enmod ssl
เปิดใช้งานไซต์ SSL ใน Apache และปิดใช้งานไซต์ HTTP:
a2ensite เริ่มต้น-ssl
a2dissite เริ่มต้น
และตอนนี้ฉันพบปัญหากับคำสั่งสุดท้าย ตามผลลัพธ์ของสองคำสั่งสุดท้าย:
andrea@ubuntu:~/cert$a2ensite default-ssl.dll
ไซต์เริ่มต้น - ssl เปิดใช้งานแล้ว
andrea@ubuntu:~/cert$ a2dissite เริ่มต้น
ข้อผิดพลาด: ไม่มีค่าเริ่มต้นของไซต์!
อย่างที่คุณเห็นเมื่อฉันแสดง a2dissite เริ่มต้น ฉันได้รับสิ่งนี้ ข้อผิดพลาด: ไม่มีค่าเริ่มต้นของไซต์! ข้อความผิดพลาด.
ทำไม มันหมายความว่าอะไร? เกิดอะไรขึ้น? ฉันจะพยายามแก้ไขข้อผิดพลาดนี้ได้อย่างไร