ไซต์ SSL ไม่ได้ใช้ IP ที่ถูกต้องใน Apache และ Ubuntu


10

ฉันพยายามตั้งค่าเว็บเซิร์ฟเวอร์ apache-ubuntu-php เว็บเซิร์ฟเวอร์ของฉันจะโฮสต์เว็บไซต์ SSL หลายแห่งแต่ละไซต์ SSL จะมีที่อยู่ IP ของตัวเอง (เว้นแต่จะมีวิธีที่ดีกว่าในการทำเช่นนี้)

ดังนั้นฉันคิดว่าขั้นตอนแรกคือการรับ apache ที่จะรับรู้อย่างน้อยสองที่อยู่ IP ที่แตกต่างกัน ตอนนี้ผมมี SSL และไม่ใช่ SSL รุ่นของเว็บไซต์ที่เป็นhttp://mysite.comและhttps://mysite.com แม้ว่าทั้งสองกำลังทำงานบนเซิร์ฟเวอร์ของฉัน แต่ฉันไม่สามารถใช้ทั้งสองที่อยู่ IP ที่แตกต่างกัน ตอนนี้ทั้งคู่กำลังใช้ IP 1.1.1.1 ฉันซื้อที่อยู่ IP ที่สอง 2.2.2.2 แต่https://mysite.comจะไม่ยอมรับและ firefox จะบ่นกับข้อผิดพลาด "ssl_error_rx_record_too_long" นี่คือการดูไฟล์ 2 vhost ของฉัน

/ etc / apache2 / เว็บไซต์ที่เปิดใช้งาน / 000 เริ่มต้น

#NameVirtualHost 1.1.1.1:80

#<VirtualHost 1.1.1.1:80>
<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

/etc/apache2/site-enabled/mysite.com

<VirtualHost 1.1.1.1:80>
     ServerAdmin john@mysite.com
     ServerName mysite.com
     ServerAlias www.mysite.com
     DocumentRoot /srv/www/mysite.com/public_html/
     ErrorLog /srv/www/mysite.com/logs/error.log
     CustomLog /srv/www/mysite.com/logs/access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
#<VirtualHost 2.2.2.2:443>
<VirtualHost *:443>
     ServerAdmin john@mysite.com
     ServerName mysite.com
     ServerAlias www.mysite.com
     DocumentRoot /srv/www/mysite.com/public_html/
     ErrorLog /srv/www/mysite.com/logs/error.log
     CustomLog /srv/www/mysite.com/logs/access.log combined

        SSLEngine on

        SSLCertificateFile    /etc/ssl/localcerts/www.mysite.com.crt
        SSLCertificateKeyFile /etc/ssl/localcerts/www.mysite.com.pem

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

        BrowserMatch ".*MSIE.*" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0

</VirtualHost>
</IfModule>

ใน mysite.com ถ้าฉันแทนที่ <VirtualHost *: 443> ด้วย <VirtualHost 2.2.2.2:443> Firefox จะบ่นว่ามีข้อผิดพลาด "ssl_error_rx_record_too_long"

ดังนั้นเมื่อฉันพยายามสร้างและเปิดใช้งาน /etc/apache2/site-enabled/mysite2.com ด้วยใบรับรอง SSL อีกรายการในที่อยู่ IP ที่สาม Apache จะบ่นเกี่ยวกับปัญหา "ทับซ้อน"

มีคนบอกฉันถึงวิธีการติดตั้งเซิร์ฟเวอร์ของฉันเพื่อให้ฉันสามารถโฮสต์เว็บไซต์ SSL หลายแห่งในโดเมนที่แตกต่างกันได้หรือไม่ ฉันต้องการใบรับรอง SSL สำหรับ IE 7+, FF และ Safari บนระบบปฏิบัติการยอดนิยมเช่น WinXP, Vista, Win7 และ OSX

คำตอบ:


7

ฉันได้ตั้งค่านี้บนเซิร์ฟเวอร์ของฉันโดยปรับไฟล์ /etc/apache2/ports.conf ดังนี้:

<IfModule mod_ssl.c>
NameVirtualHost *:443
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    NameVirtualHost *:443
    Listen 443
</IfModule>

จากนั้นคุณควรจะสามารถใช้งานได้โดยการแก้ไข /etc/apache2/sites-enabled/mysite.com (บางรหัสจะตัดทอนตัวอย่าง)

<VirtualHost *:443>
     ServerName mysite1.com
     SSLCertificateFile    /etc/ssl/localcerts/www.mysite1.com.crt
     SSLCertificateKeyFile /etc/ssl/localcerts/www.mysite1.com.pem
</VirtualHost>

<VirtualHost *:443>
    ServerName mysite2.com
    SSLCertificateFile    /etc/ssl/localcerts/www.mysite2.com.crt
    SSLCertificateKeyFile /etc/ssl/localcerts/www.mysite2.com.pem
</VirtualHost>

สำหรับ vhosts มากเท่าที่คุณต้องการ

แก้ไข: ต้องการความคิดเห็นที่สองใช่ไหม ไปที่นี่: http://forum.slicehost.com/comments.php?DiscussionID=3244


โอ้มันใช้งานได้ ... และแต่ละเว็บไซต์ใช้ที่อยู่ IP เดียวกัน 1.1.1.1 ดังนั้นนี่หมายความว่าฉันไม่ต้องการที่อยู่ IP 2.2.2.2 อีกต่อไปหรือไม่ ฉันไม่ต้องการ IP เฉพาะสำหรับแต่ละโดเมน SSL หรือไม่
John

คุณไม่จำเป็นต้องใช้ IP เฉพาะสำหรับแต่ละโดเมน SSL
Patrick R

โปรดอธิบายว่าทำไมคุณไม่ต้องการ IP แยกต่างหากสำหรับแต่ละโดเมน นี้ไปกับทุกอย่างที่ฉันเข้าใจเกี่ยวกับ SSL ...
จอช

ฉันไม่แน่ใจว่าจะพูดอะไรนอกเหนือจากที่ฉันใช้ wildcard หลาย certs บนเซิร์ฟเวอร์ด้วย IP เดียว ตราบใดที่ CommonName ตรงกับ ServerName คุณก็จะสบายดี ตอนนี้ถ้าคุณอยู่ในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกันนี่อาจอนุญาตให้ผู้อื่นใช้ใบรับรองของคุณ ถ้ามันใช้กับ johnlai2004 และฉัน ... งั้นก็มีปัญหาอะไร?
Patrick R

voretaq7 อธิบายเหตุผลในserverfault.com/questions/109800/… - นี่คือ TSL ไม่ใช่ SSL SSL ต้องการความสัมพันธ์แบบ 1: 1 ระหว่างที่อยู่ IP และใบรับรอง TLS ไม่ได้ ฉันไม่ทราบว่า TLS สามารถใช้กับ HTTPS (ยัง)
Josh

0

ฉันไม่สามารถตรวจสอบได้ในขณะนี้ดังนั้นนี่เป็นเพียงการคาดเดา: โดยปกติไฟล์จะอ่านตามลำดับตัวอักษร คุณอาจมีโชคมากขึ้นเมื่อคุณอ่านในลำดับย้อนกลับเช่นเปลี่ยนชื่อ 000- ค่าเริ่มต้นเป็น 500- เริ่มต้นและใช้ 400-myhost ฉันจำไม่ได้ว่า apache ชอบที่จะมีโฮสต์เริ่มต้น - ที่หนึ่งหรือที่สุดท้าย แต่จากสิ่งที่คุณพูด (ทับซ้อน) มันอาจเป็นครั้งสุดท้าย


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