Como posso dizer ao nginx para servir SSL apenas para um domínio?

3

Sim, isso é uma duplicata para esta questão , no entanto, de acordo com o documento ngnx" Configurando servidores HTTPS "(a seção" Single HTTPS Server "), esta limitação não existe mais, e a resposta para essa pergunta não é mais válida.

Do link acima:

Prior to 0.7.14 SSL could not be enabled selectively for individual listening sockets, as shown above. SSL could only be enabled for the entire server using the ssl directive, making it impossible to set up a single HTTP/HTTPS server. The ssl parameter of the listen directive was added to solve this issue. The use of the ssl directive in modern versions is thus discouraged.

No entanto, com o bloco do servidor configurado conforme prescrito nesse documento:

server {
        listen *:80;
        listen 443 ssl;

        server_name  example.com *.example.com;
[...]

... O nginx ainda servirá conteúdo de example.com quando um pedido de https://example.net for feito.

Entendo que o SSL é exibido antes da solicitação HTTP, mas deve haver alguma maneira de impedir que o servidor responda a solicitações SSL que não tenham um certificado SSL válido associado a elas.

Qualquer informação sobre isso é muito apreciada.

    
por rm-vanda 18.06.2014 / 18:55

3 respostas

4

there has to be some way to prevent the server from responding to SSL requests that do not have a valid SSL associated with them

Bem, tipo. Como você tem vários sites em execução no mesmo IP, um usuário que tente estabelecer uma conexão SSL com esse IP para qualquer um dos sites sempre estabelecerá sua conexão SSL (e possivelmente obterá um erro de certificado se estiver apontando para um nome de host que não é coberto pelo certificado).

Tudo o que você pode fazer para evitar isso é não ter SSL escutando esse IP (executando seu material SSL em endereços diferentes).

Se você está bem com eles recebendo uma conexão SSL com esse erro potencial, então você tem opções depois; em vez de obter o conteúdo do server ativado para SSL, você poderia ter um padrão deles recebendo um erro 403 ou um redirecionamento para o ouvinte http para o nome do host para o qual enviaram a solicitação - uma dessas opções faria sentido para seu sistema?

    
por 18.06.2014 / 19:08
1

se não houver nenhum ssl para esse domínio, você receberá o erro ssl do navegador e a conexão fechada ...
Código de erro: ERR_SPDY_PROTOCOL_ERROR

    server {
        listen 80;
        return 444;
    }

    server {
        listen 443;
        ssl_certificate     /etc/ssl/my.crt;
        ssl_certificate_key /etc/ssl/my.key;
        return 444;
    }

## no SSL domain
server {
        listen 80;
        server_name  domain.com *.domain.com;
}

## SSL domain
    server {
            listen 80;
            listen 443 spdy ssl;
            server_name  SSLdomain.com *.SSLdomain.com;

    }
    
por 18.06.2014 / 19:43
-2

Vamos redirecionar todos os outros domínios para uma pasta, nessa pasta, criar arquivo de índice com meta robot é noindex

server {
    listen   443;
    server_name yourdomainusessl.com;
    ssl on; 
    ssl_certificate      /etc/nginx/conf.d/ssl/....crt;
    ssl_certificate_key  /etc/nginx/conf.d/ssl/....key;
    ssl_trusted_certificate  /etc/nginx/conf.d/ssl/....crt; 
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;
    if ($host = 'yourdomainusessl.com' ) {
         return 301 https://www.yourdomainusessl.com$request_uri;
    }
    if ($host !~* 'yourdomainusessl.com' ) {
         return 301 http://somewhereyouwant.com;
    }
}
    
por 11.12.2017 / 03:08