2017-12-20 227 views
9

Wyciągam tu moje włosy. Strony internetowe takie jak wix.com, squarespace.com ... itp .; potrafi generować strony internetowe w locie i nadal używać SSL w każdej z milionów niestandardowych domen.Certyfikat dynamiczny SNI

Próbuję zrobić to samo, , ale nie mogę wymyślić, jak to robią!?

Logicznym rozwiązaniem byłoby na Apache:

<IfModule mod_ssl.c> 
      <VirtualHost *:443> 
        ServerAlias * 
        UseCanonicalName Off 

        DocumentRoot /var/www/html 

        SSLEngine on 
        SSLCertificateFile /etc/apache2/ssl/%0/server.crt 
        SSLCertificateKeyFile /etc/apache2/ssl/%0/server.key 
      </VirtualHost></IfModule> 

Ale kiedy restart apache pojawia się błąd: SSLCertificateFile: file '/etc/apache2/ssl/%0/server.crt' nie istnieje lub jest pusty

Nawet gdy utworzę fikcyjny folder/ssl /% 0/z niektórymi fałszywymi certyfikatami ... nadal używałem (niewłaściwych) atrapowych certyfikatów.

Wiem, że niektórzy dostaną na swoich wysokich koniach i krzyczą, że nie można rozwiązać nazwy serwera PRZED uzgadnianiem TLS. Ale według tego post i innych z nich:% 0 można rozwiązać mod_vhost_alias ponieważ nazwa serwera jest wysyłany z SNI ...

wiem, że to działa: drugie podejście byłoby utworzyć VirtualHost dla każdej domeny niestandardowej :

<VirtualHost *:443> 
        ServerName site111.ca 
        ServerAlias www.site111.ca 

        DocumentRoot /var/www/html 

        SSLEngine on 
        SSLCertificateFile "/var/app/s3/ssl/site111.ca/certificate.crt" 
        SSLCertificateKeyFile "/var/app/s3/ssl/site111.ca/certificate.key" 
        SSLCertificateChainFile "/var/app/s3/ssl/site111.ca/certificate.chain" 
      </VirtualHost><VirtualHost *:443> 
    ServerName site222.ca 
     ServerAlias www.site222.ca 
    DocumentRoot /var/www/html 

     SSLEngine on 
     SSLCertificateFile "/var/app/s3/ssl/site222.ca/certificate.crt" 
     SSLCertificateKeyFile "/var/app/s3/ssl/site222.ca/certificate.key" 
     SSLCertificateChainFile "/var/app/s3/ssl/site222.ca/certificate.chain" 

mógłbym stworzyć brudną system, w którym mogę dodać jeden wirtualny gospodarza na nową domenę i przeładować apache codziennie Eeewwww ... i znowu: Apache cap liczbę wirtualnych hostów do 256:/

Jak oni to robią !? Czy istnieje inna technologia, która może mi pomóc? Nginx, Nodejs? Dziękuję za poświęcony czas.

+0

Dlaczego uważasz, że to musi być częścią statycznej konfiguracji serwera? Możesz utworzyć konfigurację, która pasuje do symbolu wieloznacznego, a następnie użyć na przykład aplikacji HTTP_HOST w aplikacji, aby zdecydować, jakiego rodzaju zasoby mają być wyświetlane. Co sprawia, że ​​myślisz, że używają innego certyfikatu dla każdej witryny zamiast tylko certyfikatu z symbolem wieloznacznym? –

+0

Dziękujemy za szybką odpowiedź @SteffenUllrich. Czy możesz rozwinąć swój pomysł? Nie rozumiem. Protokół HTTPS musi zostać rozwiązany przed uzyskaniem do niego dostępu przez aplikację, więc co masz na myśli: "Możesz utworzyć konfigurację pasującą do symbolu wieloznacznego, a następnie użyć na przykład aplikacji HTTP_HOST w aplikacji"? Ponadto mogę zrobić: site111.mysite.com działa bez problemu, ale staram się, aby witryna site111.com, site222.com działała. Może rozmawiamy o sobie nawzajem :) –

+0

Działa tylko wtedy, gdy można użyć certyfikatu wieloznacznego, tj. \ *. Mysite.com jest możliwy, ale \ *. Com nie. Ale to też nie jest to, co oferuje druga strona, prawda? –

Odpowiedz

0

