diff --git a/install.sh b/install.sh index d2c4fd8..09a7e72 100644 --- a/install.sh +++ b/install.sh @@ -81,8 +81,8 @@ ${BOLD}Режим локальной сети (без интернета / AD-д --intranet Локальная сеть: HTTP или самоподписанный HTTPS --ssl TYPE none | selfsigned | custom | letsencrypt --cert-dir PATH Папка со своими сертификатами (для --ssl custom) - --cert-fullchain FILE Файл сертификата в --cert-dir (по умолчанию: fullchain.pem / cert.pem) - --cert-key FILE Файл ключа в --cert-dir (по умолчанию: privkey.pem / key.pem) + --cert-fullchain FILE Файл сертификата (fullchain.pem, _wildcard.domain.pem, …) + --cert-key FILE Файл ключа (privkey.pem, _wildcard.domain-key.pem, …) --nginx-http-port PORT HTTP-порт Nginx (если 80 занят, например 8080) --nginx-https-port PORT HTTPS-порт Nginx (если 443 занят, например 8443) --offline Не скачивать Docker из интернета (только если уже установлен) @@ -1426,6 +1426,36 @@ find_custom_cert_file() { return 1 } +find_custom_cert_file_auto() { + local dir="$1" + local kind="$2" + local f base + + shopt -s nullglob + if [[ "$kind" == "key" ]]; then + for f in "$dir"/*-key.pem "$dir"/*_key.pem "$dir"/*.key; do + if [[ -f "$f" ]]; then + shopt -u nullglob + echo "$f" + return 0 + fi + done + shopt -u nullglob + return 1 + fi + + for f in "$dir"/_wildcard*.pem "$dir"/*wildcard*.pem "$dir"/*.pem "$dir"/*.crt; do + [[ -f "$f" ]] || continue + base="$(basename "$f")" + [[ "$base" == *-key.pem || "$base" == *_key.pem ]] && continue + shopt -u nullglob + echo "$f" + return 0 + done + shopt -u nullglob + return 1 +} + resolve_custom_cert_source_dir() { if [[ -n "$CLI_CERT_DIR" ]]; then SSL_CERT_DIR="$CLI_CERT_DIR" @@ -1455,7 +1485,8 @@ prompt_custom_cert_settings() { echo "" echo -e "${BOLD}Свои SSL-сертификаты:${NC}" echo " Положите на сервер файлы сертификата и ключа, затем укажите папку." - echo " Поддерживаются имена: fullchain.pem / cert.pem и privkey.pem / key.pem" + echo " Поддерживаются имена: fullchain.pem, cert.pem, _wildcard.domain.pem" + echo " и ключи: privkey.pem, key.pem, _wildcard.domain-key.pem" echo " Рекомендуемая папка: ${DEFAULT_CERT_UPLOAD_DIR}/" echo "" @@ -1513,10 +1544,12 @@ install_custom_certificates() { local src_fullchain src_key src_fullchain="$(find_custom_cert_file "$SSL_CERT_DIR" "$SSL_CERT_FULLCHAIN" \ fullchain.pem cert.pem certificate.pem server.crt)" \ - || fail "Не найден файл сертификата в ${SSL_CERT_DIR}. Положите fullchain.pem или cert.pem, либо укажите --cert-fullchain" + || src_fullchain="$(find_custom_cert_file_auto "$SSL_CERT_DIR" cert)" \ + || fail "Не найден файл сертификата в ${SSL_CERT_DIR}. Положите fullchain.pem, _wildcard.domain.pem и т.п., либо укажите --cert-fullchain" src_key="$(find_custom_cert_file "$SSL_CERT_DIR" "$SSL_CERT_KEY" \ privkey.pem key.pem server.key)" \ - || fail "Не найден файл ключа в ${SSL_CERT_DIR}. Положите privkey.pem или key.pem, либо укажите --cert-key" + || src_key="$(find_custom_cert_file_auto "$SSL_CERT_DIR" key)" \ + || fail "Не найден файл ключа в ${SSL_CERT_DIR}. Положите privkey.pem, domain-key.pem и т.п., либо укажите --cert-key" validate_custom_certificate_pair "$src_fullchain" "$src_key"