_default_ VirtualHost ทับซ้อนกันบนพอร์ต 443 ครั้งแรกมีความสำคัญ


64

ฉันมีสอง ruby ​​on Rails 3 แอปพลิเคชันที่ทำงานบนเซิร์ฟเวอร์เดียวกัน (Ubuntu 10.04) ทั้งสองด้วย SSL

นี่คือไฟล์ config apache ของฉัน:

<VirtualHost *:80>
ServerName example1.com
DocumentRoot /home/me/example1/production/current/public
</VirtualHost>
<VirtualHost *:443>
ServerName example1.com
DocumentRoot /home/me/example1/production/current/public
SSLEngine on
SSLCertificateFile /home/me/example1/production/shared/example1.crt
SSLCertificateKeyFile /home/me/example1/production/shared/example1.key
SSLCertificateChainFile /home/me/example1/production/shared/gd_bundle.crt
SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
</VirtualHost>


<VirtualHost *:80>
ServerName example2.com
DocumentRoot /home/me/example2/production/current/public
</VirtualHost>
<VirtualHost *:443>
ServerName example2.com
DocumentRoot /home/me/example2/production/current/public
SSLEngine on
SSLCertificateFile /home/me/example2/production/shared/iwanto.crt
SSLCertificateKeyFile /home/me/example2/production/shared/iwanto.key
SSLCertificateChainFile /home/me/example2/production/shared/gd_bundle.crt
SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM
</VirtualHost>

มีปัญหาอะไร:

เมื่อรีสตาร์ทเซิร์ฟเวอร์จะให้ผลลัพธ์ดังนี้:

 * Restarting web server apache2                                   
 [Sun Jun 17 17:57:49 2012] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
 ... waiting [Sun Jun 17 17:57:50 2012] [warn] _default_ VirtualHost overlap on port 443, the first has precedence

เมื่อ googling ว่าทำไมปัญหานี้กำลังจะมา

คุณไม่สามารถใช้ชื่อโฮสต์เสมือนที่ใช้ SSL ได้เนื่องจาก SSL handshake (เมื่อเบราว์เซอร์ยอมรับใบรับรองของเว็บเซิร์ฟเวอร์ที่ปลอดภัย) เกิดขึ้นก่อนคำขอ HTTP ซึ่งระบุชื่อโฮสต์เสมือนที่เหมาะสมตามชื่อ หากคุณวางแผนที่จะใช้โฮสต์เสมือนตามชื่อโปรดจำไว้ว่าพวกเขาจะทำงานกับเว็บเซิร์ฟเวอร์ที่ไม่ปลอดภัยของคุณเท่านั้น

แต่ไม่สามารถหาวิธีเรียกใช้แอปพลิเคชัน SSL สองตัวบนเซิร์ฟเวอร์เดียวกันได้

มีใครช่วยฉันได้บ้าง


5
คุณไม่มี_default_vhosts ใด ๆในการกำหนดค่าที่คุณให้ดังนั้นจึงอยู่ที่อื่น ผลลัพธ์ของapache2ctl -Sอะไร (ใช่มีความเป็นไปได้ที่จะเรียกใช้ vhosts แบบหลายชื่อบนใบรับรองที่แตกต่างกันหากคุณไม่จำเป็นต้องสนับสนุนเบราว์เซอร์ไคลเอนต์ที่ใช้ Windows XP หรืออื่น ๆ ที่ไม่รองรับ TLS SNI คุณจำเป็นต้องรองรับ Windows XP?)
Shane Madden

คำตอบ:


87

เกือบจะมี!

เพิ่มสิ่งนี้ใน ports.conf หรือ http.conf และกำหนดค่าไว้ด้านบน

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.

    # !important below!
    NameVirtualHost *:443 
    Listen 443
</IfModule>

ความคิดเห็น "#! สำคัญ! จำเป็นต้องถูกลบออกหรือย้ายไปที่บรรทัดอื่นมิฉะนั้นขอบคุณมากสำหรับการตีความข้อความแสดงข้อผิดพลาดที่ไม่ถูกต้องนี้ให้ฉัน
flickerfly

3
สิ่งนี้ไม่สามารถใช้งานได้ใน Apache 2.4.7
malhal

ขอขอบคุณ. ฉันพบว่าฉันจำเป็นต้องแสดงความคิดเห็นออก Listen 443 เพราะนั่นก็ถูกใช้ใน confd / website.conf configs ของฉันด้วยตัวเอง
dlink

3

มันช่วยให้ฉันดำเนินการ "/ usr / sbin / apachectl -S" ด้วย การออกจากคำสั่งนี้แสดงไฟล์ "ssl.conf" สองไฟล์บนพา ธ เดียวกัน ย้ายหรือลบไฟล์ผู้กระทำผิดและทุกอย่างจะทำงานได้ตามปกติ


1

คุณสามารถเพิ่มสิ่งนี้ไปยังการตั้งค่า Apache ของคุณได้ที่/etc/apache2/ports.conf:

<IfModule mod_ssl.c>                
    Listen 443                      
    <IfModule !mod_authz_core.c>    
        # Apache 2.2                
        NameVirtualHost *:443       
    </IfModule>                     
</IfModule>                         

(ใช้งานได้ทั้ง: apache 2.2 และ 2.4)

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