2017-12-20 177 views
9

Tôi đang kéo tóc ra khỏi đây. Các trang web như wix.com, squarespace.com ... v.v. có thể tạo trang web nhanh chóng và vẫn sử dụng SSL trên mỗi một trong số hàng triệu tên miền tùy chỉnh.Chứng chỉ SNI động

Tôi cố gắng làm điều tương tự, nhưng tôi không thể tìm ra cách họ làm điều đó!?

Các giải pháp hợp lý sẽ là trên 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> 

Nhưng khi tôi khởi động lại apache tôi nhận được một lỗi: SSLCertificateFile: file '/etc/apache2/ssl/%0/server.crt' không tồn tại hoặc trống rỗng

Ngay cả khi tôi tạo thư mục giả/ssl /% 0/với một số chứng chỉ giả ... nó vẫn sử dụng chứng chỉ giả (sai).

Tôi biết một số sẽ nhận được trên con ngựa cao của họ và hét lên rằng bạn không thể giải quyết tên máy chủ TRƯỚC KHI bắt tay TLS. Nhưng theo điều này post và những người khác:% 0 có thể được giải quyết với mod_vhost_alias vì tên máy chủ được gửi với SNI ...

Tôi biết điều này hoạt động: cách tiếp cận thứ hai là tạo một máy chủ ảo cho mỗi miền tùy chỉnh :

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

tôi có thể tạo ra một hệ thống bẩn nơi tôi thêm một máy chủ ảo cho mỗi tên miền mới và tải lại apache mỗi ngày Eeewwww ... và một lần nữa: Apache cap số lượng host ảo để 256:/

Làm cách nào để thực hiện điều đó !? Có công nghệ nào khác có thể giúp tôi không? Nginx, Nodejs? Cảm ơn bạn đã dành thời gian.

+0

Tại sao bạn cho rằng điều này cần phải là một phần của cấu hình máy chủ tĩnh? Bạn có thể tạo cấu hình khớp với ký tự đại diện và sau đó sử dụng ví dụ HTTP_HOST trong ứng dụng của bạn để quyết định loại tài nguyên nào cần phân phát. Ngoài ra, điều gì khiến bạn nghĩ rằng họ sử dụng chứng chỉ khác cho mỗi trang web thay vì chỉ là một chứng chỉ ký tự đại diện? –

+0

Cảm ơn bạn đã trả lời nhanh chóng @SteffenUllrich. Bạn có thể mở rộng ý tưởng của bạn được không? Tôi không hiểu. HTTPS cần phải được giải quyết trước khi ứng dụng truy cập, vì vậy điều bạn có ý nghĩa là: "Bạn có thể tạo cấu hình khớp với ký tự đại diện và sau đó sử dụng HTTP_HOST ví dụ trong ứng dụng của bạn"? Ngoài ra, tôi có thể thực hiện: site111.mysite.com không có vấn đề gì, nhưng tôi cố gắng làm site111.com, site222.com hoạt động. Có lẽ chúng ta nói chuyện với nhau :) –

+0

Nó chỉ hoạt động khi bạn có thể sử dụng chứng chỉ ký tự đại diện, tức là \ *. Mysite.com có ​​thể nhưng \ *. Com thì không. Nhưng đó cũng không phải là những gì các trang web khác cung cấp, phải không? –

Trả lời

0

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

Để tạo trang web SSL ngay lập tức, họ sử dụng cơ quan cấp chứng chỉ Letsencrypt như bạn có thể tự kiểm tra (ví dụ: CN = www.thefoodmarketchiswick.com). Nhưng đối với các trang web được lưu trữ dưới tên .wix.com, chúng chỉ sử dụng chứng chỉ ký tự đại diện (CN = * .wix.com). Đến lúc đó, dễ dàng.

Câu hỏi thứ hai, như bạn đã đề cập Apache không thể xử lý lưu trữ khổng lồ này (và không ai tin rằng bạn có thể lưu trữ hàng triệu ứng dụng trên một máy chủ đơn lẻ). Có một cái nhìn về điều này Netcraft Survey mà cung cấp cho một số manh mối. Tôi không thể trả lời cho họ, nhưng chạy một s_client openssl kết thúc do lỗi, có nghĩa là họ không làm những việc rất phù hợp.

1

TL; DR: họ sử dụng chứng chỉ ký tự đại diện. Vì vậy, vấn đề được giải quyết @ cấp giấy chứng nhận và ở cấp cấu hình máy chủ, không chỉ ở mức cấu hình máy chủ như bạn đang cố gắng làm.

Vài điểm:

  • The logical solution - hầu như không làm tôi thấy bất cứ điều gì "logic" Khoa học Máy tính hoặc Công nghệ phần mềm. Đó là kỹ thuật, không phải toán học, bạn phải LÀM công cụ, chứ không phải THINK. Vì vậy tri thức trở nên quan trọng hơn trí thông minh trong nhiều trường hợp (không phải tất cả).

  • Bạn có một điểm chính xác về SNI - nó là sự đẩy lùi về chủ nghĩa bí ẩn nhận dạng máy chủ lưu trữ cho lớp TCP/SSL (trước HTTP nơi các tiêu đề HTTP có sẵn).

  • virtualhost for every custom domain - Tùy thuộc vào quy mô chúng tôi đang nói đến, nó có thể hoạt động. Tuy nhiên, nếu bạn tích hợp máy khách với 200, 1000, 5000 - tên miền phụ. Vậy thì sao?

  • How do they do it - Để tôi cung cấp các ví dụ: proxy HTTP như cloudflare tạo chứng chỉ miễn phí cho bạn, bạn phải thêm vào máy chủ (PROXY-> ORIGIN ecryption) và END_USER -> CLOUDFLARE được mã hóa bằng ký tự đại diện chứng chỉ. Đây là những tên DNS của giấy chứng nhận ký tự đại diện họ cấp cho tôi:

viết tắt:

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 
  • Làm thế nào để cấu hình của máy chủ nhìn như vậy? Nó thực sự là một máy chủ trang trại, dưới một loadbalancer, w/tài nguyên được chia sẻ (tài nguyên tĩnh trên máy điều chỉnh riêng biệt w/cache). Có nhiều máy chủ ảo/tên miền/bí danh máy chủ lưu trữ trên mỗi máy chủ, nhưng chỉ có 1 tệp SSL cho nhiều người trong số họ (hoặc tất cả, tùy thuộc vào quy mô). Các miền có thể có cấu hình chuyên dụng, chúng có thể được nhóm lại với nhau nếu cấu hình của chúng giống hệt nhau.

  • Về đề xuất máy chủ web - trừ khi có lý do chính đáng để sử dụng APACHE, tôi sẽ không sử dụng nó. Có một lý do tại sao nginx là đạt được lực kéo và phổ biến.

Các vấn đề liên quan