Situs SSL tidak menggunakan IP yang benar di Apache dan Ubuntu

10

Saya mencoba membuat server web apache-ubuntu-php. Server web saya akan meng-host beberapa situs SSL, setiap situs SSL akan memiliki alamat IP sendiri (kecuali ada cara yang lebih baik untuk melakukan ini).

Jadi saya kira langkah pertama adalah membuat apache mengenali setidaknya dua alamat IP yang berbeda. Saat ini, saya memiliki versi situs web SSL dan non-SSL yang http://mysite.com dan https://mysite.com . Meskipun keduanya sedang berjalan di server saya, saya tidak bisa mendapatkan keduanya untuk menggunakan alamat IP yang berbeda. Saat ini, keduanya menggunakan IP 1.1.1.1. Saya membeli alamat IP kedua 2.2.2.2 tetapi https://mysite.com tidak akan menerimanya dan firefox mengeluh dengan kesalahan "ssl_error_rx_record_too_long". Berikut ini adalah 2 file vhost saya

/ etc / apache2 / situs-enabled / 000-default

#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 [email protected]
     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 [email protected]
     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>

Di mysite.com, jika saya mengganti <VirtualHost *: 443> dengan <VirtualHost 2.2.2.2:443>, Firefox mengeluh dengan kesalahan "ssl_error_rx_record_too_long".

Jadi ketika saya mencoba membuat dan mengaktifkan /etc/apache2/site-enabled/mysite2.com dengan sertifikat SSL lain pada alamat IP ketiga, Apache mengeluh tentang masalah "tumpang tindih".

Dapatkah seseorang memberi tahu saya cara membangun server saya sehingga saya dapat meng-host beberapa situs web SSL pada domain yang berbeda? Saya ingin sertifikat SSL berfungsi untuk IE 7+, FF, dan Safari pada OS populer seperti WinXP, Vista, Win7 dan OSX.

John
sumber

Jawaban:

7

Saya telah mengaktifkan ini di server saya dengan menyesuaikan file /etc/apache2/ports.conf sebagai berikut:

<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>

Anda kemudian dapat menggunakan dengan mengedit /etc/apache2/sites-enabled/mysite.com (beberapa kode dihilangkan untuk mempersingkat contoh):

<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>

Untuk vhost sebanyak yang Anda suka.

Sunting: MEMBUTUHKAN PENDAPAT DUA? PERGI DI SINI: http://forum.slicehost.com/comments.php?DiscussionID=3244

Patrick R
sumber
oh, berhasil ... dan masing-masing situs web menggunakan alamat IP 1.1.1.1 yang sama. Jadi apakah ini berarti saya tidak memerlukan alamat IP 2.2.2.2 lagi? Saya tidak memerlukan IP unik untuk setiap domain SSL?
John
Anda tidak diharuskan untuk menggunakan IP unik untuk setiap domain SSL.
Patrick R
Tolong jelaskan mengapa Anda tidak memerlukan IP terpisah untuk setiap domain. Ini bertentangan dengan semua yang saya mengerti tentang SSL ...
Josh
Saya tidak yakin harus berkata apa selain itu saya telah menggunakan beberapa sertifikat wildcard pada server dengan satu IP. Selama CommonName cocok dengan ServerName Anda akan baik-baik saja. Sekarang jika Anda berada di lingkungan hosting bersama maka ini memungkinkan orang lain untuk menggunakan sertifikat Anda. Jika itu berhasil untuk johnlai2004 dan saya ... yah, apa masalahnya?
Patrick R
voretaq7 menjelaskan alasannya pada serverfault.com/questions/109800/… - Ini adalah TSL, bukan SSL. SSL memang membutuhkan hubungan 1: 1 antara alamat IP dan sertifikat. TLS tidak. Saya hanya tidak sadar TLS dapat digunakan untuk HTTPS (belum)
Josh
0

Saya tidak dapat memeriksa saat ini, jadi ini hanya tebakan liar: File-file tersebut biasanya dibaca dalam urutan abjad. Anda mungkin lebih beruntung ketika Anda membacanya dengan urutan terbalik, mis. Ganti nama 000-default menjadi 500-default dan gunakan 400-myhost. Saya tidak ingat di mana apache suka memiliki host default - pertama atau terakhir. Tapi dari apa yang Anda katakan (tumpang tindih), itu mungkin yang terakhir

Olaf
sumber
Anda dapat melihat apa yang akan digunakan dengan apachectl -t -D DUMP_VHOSTS. Perintahnya adalah yang pertama sampai yang terakhir.
Richard Garts