Dois domínios, dois certificados SSL, um IP

6

Estou tentando executar dois domínios, um com um certificado curinga e outro com um certificado regular de um IP e um nginx.

Configuração: example1.com com certificado curinga example2.com com certificado regular

Minha configuração atual do nginx para minha configuração de curinga se parece com essa (ainda não comecei a adicionar o segundo domínio):

/etc/nginx/sites-available/example1.com:

server {
    listen  443 default_server ssl;
    server_name         _;

    ssl_certificate     /etc/nginx/ssl/example1.com/example1.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example1.com/example1.com.key;

    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  10m;

    # Perfect Forward Security
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4";
}

server {
    listen      443;
    server_name example1.com;

    error_log   /var/log/nginx/example1.com.error.ssl.log;
    access_log  /var/log/nginx/example1.com.access.ssl.log;

    root /var/www/example1.com/;
    index index.html;
}

server {
    listen      80;
    server_name example1.com;
    rewrite     ^   https://$server_name$request_uri? permanent;
}

Agora também tenho alguns subdomínios, por isso estou usando um certificado curinga. As configurações do subdomínio são assim:

/etc/nginx/sites-available/sub1.example1.com

server {
    listen      443;
    server_name sub1.example1.com;

    error_log   /var/log/nginx/sub1.example1.com.error.ssl.log;
    access_log  /var/log/nginx/sub1.example1.com.access.ssl.log;

    root /var/www/sub1.example1.com/;

    location / {
        # nothing
    }
}

server {
    listen      80;
    server_name sub1.example1.com;
    rewrite     ^   https://$server_name$request_uri? permanent;
}

Esta configuração é bastante interessante porque todos os subdomínios estão herdando as configurações ssl do example.com config, porque é o default_server .

Qual é a melhor maneira de adicionar um segundo domínio agora? Se eu adicionar o domínio da mesma maneira, obtenho obviamente um erro na inicialização porque há uma entrada default_server duplicada. Se eu remover a entrada default_server da configuração de example2.com , ela retornará para a configuração ssl de example1.com .

O que eu quero, mas não sei como alcançar:

Tenha uma configuração "principal" para cada domínio, vamos chamá-lo de example1.com-default e example2.com-default .

Essas configurações devem incluir todas as configurações comuns entre os diferentes subdomínios, como a configuração SSL, Perfect Forward Security, ... e os diferentes subdomínios seriam apenas configurações menores que herdarão essas configurações de seus respectivos domínios principais. / p>

Portanto, sub1.example1.com herdaria as configurações de SSL de example1.com-default e sub1.example2.com herdaria as configurações de SSL de example2.com-default .

Isso é possível, e se é assim que eu conseguiria isso?

Obrigado antecipadamente!

    
por mediocre 14.06.2014 / 21:54

2 respostas

4

Se você estiver se referindo a outras configurações SSL do que certificado / chave, aconselho-o a mover sua configuração para o nível http na configuração nginx.

Desta forma, as configurações serão herdadas para todos os blocos server .

Por exemplo, no Debian e em derivativos você pode criar /etc/nginx/conf.d/ssl.conf file, onde você coloca estas linhas:

ssl_session_cache    shared:SSL:10m;
ssl_session_timeout  10m;

# Perfect Forward Security
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4";

Os arquivos dentro de conf.d estão incluídos no nível http .

A abordagem

default_server não funciona aqui.

Depois disso, os blocos server ficariam assim:

server {
    listen 443 default_server ssl;
    server_name _;

    ssl_certificate /path/to/certificate;
    ssl_certificate_key /path/to/key;
}

E, se você quiser substituir algumas configurações de alguns domínios, poderá redigitar as diretivas no nível server .

    
por 15.06.2014 / 03:45
-1

Isso é causado pelo comportamento do protocolo SSL. A conexão SSL é estabelecida antes do navegador enviar uma solicitação HTTP e o nginx não sabe o nome do servidor solicitado. Portanto, ele pode oferecer apenas o certificado do servidor padrão.

Você pode ler este artigo, no final você tem várias opções, usando múltiplos domínios em um servidor, muitos IPs como Certificados ou SNI (Server_Name_Indication):

Configurando servidores HTTP, NGINX DOC

    
por 06.12.2016 / 15:14