web-dev-qa-db-fra.com

Configurer NGINX + CloudFlare + SSL

DONC...

J'ai une application de noeud en cours d'exécution sur un serveur sur le port 8080 et j'essaie de l'activer pour qu'elle fonctionne via SSL à l'aide de NGINX et CloudFlare. Notez ce qui suit ...

  1. Mon hôte exécute Ubuntu 16.04 LTS
  2. J'utilise actuellement le SSL universel de CloudFlare (niveau gratuit)
  3. J'ai ma configuration DNS hôte de test en tant que test.company.com
  4. J'ai copié le certificat d'extraction CloudFlare Origin de this post dans ma boîte de test/etc/nginx/certs

... ma configuration NGINX précédente ressemblait à ...

server {
    listen 80;

    location / {
        proxy_pass http://localhost:8080;
    }
}

... ça ressemble maintenant ...

# HTTP
server {
  listen 80;
  listen [::]:80 default_server ipv6only=on;
  return 301 https://$Host$request_uri;
}

# HTTPS
server {
  listen 443;
  server_name test.company.com;

  ssl on;
  ssl_client_certificate /etc/nginx/certs/cloudflare.crt;
  ssl_verify_client on;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  ssl_prefer_server_ciphers on;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://localhost:8080/;
    proxy_ssl_session_reuse off;
    proxy_set_header Host $http_Host;
    proxy_cache_bypass $http_upgrade;
    proxy_redirect off;
  }
}

... J'ai suivi l'exemple ici et le lien qu'il fournit ici et je suis sceptique que tout ce qui précède est requis (je suis minimaliste). Chaque fois que j'exécute Sudo nginx -t, Je reçois toujours des erreurs indiquant que ssl_certificate et ssl_certificate_key ne sont pas spécifiés. Je ne peux pas comprendre comment télécharger les fichiers requis depuis CloudFlare et d'après ce que je comprends, je ne pense pas que je devrais en avoir besoin.

Si j'essaie de réutiliser le certificat d'extraction CloudFlare Origin en tant que ssl_certificate et ssl_certificate_key, j'obtiens l'erreur nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/certs/cloudflare.crt") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: ANY PRIVATE KEY error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)

Je suis convaincu qu'il est possible de créer mon propre certificat auto-signé, mais je prévois d'utiliser cette stratégie à terme pour faire tourner des machines de production. Toute aide pour me diriger dans la bonne direction est très appréciée.

10
Lane

Il semble que vous utilisiez le service Origin CA de Cloudflare, Nice!

Le problème semble avoir mis votre clé privée SSL dans le ssl_client_certificate attribut et ne pas mettre votre vrai certificat SSL dans votre configuration. Votre configuration SSL Nginx doit contenir les lignes suivantes à la place:

ssl_certificate /path/to/your_certificate.pem; ssl_certificate_key /path/to/your_key.key;

Assurez-vous que le certificat SSL correspond au fichier .PEM avec le contenu correct et que le fichier de clé de certificat contient le fichier .KEY avec le contenu correct également.

Pour générer un certificat avec Origin CA, accédez à la section Crypto du tableau de bord Cloudfalre. De là, cliquez sur le bouton Créer un certificat dans la section Certificats d'origine. Une fois que vous avez terminé les étapes de l'assistant, vous verrez une fenêtre qui vous permet de télécharger à la fois le fichier de certificat et le fichier de clé. Assurez-vous de les placer dans les fichiers appropriés et de les installer sur votre serveur Web.

Cloudflare Origin CA Certificate and Key

Lectures complémentaires:

5
mjsa