Apache ดูเหมือนว่าจะใช้ใบรับรองเก่าที่หมดอายุแม้ว่าจะติดตั้งใหม่ก็ตาม


15

Apache 2.2.3 / mod_ssl / CentOS 5.5 VPS

ใบรับรองของเราหมดอายุในวันที่ 2011-10-06 และแม้ว่าเราได้ติดตั้งใหม่อย่างถูกต้อง แต่การเรียกดูไปยังไซต์ยังคงแสดงใบรับรองที่หมดอายุ! ฉันพยายามลบแคชของเบราว์เซอร์และใช้เบราว์เซอร์ที่แตกต่างกันหลายตัว บรรทัดที่เกี่ยวข้องจากไฟล์ ssl.conf (ฉันได้ยกเว้นสิ่งที่ใส่ความคิดเห็นไว้):

Listen 127.0.0.1:443
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
# Note - I tried disabling SSLSessionCache with the "none" setting but it didn't help.
<VirtualHost 127.0.0.1:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /var/certs/gentlemanjoe.com/new2011/gentlemanjoe.com.crt
SSLCertificateKeyFile /var/certs/gentlemanjoe.com/new2011/gentlemanjoe.com.key
SSLCertificateChainFile /var/certs/gentlemanjoe.com/new2011/gd_bundle.crt
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
ServerAdmin webmaster@donotemailme.com
DocumentRoot /var/www/gentlemanjoe.com
ServerName gentlemanjoe.com
<Directory /var/www/gentlemanjoe.com>
    AllowOverride All
    Order deny,allow
    allow from all
</Directory>          
</VirtualHost>

สิ่งที่ฉันได้ตรวจสอบแล้ว

ก่อนอื่นฉันพยายามย้ายไฟล์ใบรับรองและคีย์เก่าไปยังโฟลเดอร์ที่แตกต่างอย่างสิ้นเชิงเพื่อให้แน่ใจว่า Apache ยังไม่ได้จับพวกเขาอย่างใด ไม่มีอะไรเปลี่ยนแปลง เพื่อความสนุกฉันได้ลองเปลี่ยนชื่อใบรับรองและคีย์ไฟล์ใหม่ชั่วคราวและ Apache บ่นตามหน้าที่และปฏิเสธที่จะเริ่มต้น

จากนั้นฉันพยายามทำให้แน่ใจว่าฉันไม่ได้ถูกหลอกโดยการแก้ไขไฟล์กำหนดค่าที่ไม่ถูกต้อง การใช้ "ค้นหา" ฉันพบไฟล์ httpd.conf เพียงไฟล์เดียวภายใต้ /etc/httpd/conf/httpd.conf ฉันยังใช้ "ค้นหา" เพื่อตรวจสอบว่ามีไฟล์ ssl.conf เพียงไฟล์เดียวเท่านั้น /etc/httpd/conf.d/ssl.conf ไฟล์สำคัญคือสิ่งที่ฉันสร้างขึ้นโดยใช้ OpenSSL ทำตามคำแนะนำของ GoDaddy ในการสร้าง CSR

ฉันตรวจสอบแล้วว่าฉันทำงานกับเว็บไซต์ที่ถูกต้องโดยการอัปโหลดไฟล์ test.html ไปยังโฟลเดอร์ /var/www/gentlemanjoe.com และยืนยันว่าฉันสามารถเรียกดูได้ แต่ถ้าฉันพยายามดูไฟล์ทดสอบใน HTTPS ฉันจะได้รับการเตือนการหมดอายุของใบรับรองเดียวกัน

ฉันตรวจสอบว่าใบรับรองนั้นมีวันหมดอายุที่ถูกต้อง:

openssl x509 -in /var/certs/gentlemanjoe.com/new2011/gentlemanjoe.com.crt -noout -text

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            07:e7:49:69:97:96:16
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certificates.godaddy.com/repository, CN=Go Daddy Secure Certification Authority/serialNumber=07969287
        Validity
            Not Before: Oct 21 17:37:55 2011 GMT
            Not After : Oct  8 21:16:03 2013 GMT
        Subject: C=CA, ST=BC, L=Burnaby, O=Diamond Bailey Consolidated Commercial Services Ltd, OU= , CN=www.gentlemanjoe.com

ฉันลองป้อนใบรับรองที่ GoDaddy อีกครั้งด้วย CSR ใหม่และดูเหมือนว่าทุกอย่างจะทำงานได้ แต่ฉันได้ผลลัพธ์เดียวกันในเบราว์เซอร์

