Проблемы конфигурации: многодоменный автоматический SSL от LetsCncrypt с использованием OpenResty & lua -resty-auto-ssl - PullRequest
1 голос
/ 21 апреля 2020

Пожалуйста, извините за длинную запись - я был бы очень признателен за любую помощь в следующем отношении.

Я пытаюсь настроить мультитенантный поддомен + пользовательский домен с SSL с использованием LetsEncrypt:

(некоторые использовать поддомен, некоторые будут использовать собственный домен)

https://customer1.myapp.com
https://customer2.myapp.com
https://customer1.com (customer sets up A/CNAME recoreds at his DNS provider)

Я нахожусь на экземпляре EC2, использующем Ubuntu OS с именем пользователя 'ubuntu'.

Я узнал из следующих уроков:

https://sandeep.dev/how-we-generate-and-renew-ssl-certs-for-arbitrary-custom-domains-using-letsencrypt-cjtk0utui000c1cs1f7y9ua5n

https://www.digitalocean.com/community/tutorials/how-to-use-the-openresty-web-framework-for-nginx-on-ubuntu-16-04

https://sandro-keil.de/blog/openresty-nginx-with-auto-generated-ssl-certificate-from-lets-encrypt/

Я успешно сделано следующее:

  • Установлена ​​необходимая сборка на сервере
  • Установите OpenResty (поставляется с собственным Nginx & OpenSSL)
  • Установите LuaRocks
  • Установка lua -resty-auto-ssl
  • Создан каталог для resty auto ssl

    sudo mkdir /etc/resty-auto-ssl
    sudo chown -R ubuntu /etc/resty-auto-ssl
    sudo chown -R www-data /etc/resty-auto-ssl
    chmod -R 777 /etc/resty-auto-ssl/
    
  • Создан резервный самозаверяющий сертификат срок действия которого истекает через 3600 дней

Это мой стартовый файл конфигурации (/usr/local/openresty/nginx/conf/nginx.conf )

(я бы уточнил его, чтобы он соответствовал моим потребностям в перенаправлении и безопасности)

#user nginx;

error_log  /usr/local/openresty/nginx/logs/error.log warn;

events {
    worker_connections 1024;
}

http {

  lua_shared_dict auto_ssl 1m;
  lua_shared_dict auto_ssl_settings 64k;

  init_by_lua_block {

    auto_ssl = (require "resty.auto-ssl").new()
    auto_ssl:set("allow_domain", function(domain)
      return true
    end)
    auto_ssl:set("dir", "/etc/resty-auto-ssl")
    auto_ssl:init()

  }

  init_worker_by_lua_block {
    auto_ssl:init_worker()
  }

 # access_log /usr/local/openresty/nginx/logs/access.log main;

  server {

      listen 443 ssl;

      ssl_certificate_by_lua_block {
        auto_ssl:ssl_certificate()
      }

      ssl_certificate /etc/ssl/resty-auto-ssl-fallback.crt;
      ssl_certificate_key /etc/ssl/resty-auto-ssl-fallback.key;

      root /var/www/myapp.com/public;
      index index.php index.html index.htm;

      location / {

        try_files $uri $uri/ /index.php?$query_string; 

      }

#     location ~ \.php$ {
#       include snippets/fastcgi-php.conf;
#       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
#       fastcgi_read_timeout 600;
#     }

      location ~ /\.ht {
        deny all;
      }

  }

  server {

    listen 80;
    server_name *.myapp.com myapp.com;

    location /.well-known/acme-challenge/ {
        content_by_lua_block {
          auto_ssl:challenge_server()
        }
    }

    location / {
      return 301 https://myapp.com$request_uri;
    }

  }

  server {

    listen 8999;

    location / {
        content_by_lua_block {
          auto_ssl:hook_server()
        }
    }

  }

}

Я сталкиваюсь с несколькими проблемами, такими как:

  1. Не могу упомянуть пользователя в nginx config - все еще работает без него также

    • Попытка упомянуть пользователя в 1-й строке файлов конфигурации дает мне ошибку.
    • Так что я закомментировал его и попытался в любом случае
  2. Обезвоженный сбой, но сертификат создан

    • постоянно получаю следующую ошибку в моем журнале: lets_encrypt.lua:40: issue_cert(): auto-ssl: dehydrated failed: env HOOK_SECRET=XXXX HOOK_SERVER_PORT=8999 /usr/local/openresty/luajit/bin/resty-auto-ssl/dehydrated --cron --accept-terms --no-lock --domain myapp.com --challenge http-01 --config /etc/resty-auto-ssl/letsencrypt/config --hook /usr/local/openresty/luajit/bin/resty-auto-ssl/letsencrypt_hooks status: 256 out: # INFO: Using main config file /etc/resty-auto-ssl/letsencrypt/config
    • Но он все еще продолжается и создает сертификат, после которого выдает ошибку генератора случайных чисел.
    • Иногда, если я удаляю все внутри /etc/resty-auto-ssl - это не дает мне таких ошибок.
  3. Не удается найти генератор случайных чисел OpenSSL

    • В моем журнале постоянно появляется следующая ошибка: Can't load ./.rnd into RNG random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:98:Filename=./.rnd curl: (22) The requested URL returned error: 500 Internal Server Error
  4. PHP -FPM на nginx поставляется с OpenResty

    • Я правильно установил * 12 03 * -fpm и проверили его при использовании nginx standalone.
    • Но теперь, когда я использую nginx с openresty, похоже, что он работает
    • Ошибка (отображается, когда протестированная конфигурация с использованием: nginx -t команды): "/usr/local/openresty/nginx/conf/snippets/fastcgi-php.conf" failed (2: No such file or directory)
  5. Не удалось создать сертификат

    • Иногда эта ошибка сопровождается ошибкой в вышеуказанной точке № 2:

    auto-ssl: could not get certificate for myapp.com - using fallback - failed to get or issue certificate, context: ssl_certificate_by_lua*, client: 123.201.226.209, server: 0.0.0.0:443

    set_response_cert(): auto-ssl: failed to set ocsp stapling for xxxx.myapp.com - continuing anyway - failed to get ocsp response: OCSP responder query failed (http://ocsp.int-x3.letsencrypt.org): no resolver defined to resolve "ocsp.int-x3.letsencrypt.org", context: ssl_certificate_by_lua*, client: 123.201.226.209, server: 0.0.0.0:443

    connect() to unix:/run/php/php7.4-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 123.201.226.209, server: , request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.4-fpm.sock:", host: "xxxx.myapp.com"

  6. При попытке чтобы получить доступ к who1 A на customer1.com, IP-адрес сервера myapp.com

    "Error creating new order :: Cannot issue for \"X.X.X.X\": The ACME server can not issue a certificate for an IP address"

    ssl_certificate.lua:281: auto-ssl: could not determine domain for request (SNI not supported?) - using fallback - , context: ssl_certificate_by_lua*, client: 45.148.10.72, server: 0.0.0.0:443

    • ... где xxxx - это A для customer1.com, который был открыт из браузера

У меня следующие недоразумения:

  1. Должен ли я получить один правильный (платный) подстановочный знак положительного сертификата SSL для myapp.com? (И используйте его как запасной вариант)

    • Это охватывает весь мой поддомен, и мне не придется иметь дело с ограничениями на поддомен с помощью letsencrypt.
    • Таким образом, я должен использовать только шифровать для пользовательских доменов, таких как customer1.com
  2. Я не уверен, правильно ли настроены мои пользователи и разрешения - любые указатели помогут

  3. Я бы хотел sh мой окончательный nginx конфиг для выполнения следующих потребностей

...