I try to do the same thing, but I can't figure out how they do it!?

Aby wygenerować internetowe SSL w locie, używają Letsencrypt urzędu certyfikacji, jak można sprawdzić samemu (przykład: CN = www.thefoodmarketchiswick.com). Ale w przypadku witryn hostowanych pod nazwami .wix.com używają tylko certyfikatu wieloznacznego (CN = * .wix.com). Do tego czasu łatwe.

Drugie pytanie, o którym wspomniałeś, że Apache nie był w stanie obsłużyć tego ogromnego hostingu (i nikt nie wierzy, że możesz obsługiwać miliony aplikacji na jednym serwerze). Spójrz na to Netcraft Survey, które daje pewne wskazówki. Nie mogę na nie odpowiedzieć, ale uruchamianie openssl s_client kończy się błędem, co oznacza, że ​​nie robią bardzo zgodnych rzeczy.

1

TL; DR: używają symboli wieloznacznych. Tak więc problem rozwiązany jest na poziomie certyfikatu i na poziomie konfiguracji serwera, nie tylko na poziomie konfiguracji serwera, tak jak próbujesz to zrobić.

Kilka punktów:

  • The logical solution - prawie nie widzę nic "logiczny" informatyki i inżynierii oprogramowania. To inżynieria, nie matematyka, musisz robić rzeczy, a nie wymyślać rzeczy. W wielu przypadkach wiedza staje się ważniejsza niż inteligencja (nie wszystkie).

  • Masz właściwy punkt na temat SNI - jest to push meachanizmu identyfikacji hosta do warstwy TCP/SSL (przed HTTP, gdzie nagłówki HTTP stają się dostępne).

  • virtualhost for every custom domain - W zależności od skali, o której mówimy, może działać. Jeśli jednak masz na pokładzie klienta z 200, 1000, 5000 - subdomen. Co wtedy?

  • How do they do it - Niech mi tylko podać przykłady: HTTP proxy jak CloudFlare generuje darmowy certyfikat dla was, że trzeba dodać na swoim serwerze (Prokurent> ecryption pochodzenia) i END_USER -> Połączenie CloudFlare są szyfrowane przy użyciu symboli wieloznacznych certyfikat. Są to nazwy DNS certyfikatu wieloznacznego wydane dla mnie:

skrócie

DNS Name=sni178747.cloudflaressl.com 
DNS Name=*.9992924.com 
DNS Name=*.apum.de 
DNS Name=*.arbomedia.net 
DNS Name=*.australiacasinobonus.net 
DNS Name=*.auto-lpg.de 
DNS Name=*.autoprof.de 
DNS Name=*.circuitodesafio.com.br 
DNS Name=*.data--center.info 
DNS Name=*.devclub.com 
DNS Name=*.eissportanlagen.de 
DNS Name=*.entrepreneur-hebdo.fr 
DNS Name=*.environmentalbrasil.com.br 
DNS Name=*.gofitnessplan.fr 
DNS Name=*.golfinterieur.info 
DNS Name=*.greenbuch.cf 
DNS Name=*.mindaugas.cf 
DNS Name=*.mp3fdm.trade 
DNS Name=*.mp3freedom.info 
DNS Name=*.mp3star.cricket 
DNS Name=environmentalbrasil.com.br 
DNS Name=gofitnessplan.fr 
DNS Name=golfinterieur.info 
DNS Name=greenbuch.cf 
DNS Name=mindaugas.cf 
DNS Name=mp3fdm.trade 
DNS Name=mp3freedom.info 
DNS Name=mp3star.cricket 
DNS Name=preussische-geschichte.de 
  • Jak wygląda konfiguracja takiego spojrzenia serwera? To jest naprawdę farma serwerów, pod obciążeniem, zasoby w/shared (zasoby statyczne na osobno dostrojone maszyny w/cache). Na każdym serwerze istnieje wiele wirtualnych hostów/domen/aliasów hosta, ale tylko jeden plik SSL dla wielu z nich (lub wszystkich, w zależności od skali). Domeny mogą mieć dedykowane konfiguracje, mogą być grupowane razem, jeśli ich konfiguracje są identyczne.

  • Odnośnie zaleceń serwera sieciowego - chyba że istnieje dobry powód do używania APACHE, nie użyłbym go. Jest powód, dla którego nginx zyskuje trakcję i popularność.