เบาะแสที่เป็นไปได้ # 1

เมื่อใดก็ตามที่ฉัน "apachectl รีสตาร์ท" ฉันเห็นสิ่งนี้ในไฟล์ error_log:

[Fri Oct 21 18:03:33 2011] [notice] SIGHUP received.  Attempting to restart
[Fri Oct 21 18:03:33 2011] [notice] Digest: generating secret for digest authentication ...
[Fri Oct 21 18:03:33 2011] [notice] Digest: done
[Fri Oct 21 18:03:33 2011] [info] APR LDAP: Built with OpenLDAP LDAP SDK
[Fri Oct 21 18:03:33 2011] [info] LDAP: SSL support available
[Fri Oct 21 18:03:33 2011] [info] Init: Seeding PRNG with 256 bytes of entropy
[Fri Oct 21 18:03:33 2011] [info] Init: Generating temporary RSA private keys (512/1024 bits)
[Fri Oct 21 18:03:33 2011] [info] Init: Generating temporary DH parameters (512/1024 bits)
[Fri Oct 21 18:03:33 2011] [info] Shared memory session cache initialised
[Fri Oct 21 18:03:33 2011] [info] Init: Initializing (virtual) servers for SSL
[Fri Oct 21 18:03:33 2011] [warn] RSA server certificate CommonName (CN) `www.gentlemanjoe.com' does NOT match server name!?
[Fri Oct 21 18:03:33 2011] [info] Server: Apache/2.2.3, Interface: mod_ssl/2.2.3, Library: OpenSSL/0.9.8e-fips-rhel5
[Fri Oct 21 18:03:34 2011] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
[Fri Oct 21 18:03:34 2011] [info] Server built: Aug 30 2010 12:28:40

GoDaddy techs บอกฉันว่า www vs ไม่ใช่ www ไม่ควรเป็นไรและฉันมักจะเห็นด้วยเนื่องจากคำเตือนความปลอดภัยในเบราว์เซอร์ของฉันไม่ได้บ่นเกี่ยวกับชื่อเซิร์ฟเวอร์ที่ไม่ตรงกัน แต่เป็นการหมดอายุซึ่งบ่งชี้ว่าใบรับรองเก่ายังคงอยู่ กำลังโหลดอย่างใด

เบาะแสที่เป็นไปได้ # 2

ส่วนหัวการตอบกลับเซิร์ฟเวอร์ HTTP สำหรับhttp://gentlemanjoe.comพูดว่า "Andromeda" มากกว่า "Apache" สิ่งนี้ดูแปลกสำหรับฉันเนื่องจาก Googling ของฉัน "Andromeda" เปิดโครงการประเภทสื่อเซิร์ฟเวอร์ซึ่งจะไม่ถูกติดตั้งบนเซิร์ฟเวอร์นี้ (แต่ฉันไม่สามารถพูดได้ด้วยความมั่นใจเนื่องจากฉันไม่ได้ตั้งค่านี้ ผู้ดูแลระบบปกติ / นักพัฒนาอยู่ในช่วงวันหยุดและฉันเพิ่งช่วยเพื่อนกับเว็บไซต์ของเขา) นอกจากนี้ไฟล์ httpd.conf ไม่มีสตริง "Andromeda" ที่ระบุว่ายังไม่ได้รับการแก้ไขเพื่อคายสิ่งนี้ ดังนั้นมันอาจจะเป็นแพลตฟอร์มอีคอมเมิร์ซของวีโอไอพีที่เขาใช้ แต่สิ่งที่จะเป็นจุดเปลี่ยนหัวตอบสนอง Apache มาตรฐาน?


ข้อผิดพลาดนี้คืออะไร: ใบรับรองเซิร์ฟเวอร์ RSA CommonName (CN) `www.gentlemanjoe.com 'ไม่ตรงกับชื่อเซิร์ฟเวอร์!
mdpc

ฉันไม่แน่ใจจริงๆฉันคิดว่ามันบ่นว่า www.gentlemanjoe.com ไม่ตรงกับ gentlemanjoe.com แต่นั่นไม่ได้อธิบายว่าทำไมเว็บไซต์ยังใช้ใบรับรองหมดอายุ หากเป็นเพียงข้อผิดพลาดทั่วไปของชื่อ / ชื่อเซิร์ฟเวอร์ที่ผิดพลาดฉันจะไม่เห็นสิ่งที่ปรากฏในคำเตือนความปลอดภัยของเบราว์เซอร์หรือไม่ ใบรับรองใหม่ไม่ควรแสดงว่าหมดอายุแต่มีคำเตือนที่แตกต่างกันเกี่ยวกับการผิดพลาดของชื่อใช่ไหม
Jordan Rieger

