Score:0

ไซต์นี้ไม่มีใบรับรองที่ถูกต้องและเชื่อถือได้ || เว็บเซิร์ฟเวอร์ Apache2, Windows root CA

ธง bh

ฉันกำลังเรียนรู้เกี่ยวกับใบรับรอง, HTTPS ด้วยกัน และหลังจากผ่านไป 4 วัน ฉันก็ไม่รู้ว่าจะตั้งค่าอย่างไรให้น่าเชื่อถือ ในห้องปฏิบัติการของฉัน ฉันมีเซิร์ฟเวอร์ Windows ที่มีบทบาท CA

ก่อนหน้านี้ ฉันติดตั้ง VM-Dell OpenManage สำหรับเซิร์ฟเวอร์ของฉัน มีอินเทอร์เฟซแบบกราฟิกสำหรับคำขอและใบรับรองการนำเข้าสำหรับการเข้าถึง HTTPS ฉันสร้างคำขอลงนามใบรับรองสำเร็จและรับใบรับรองจากเซิร์ฟเวอร์ windows CA ของฉัน (https://x.x.x.x/certsrv/) ใช้เวลาไม่เกิน 2 นาที

ฉันคิดว่าฉันสามารถลองสิ่งนี้ได้บนเว็บเซิร์ฟเวอร์ apache2 (Ubunut20.04) ตอนนี้ฉันติดอยู่และยังไม่รู้ว่าจะทำงานอย่างไร

1. ปัจจุบัน (หลังจาก ~ 50 openssl req) ฉันขอใบรับรองด้วยคำสั่งเหล่านี้:

openssl req -new -newkey rsa:2048 -nodes -addext âsubjectAltName = DNS:*.mydomain.localâ -keyout serverkey.key -out serverreq.csr

2. ฉันเปิดเซิร์ฟเวอร์ windows CA จากเบราว์เซอร์ https://x.x.x.x/certsrv/ และขอใบรับรอง-->คำขอใบรับรองขั้นสูง-->วางเนื้อหา serverreq.csr-->WebserverTemplate ดาวน์โหลดใบรับรอง

3. กลับไปที่ linux ไฟล์ conf ของฉัน (/etc/apache2/sites-avaliable/mysite.conf): มีลักษณะดังนี้

<VirtualHost _default_:443>
        Protocols h2 http/1.1
                ServerName  mysite.local
                ServerAlias www.mysite.local
                DocumentRoot /var/www/html/mysite
                SSLEngine on
                SSLCertificateFile      /etc/ssl/certandkey/myservercert.crt
                SSLCertificateKeyFile   /etc/ssl/certandkey/myserverkey.key
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
<VirtualHost *:80>
    ServerName mysite.local
    Redirect / https://mysite.local/
</VirtualHost>

ฉันจำเป็นต้องกำหนดค่าไฟล์ # Server Certificate Chain: และ # Certificate Authority (CA):?

อาปาเช่กำลังทำงานอยู่

4. หลังจากนี้หากเปิดหน้าเว็บจะมีข้อความว่า

ใบรับรอง - ขาดหายไป
ไซต์นี้ไม่มีใบรับรองที่ถูกต้องและเชื่อถือได้ (net::ERR_CERT_COMMON_NAME_INVALID)

แต่ถ้าฉันเปิด OpenManage มันบอกว่า

ใบรับรอง - ถูกต้องและเชื่อถือได้
การเชื่อมต่อกับไซต์นี้ใช้ใบรับรองเซิร์ฟเวอร์ที่ถูกต้องและเชื่อถือได้ซึ่งออกโดย mydomain-DC-CA

ใบรับรองทั้งสองมาจากเซิร์ฟเวอร์ Windows CA เดียวกัน

5. ฉันพยายามกำหนดค่า /etc/ssl/openssl.cnf แต่ฉันไม่เข้าใจจริงๆถ้าฉันแก้ไขบางอย่าง ก็จะไม่มีอะไรทำงาน

เกิดอะไรขึ้นกับการกำหนดค่าของฉัน ฉันจะกำหนดค่าได้อย่างไร มีแบบฝึกหัดที่ดีหรือไม่? 90% ของเวลาที่ Google แสดงเฉพาะใบรับรองที่ลงนามด้วยตนเองและเบราว์เซอร์วิเศษ แต่ฉันต้องการกำหนดค่าด้วย windows CA

ขอบคุณที่ช่วยเหลือ

ขอโทษสำหรับภาษาอังกฤษของฉัน

Gerrit avatar
cn flag
คุณสามารถแสดงผลลัพธ์ของ: `openssl x509 -subject -in /etc/ssl/certandkey/myservercert.crt -noout` และ `openssl x509 -checkhost mysite.local -in /etc/ssl/certandkey/myservercert.crt -noout `?
Finaria avatar
bh flag
ฉันมีข้อผิดพลาด: `ชื่อโฮสต์เซิร์ฟเวอร์ของฉันไม่ตรงกับใบรับรอง' ฉันจะรู้ได้อย่างไรว่าชื่อโฮสต์ของใบรับรองคืออะไร `openssl x509 -in /etc/ssl/glpicertkey/glpiservercert.crt -text` ด้วยสิ่งนี้ฉันไม่เห็นชื่อโฮสต์ภายในใบรับรอง `root@myserver:/home/user# openssl x509 -checkhost myserver -in /etc/ssl/certandkey/servercert.crt -noout ชื่อโฮสต์ myserver ไม่ตรงกับใบรับรอง root@myserver:/home/user# openssl x509 -subject -in /etc/ssl/certandkey/servercert.crt -noout หัวเรื่อง=C = HU, ST = ฮังการี, L = เมือง, O = บริษัทของฉัน, OU = IT, CN = mydomain.local`
Gerrit avatar
cn flag
mydomain.local อยู่ใน CN ซึ่งไม่ตรงกับ mysite.local ดังนั้นจึงไม่ตรงกัน คุณต้องรวมรายการ DNS ไว้ในชื่อทางเลือกของหัวเรื่องเพื่อดูว่าตรงกันหรือไม่ ฉันผนวกข้อมูลนี้เข้ากับคำตอบของฉัน
Score:0
ธง cn

กำลังสร้าง

คุณสามารถใช้ไฟล์นามสกุลขนาดเล็ก (utf-8) เพื่อตั้งค่าล่วงหน้ารายการที่คุณต้องการและสร้าง CSR ได้ง่ายขึ้น รายการ DNS ต้องเป็น punycode หากไม่ใช่ ASCII (https://www.rfc-editor.org/rfc/rfc3492)

[ต้องการ]
default_bits = 2048
พรอมต์ = ไม่
default_md = sha256
Distributed_name = dn
req_extensions = ต่อ

[ ต่อ ]
subjectKeyIdentifier=แฮช
keyUsage=digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = mysite.local
DNS.2 = www.mysite.local

[ ดีเอ็นเอ ]
O=ACME
OUT=การทดสอบ
อีเมลแอดเดรส[email protected]
CN = mysite.local

คุณสามารถบันทึกสิ่งนี้เป็น sslcert.cnf ตัวอย่างเช่น.

ข้อสังเกตเกี่ยวกับสัญลักษณ์แทน

คุณสามารถใช้ไวด์การ์ด เช่น *.example.com พวกเขาทำงานในระดับเดียวเท่านั้น foo.bar.example.com จะไม่ครอบคลุมโดย *.example.com นอกจากนี้ *example.com ยังใช้งานไม่ได้ เครื่องหมายดอกจันจะต้องอยู่ในองค์ประกอบโดเมนของตนเอง

จากนั้น หากคุณยังไม่มีคีย์ส่วนตัว:

openssl req -nodes -newkey rsa:2048 -keyout sslcert.key -ออก sslcert.csr -config sslcert.cnf -utf8

หรือถ้าคุณมีคีย์ส่วนตัวอยู่แล้ว sslcert.key

opensl req -key sslcert.key -out sslcert.csr -config sslcert.cnf -utf8

sslcert.csr จะเป็นเอาต์พุต (และ sslcert.key ในตัวอย่างแรก)

คุณยังสามารถเพิ่มหัวข้อ subjectAltName ด้วย -addext

opensl req -nodes -newkey rsa:2048 -keyout sslcert.key -out sslcert.csr -addext 'subjectAltName = DNS:example.com' -utf8

การเช็คชื่อ

คุณสามารถใช้คำสั่ง opensl เพื่อตรวจสอบว่าใบรับรองอาจตรงกับโดเมนที่คุณใช้ในการเรียกดูหรือไม่

opensl x509 - ใน sslcert.crt -noout -checkhost example.com

ในอดีตรายการ CN ในชื่อเฉพาะของ เรื่อง ใช้ในการตรวจสอบชื่อโฮสต์ SSL และยังคงเต็มไปด้วยหนึ่งในโดเมนตามธรรมเนียม แต่เช่น Chrome จะไม่ยอมรับใบรับรองที่ไม่ได้ใช้ส่วน Subject Alternative Names (SAN) และนี่คือส่วนที่ใช้สำหรับใบรับรองแบบหลายชื่อ (แม้ว่าคุณจะใช้เพียงโดเมนที่มีและไม่มี www นั่นคือใบรับรองแบบหลายชื่อแล้ว) ตามบรรทัดฐานของ CA/Browser ชื่อใดๆ ที่คุณตั้งใน CN จะต้องรวมอยู่ในส่วน altnames ด้วย

คุณสามารถดูได้ในผลลัพธ์ของ

opensl x509 -text -noout -in cert.crt | grep -F 'ชื่อเรื่องอื่น:' -A 1

น่าเสียดายที่ไม่มีสวิตช์เอาต์พุตสำเร็จรูปสำหรับเฉพาะส่วน SAN

ดูเหมือนว่า:

            X509v3 ชื่อสำรองของหัวเรื่อง:
                DNS:cert.local, DNS:cert.example.com

ตรวจสอบเว็บเซิร์ฟเวอร์

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

openssl s_client -เชื่อมต่อ example.com:443 -ชื่อเซิร์ฟเวอร์ example.com -showcerts

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

ในการเชื่อมต่อ คุณยังสามารถใช้ที่อยู่ IP ดังนั้นหากเว็บเซิร์ฟเวอร์อยู่ในเครื่องเดียวกันและฟังการย้อนกลับด้วย คุณสามารถพูดได้ว่า

openssl s_client -เชื่อมต่อ localhost:443 -ชื่อเซิร์ฟเวอร์ example.com -showcerts

-ชื่อเซิร์ฟเวอร์ มีไว้สำหรับเลือก vhost ที่เหมาะสมหากเว็บเซิร์ฟเวอร์มี vhost หลายตัวบนพอร์ต 443

Finaria avatar
bh flag
ฉันเรียกใช้คำสั่ง: `openssl req -key sslcert.key -out sslcert.csr -config sslcert.cnf` แต่ในใบรับรองไม่มี SAN และหลังจากที่ฉันเปิดไซต์ (F12) ข้อความแจ้งว่า: `Certificate - Subject Alternative Name missing ใบรับรองสำหรับไซต์นี้ไม่มีส่วนขยาย SAN ที่มีชื่อโดเมนหรือที่อยู่ IP` หากฉันเพิ่มคำสั่งนี้ให้กับคุณ `-addext âsubjectAltName = DNS:*.mydomain.localâ` หลังจากนั้น SAN จะปรากฏขึ้น หากไม่มีสิ่งนี้ และฉันใช้ไฟล์ sscert.conf และมีการกำหนดค่า SAN แล้วทำไมถึงใช้ไม่ได้? และใบรับรองที่หายไปยังคงเป็นปัญหา
Gerrit avatar
cn flag
คุณลองไฟล์ปรับแต่งที่แก้ไขในคำตอบของฉันได้ไหม ดูเหมือนว่าฉันจะขึ้นอยู่กับการตั้งค่าพื้นฐานบางอย่างในการแจกจ่าย openssl ของระบบ คุณยังคงได้รับใบรับรองที่ขาดหายไปเมื่อคุณมีรายการ CN และ DNS ที่ถูกต้องหรือไม่
Finaria avatar
bh flag
ยังไม่มีโชค คุณช่วยอธิบายวิธีการทำงานของชื่อโฮสต์ได้ไหม ฉันคิดว่านั่นคือจุดที่ฉันล้มเหลว ชื่อโฮสต์เซิร์ฟเวอร์ของฉันคือ glpi.mylab.local DNS/AD ของฉันคือ mylab.local `[ alt_names ] DNS.1 = glpi.mylab.local DNS.2 = www.glpi.mylab.local` `[ dn ] ... CN = glpi.mylab.local` ถ้าฉัน cheskhost สำหรับชุดค่าผสมใด ๆ มันจะไม่ตรงกันเสมอ ผมทำอะไรผิดหรือเปล่า?
Finaria avatar
bh flag
และสิ่งนี้: `openssl req -nodes -newkey rsa:2048 -keyout sslcert.key -out sslcert.csr -config sslcert.cnf -utf8` ทำงาน แต่ไม่มี SAN ในไฟล์ใบรับรอง เฉพาะในกรณีที่ฉันเพิ่มสิ่งนี้ในคำสั่งของฉัน: `-addext âsubjectAltName = DNS:*glpi.mylab.localâ `
Gerrit avatar
cn flag
*glpi ไม่ถูกต้อง หรือคุณลองใช้มาร์กอัปที่นี่ *.glpi.mylab.local สามารถทำงานกับตัวแปร www ได้ แต่ใช้กับตัวแปรที่ไม่มี www ไม่ได้
Finaria avatar
bh flag
เฮ! ไม่ ยังใช้งานไม่ได้ ไฟล์กำหนดค่า ssl ของฉันมีลักษณะดังนี้: `[ ความต้องการ ] default_bits = 2048 พรอมต์ = ไม่ default_md = sha256 Distributed_name = dn req_extensions = ต่อ [ ต่อ ] subjectKeyIdentifier=แฮช keyUsage=digitalSignature, keyEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = glpi.mylab.local DNS.2 = www.glpi.mylab.local [ ดีเอ็นเอ ] ที่อยู่อีเมล=ไม่มี CN = mylab.local` ขอคำสั่ง: `openssl req -new -newkey rsa:2048 -nodes -keyout tsslkey.key -out tsslreq.csr -config sslcert.cnf -utf8`
Finaria avatar
bh flag
ตรวจสอบ DNS: `openssl req -noout -text -in tsslreq.csr |grep DNS DNS:glpi.mylab.local, DNS:www.glpi.mylab.local` โฆษณายังคง `ไซต์นี้ไม่มีใบรับรองที่ถูกต้องและเชื่อถือได้ (net::ERR_CERT_COMMON_NAME_INVALID)` ชื่อโฮสต์คือ glpi.mylab.local เกิดอะไรขึ้น?
Gerrit avatar
cn flag
ฉันสงสัยว่ามี _default_ vhost_ ตัวที่สองบนพอร์ต 443 ใน Apache ที่แทนที่ vhost ของคุณหรือไม่
Gerrit avatar
cn flag
คุณกำลังตรวจสอบ CSR คุณตรวจสอบใบรับรองที่ออกด้วยหรือไม่
Finaria avatar
bh flag
คุณพูดถูก ฉันไม่ได้ตรวจสอบใบรับรอง มันผิด: `X509v3 Subject Alternative Name: ชื่ออื่น ๆ:` ทำไมมันถูกสร้างขึ้นเช่นนี้ ในเมื่อไฟล์คำขอดี? ไม่มี vhost เริ่มต้นอื่น ๆ `a2dissite default-ssl.conf ไซต์เริ่มต้น -ssl ถูกปิดใช้งานแล้ว '
Gerrit avatar
cn flag
ข้อผิดพลาดชื่ออื่นอาจบอกเป็นนัยว่าข้อมูลชื่อ DNS ถูกจัดเก็บโดย CA ในรูปแบบที่ openssl ไม่รองรับ ชื่อ DNS ควรเป็น IA5STRING แต่เมื่อลองคิดดูดีๆ ดูเหมือนว่าข้อผิดพลาดจะระบุว่าไม่ได้เลือกแม้แต่รูปแบบ DNS Name หรือมี GeneralName อื่นรวมอยู่ด้วยที่ไม่รองรับ.. อาจดูที่แท็บ "Subject Name" ในเทมเพลตการออก SSL ของคุณ ฉันได้ลงนามด้วย Windows CA ของไฟล์ openssl CSR แล้ว และนั่นค่อนข้างราบรื่นเสมอ แต่อาจเป็นได้ว่ามีการตั้งค่าการทำงานในเทมเพลตที่ใช้เพิ่มข้อมูลอื่นๆ ซึ่งเข้ากันไม่ได้กับ openssl
Gerrit avatar
cn flag
นอกจากนี้ เพื่อเป็นการป้องกันไว้ก่อน ตรวจสอบให้แน่ใจว่าไฟล์กำหนดค่า openssl ของคุณถูกจัดเก็บไว้ใน utf-8 หรือ ascii และมีเฉพาะการขึ้นบรรทัดใหม่ของ Unix
Finaria avatar
bh flag
ความสำเร็จ :). ฉันล้มเลิกความคิดที่จะสร้างไฟล์ ssl.cnf ของตัวเอง ฉันใช้ค่าเริ่มต้น แต่มี -addtext SAN ก่อนหน้านี้ฉันทิ้ง "*" จาก subjectAltName `openssl req -new -addext "subjectAltName = DNS:glpi.mylab.local" -newkey rsa:2048 -nodes -keyout testkey.key -out testreq.csr` หลังจากฉันนำเข้าไฟล์ใบรับรอง มีข้อผิดพลาดใหม่: `"เนื้อหาที่ใช้งานอยู่ซึ่งมีข้อผิดพลาดของใบรับรอง"` ฉันเพิ่งล้างแคชของเบราว์เซอร์และใบรับรองได้รับการยอมรับ ทั้งหมดเป็นสีเขียว ขอบคุณสำหรับความช่วยเหลือและความอดทน

โพสต์คำตอบ

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