Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
witam
w lokalizacji /var/www/lms mam content lms'a. chce do niego dostawac sie dwojako:
1. poprzez wpisanie lms.domena.pl
2. poprzez wpisanie lms
zrobiłem certyfikaty dla obu "domen" zeby przegladarki sie nie bulwersowały. ale mam pewien problem.
obie domeny porwadzą do tej samej lokalizacji i pod uwage brany jest plik certyfikatu z ostniego wpisu. czyli jesli vhsota lms mam jako drugiego, to jesli wpisze lms.domena.pl to pobierany jest certyfikat z domeny lms.
oto config.
lrwxrwxrwx 1 root root 26 09-28 10:28 000-default -> ../sites-available/default lrwxrwxrwx 1 root root 22 11-29 10:52 001-lmsssl -> ../sites-available/lms lrwxrwxrwx 1 root root 25 12-08 15:02 002-lms -> ../sites-available/loclms root@sqlDELL:/etc/apache2/sites-enabled# root@sqlDELL:/etc/apache2/sites-enabled# cat 001-lmsssl <IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin webmaster@domena.pl ServerName lms.domena.pl DocumentRoot /var/www/lms <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/lms/> 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 ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined SSLEngine on # SSLCertificateFile directive is needed. SSLCertificateFile /etc/apache2/ssl/lms.crt SSLCertificateKeyFile /etc/apache2/ssl/lms.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> </IfModule> root@sqlDELL:/etc/apache2/sites-enabled# cat 002-lms <IfModule mod_ssl.c> NameVirtualHost lms:443 <VirtualHost *:443> ServerAdmin webmaster@domena.pl ServerName lms DocumentRoot /var/www/lms <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/lms/> 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 ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined SSLEngine on # SSLCertificateFile directive is needed. SSLCertificateFile /etc/apache2/ssl/lms.crt SSLCertificateKeyFile /etc/apache2/ssl/lms.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> </IfModule>
jeśli w pliku 002-lms nie miałem wpisu NameVirutalHost to przy przeladowywaniu miałem warninga:
Restarting web server: apache2[Thu Dec 08 15:05:01 2011] [warn] _default_ VirtualHost overlap on port 443, the first has precedence ... waiting [Thu Dec 08 15:05:02 2011] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
po dodaniu warning zniknąl.
nazwy lms.domena.pl i lms wskazywane sa na adres tego hosta w /etc/hosts.
konfiguracje roznia sie domena i plikami certyfikatów.
jeśli w przeglądarce wpisze: lms.domena.pl to podawany jest mi certyfikat z domeny "lms".
po wpisaniu w przeglądarce "lms" certyfikat podawany jest prawidłowo.
znalazłem rozwiązanie w postaci SNI, ale to jakoś nie działa. system debian 6.0 http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
w którym miejscu robie błąd?
jak zrobić żeby mimo tej samej fizycznej lokalizacji vhosty podawały mi certyfikaty z konfiguracji?
Offline
O ile się nie mylę, Apache nie obrabia 2 certów ssl, przynajmniej u mnie nie chcialo to kiedyś ruszyć (osobne certy na 2 różnych vhostach).
Choć teoretycznie każdy vhost z innym certem, - powinno działać.
Rozwiązałem problem w ten sposób, że wsadzilem Nginxa jako rev-proxy, a w Nginxie można używać kilku certów bez problemu.
Wtedy Nginx szyfrował, a Apache serwował stronę bez szyfrowania po localhoście.
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2011-12-08 18:32:14)
Offline
Jacekalex napisał(-a):
Rozwiązałem problem w ten sposób, że wsadzilem Nginxa jako rev-proxy, a w Nginxie można używać kilku certów bez problemu.
Wtedy Nginx szyfrował, a Apache serwował stronę bez szyfrowania po localhoście.
Dzięki za podpowiedź, ale nie uważasz, że jest to nie zbyt dobre rozwiązanie?
Z tego co widzę, to w debianie 6.0 z paczek apache nie obsługuje sni i tu może być problem. trzeba przekompilować apache.
Offline
Dobre rozwiązanie, ze względu np na podatność Apache na Slowloris, na który Nginx jest całkowicie odporny.
Poza tym rev-proxy przed Apachem, to nie jest jakaś fanaberia, tylko niezły akcelerator Apacha, który ma tysiące modułów, ale niestety wydajnością nie grzeszy, w porównaniu z konkurencją.
Offline
Jacekalex napisał(-a):
Dobre rozwiązanie, ze względu np na podatność Apache na Slowloris, na który Nginx jest całkowicie odporny.
Poza tym rev-proxy przed Apachem, to nie jest jakaś fanaberia, tylko niezły akcelerator Apacha, który ma tysiące modułów, ale niestety wydajnością nie grzeszy, w porównaniu z konkurencją.
W sumie i racja. podrzucisz może jakiś przykladowy config?
Offline
Kawałek /home/Ubuntu/etc/nginx/sites-available/default
server { listen 449; ssl on; ssl_certificate /etc/ssl/apache.pem; ssl_certificate_key /etc/ssl/apache.pem; keepalive_timeout 70; location / { proxy_pass http://localhost:8019/; proxy_set_header X-Real-IP $remote_addr; } location /status { stub_status on; access_log off; allow 127.0.0.0/8; deny all; } } server { listen 451; ssl on; ssl_certificate /etc/ssl/server.pem; ssl_certificate_key /etc/ssl/server.pem; keepalive_timeout 70; location / { proxy_pass http://localhost:8299/; proxy_set_header X-Real-IP $remote_addr; } location /status { stub_status on; access_log off; allow 127.0.0.0/8; deny all; }
Coś takiego kiedyś testowałem, i działało (dawno to było - jeszcze na Ubuntu i Nginxie 0.7.x).
Mam też gdzieś na dysku i płytach lepsze konfigi, jak coś znajdę, to podeślę, (ale diabli wiedzą, gdzie się podziało) :xD
W każdym razie mniej więcej tak to ma być.
Nginx akceptuje osobny cert dla każdego serwera.
Przy Nginxie zawsze korzystam z oficjalnej dokumentacji.
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2011-12-08 22:46:07)
Offline
Dzięki, jutro potestuje
Offline
Apache standardowo obsługuje wiele certyfikatów SSL. Warunkiem koniecznym jest, że każdy VHost (na każdym jeden certyfikat) działa na unikalnym adresie IP lub porcie - w przeciwnym wypadku serwowany jest certyfikat z pierwszego wirtualnego hosta w konfiguracji. Działa to odkąd pamiętam i nigdy nie miałem z tym problemów. Schody zaczynają się gdy chcemy skonfigurować kilka VHostów z SSLem na tym samym adresie IP i/lub porcie - rozwiązaniem jest SNI.
Offline
Takie zachowanie jest logiczne. Założeniem ssl jest szyfrowanie całej komunikacji, czyli również pierwszego zapytania GET/POST. Dlatego też, wynegocjowanie certyfikatu przebiega jeszcze przed rozwiązaniem nazwy DNS na konkretny VirtualHost.
Offline
dzięki za odpowiedzi.
zrobiłem to na ngixie. działa. ale mam dziwny objaw. otóż jeśli używam domeny "lms" to wszytko w porządku, ale jak użyję domeny "lms.domena.pl" to w przeglądarce dodawany mam jeden slash i adres wygląda tak: "https://lms.domena.pl//?m=cos". czy to jest normalne zachowanie ngixa? nigdy wcześniej z niego nie korzystałem stąd też moje pytanie.
config mam identyczny jak wyżej, z tym ze dopisałem:
server_name lms;
oraz dla dla drugiej domenki:
server_name lms.domena.pl;
--edited--
to z dwoma slashami to wina firefoxa 8.0. firefox 8.0.1 rozwiązał sprawę
Ostatnio edytowany przez Nicram (2011-12-12 14:34:53)
Offline