คำตอบ:


17

มีบางอย่างต่อหน้า Apache ตรวจสอบการกำหนดค่าที่:

Listen 127.0.0.1:443
....
<VirtualHost 127.0.0.1:443>

กำลังฟังเฉพาะ localhost เท่านั้นดังนั้นลูกค้าที่ใช้อินเทอร์เน็ตจึงไม่ได้กดปุ่มบริการนี้โดยตรง

สำหรับการตรวจสอบสติที่ Apache โหลดใบรับรองที่ถูกต้องให้กดบริการโดยตรงจากผู้ฟังของ Apache: openssl s_client -connect 127.0.0.1:443 -showcerts

ไม่แน่ใจเกี่ยวกับส่วนหัว Andromeda lsof -iดังนั้นขอหากระบวนการ:

Apache จะมี127.0.0.1:443ในขณะที่บริการอื่น ๆ มี0.0.0.0:443(หรือที่อยู่สาธารณะของ VPS :443) - เป็นบริการที่ต้องการใบรับรองใหม่


ใช่ ขอบคุณเชนนั่นมันสมเหตุสมผลมาก เด็กชายคนนี้เป็นคนที่ยาก กระบวนการกลายเป็นพร็อกซีเซิร์ฟเวอร์ชื่อ nginx โดยฟังที่อยู่ IP ที่ฉันไม่ทราบว่าเชื่อมโยงกับเซิร์ฟเวอร์แล้วส่ง HTTPS และคำขอ HTTP ไปยัง Apache ฉันไม่รู้ว่าทำไมคนสุดท้ายที่คิดว่านี่เป็นความคิดที่ดีดูเหมือนว่าจะเป็นหมูที่ไม่มีประสิทธิภาพ และ nginx ต้องการให้ฉันทำการฟอร์แมตใบรับรองที่ GoDaddy จัดทำขึ้นเพื่อให้ใบรับรองเซิร์ฟเวอร์และเครือข่ายผู้มีอำนาจในหนึ่งไฟล์ตามลำดับที่แน่นอน อย่างไรก็ตามมันใช้งานได้ทันที! ขอขอบคุณ!
Jordan Rieger

2
@JordanRieger ดีใจที่ได้ยิน! โดยทั่วไปแล้ว nginx นั้นถือว่าเบากว่าและเร็วกว่า Apache ดังนั้นจึงอาจมีกรณีสำหรับการจัดการคำขอบางอย่างภายใน (เช่นเนื้อหาคงที่) และส่งผ่านชุดย่อยเฉพาะของคำขอไปยัง Apache .. แต่ดูเหมือนว่ามันจะเป็นเช่นนั้น เพียงส่งทุกอย่างไปที่ Apache ดังนั้นคุณพูดถูก - แค่เสียประสิทธิภาพ
Shane Madden

ในกรณีของเรามันคือ AWS ELB
Akshay

1

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

หยุดบริการ:

service apache2 stop

ตรวจสอบว่าเว็บไซต์ยังคงสามารถเข้าถึงได้ ถ้าใช่คุณได้ระบุสาเหตุแล้ว

ตอนนี้ทำงาน

ps aux | grep apache

มันจะให้รายการของการเรียกใช้กระบวนการ apache2 และ PID ของพวกเขา ฆ่าพวกเขาทั้งหมด (หมายเหตุคำสั่งนี้อาจส่งคืนกระบวนการที่ไม่เกี่ยวข้องกับ Apache ในชื่อ / ผู้ใช้ ฯลฯ เช่น Apache Tomcat คุณอาจไม่ต้องการฆ่าพวกเขา)

kill <pid>

เรียกใช้ ps aux อีกครั้งและให้แน่ใจว่ากระบวนการจะไม่ทำงานอีกต่อไป

ตรวจสอบอีกครั้งว่าสามารถเข้าถึงไซต์ได้หรือไม่ มันไม่ควรจะเป็น

ตอนนี้เริ่มบริการ apache

service apache2 start

ตรวจสอบว่ามีการให้บริการใบรับรองใหม่

หากคุณไม่ต้องการที่จะฆ่ากระบวนการคุณอาจรีบูตระบบ มันจะมีผลเช่นเดียวกัน

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