From a9bea3d2760153d287279dfea6daf097c2dfbf75 Mon Sep 17 00:00:00 2001 From: PTah Date: Tue, 26 May 2026 21:27:52 +1000 Subject: [PATCH] =?UTF-8?q?docs:=20PFX=20-legacy=20=D0=BD=D0=B0=20Ubuntu?= =?UTF-8?q?=2024.04,=20scp=20=D1=81=20=D0=B4=D1=80=D1=83=D0=B3=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20Linux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/install-ubuntu-24.04-native.md | 3 +- docs/ssl-certificate.md | 84 ++++++++++++++++++++++++----- 2 files changed, 72 insertions(+), 15 deletions(-) diff --git a/docs/install-ubuntu-24.04-native.md b/docs/install-ubuntu-24.04-native.md index 0d72b98..5f8a172 100644 --- a/docs/install-ubuntu-24.04-native.md +++ b/docs/install-ubuntu-24.04-native.md @@ -225,7 +225,8 @@ sudo chown root:ssl-cert /etc/ssl/sac/privkey.pem sudo -u www-data test -r /etc/ssl/sac/privkey.pem && echo OK ``` -Если пришёл только **`.pfx`** — см. [ssl-certificate.md §4.3](ssl-certificate.md#43-распаковка-pfx--p12-на-сервере). +Если PFX с другого Linux — `scp` на SAC: [ssl-certificate.md §4.3](ssl-certificate.md#43-забрать-файл-с-другого-linux-сервера-scp). +Распаковка PFX на Ubuntu 24.04: **`openssl pkcs12 -legacy`** — [§4.4](ssl-certificate.md#44-распаковка-pfx--p12-на-сервере-ubuntu-2404). ### 9.2. Конфиг nginx (HTTPS) diff --git a/docs/ssl-certificate.md b/docs/ssl-certificate.md index 5757d14..7111127 100644 --- a/docs/ssl-certificate.md +++ b/docs/ssl-certificate.md @@ -26,7 +26,7 @@ nginx читает **два PEM-файла** (текст, начинается | От УЦ / админа | Расширения | Что делать | |----------------|------------|------------| | Готовый PEM | `.pem`, `.crt` + `.key` | Собрать fullchain, скопировать на сервер | -| PKCS#12 | `.pfx`, `.p12` | Распаковать в PEM (см. §4) | +| PKCS#12 | `.pfx`, `.p12` | Распаковать в PEM (см. §4.3, на Ubuntu 24.04 нужен `-legacy`) | | Отдельные файлы | `certificate.crt`, `ca-bundle.crt`, `private.key` | Склеить fullchain (см. §5) | | Windows (MMC) | экспорт `.pfx` | Распаковать на ПК или сервере (§4) | @@ -65,7 +65,8 @@ sudo -u www-data test -r /etc/ssl/sac/privkey.pem && echo "key OK" ## 4. Копирование на сервер -Подставьте IP или hostname SAC-сервера вместо `SAC_SERVER`. +Подставьте IP или hostname SAC-сервера вместо `SAC_SERVER`. +Команды `scp` выполняются **на той машине, куда копируете** (обычно на SAC-сервере — «забрать» файл с другого хоста). ### 4.1. С Linux / macOS (scp) @@ -105,31 +106,84 @@ scp D:\Certs\kalinamall\wildcard.pfx papatramp@SAC_SERVER:/tmp/ Распаковка на **сервере** (§4.3). -### 4.3. Распаковка `.pfx` / `.p12` на сервере +### 4.3. Забрать файл с другого Linux-сервера (scp) + +Выполнять **на SAC-сервере** (pull с хоста, где лежит PFX/PEM): + +```bash +mkdir -p /tmp/certs + +# один файл +scp user@certs-host.example.com:/path/to/wildcard_kalinamall_ru.pfx /tmp/certs/ + +# несколько файлов +scp user@certs-host:/path/to/fullchain.pem user@certs-host:/path/to/privkey.pem /tmp/certs/ + +# нестандартный SSH-порт (у scp заглавная P) +scp -P 2222 user@certs-host:/path/to/wildcard_kalinamall_ru.pfx /tmp/certs/ +``` + +С другого сервера **отдать** на SAC (push — команда на сервере-источнике): + +```bash +scp /path/to/wildcard_kalinamall_ru.pfx papatramp@:/tmp/certs/ +``` + +Нужен SSH-доступ и право **читать** файл на источнике. + +### 4.4. Распаковка `.pfx` / `.p12` на сервере (Ubuntu 24.04) + +На Ubuntu 24.04 стоит **OpenSSL 3.x**. Старые PFX от VeriSign/DigiCert часто используют **RC2-40-CBC** — без флага `-legacy` будет ошибка: + +```text +Algorithm (RC2-40-CBC : 0), Properties (), unsupported +``` + +**Всегда добавляйте `-legacy`** к `openssl pkcs12`: ```bash -# установить openssl, если нет sudo apt install -y openssl -cd /tmp -# замените имя файла и пароль от PFX -openssl pkcs12 -in wildcard.pfx -nocerts -nodes -out privkey.pem -openssl pkcs12 -in wildcard.pfx -clcerts -nokeys -out server.crt -openssl pkcs12 -in wildcard.pfx -cacerts -nokeys -out ca-chain.crt +sudo mkdir -p /tmp/certs +cd /tmp/certs +# замените имя PFX; Enter Import Password: — пароль от PFX (не sudo) + +sudo openssl pkcs12 -legacy -in wildcard_kalinamall_ru.pfx -nocerts -nodes \ + -out privkey.pem + +sudo openssl pkcs12 -legacy -in wildcard_kalinamall_ru.pfx -clcerts -nokeys \ + -out server.crt + +sudo openssl pkcs12 -legacy -in wildcard_kalinamall_ru.pfx -cacerts -nokeys \ + -out ca-chain.crt # fullchain = сервер + промежуточные (порядок важен) cat server.crt ca-chain.crt | sudo tee /etc/ssl/sac/fullchain.pem > /dev/null -sudo mv privkey.pem /etc/ssl/sac/privkey.pem +sudo cp privkey.pem /etc/ssl/sac/privkey.pem sudo chmod 644 /etc/ssl/sac/fullchain.pem sudo chmod 640 /etc/ssl/sac/privkey.pem sudo chown root:root /etc/ssl/sac/fullchain.pem sudo chown root:ssl-cert /etc/ssl/sac/privkey.pem -# удалить временные файлы с /tmp -shred -u server.crt ca-chain.crt 2>/dev/null; rm -f wildcard.pfx +# очистка временных файлов +sudo shred -u server.crt ca-chain.crt privkey.pem 2>/dev/null +sudo rm -f /tmp/certs/wildcard_kalinamall_ru.pfx ``` -Пароль PFX вводится интерактивно. **Не** коммитьте PFX и ключ в git. +Если `-legacy` недостаточно: + +```bash +sudo openssl pkcs12 -provider legacy -provider default \ + -in wildcard_kalinamall_ru.pfx -nocerts -nodes -out privkey.pem +``` + +Проверить содержимое PFX: + +```bash +sudo openssl pkcs12 -legacy -in wildcard_kalinamall_ru.pfx -info -noout +``` + +Пароль PFX вводится интерактивно (`Enter Import Password`). **Не** коммитьте PFX и ключ в git. --- @@ -233,8 +287,10 @@ SAC_PUBLIC_URL=https://sac.kalinamall.ru | Симптом | Решение | |---------|---------| +| `RC2-40-CBC` / `unsupported` при `pkcs12` | OpenSSL 3 на Ubuntu 24.04: добавить **`-legacy`** (см. §4.4) | +| `mac verify failure` | Неверный пароль PFX | | `nginx: PEM_read_bio_X509_AUX() failed` | Неверный PEM, проверьте `fullchain.pem` текстом, нет ли `.der` без конвертации | | `key values mismatch` | Ключ не от этой пары сертификатов | -| `permission denied` на key | `chown root:ssl-cert`, `chmod 640`, `www-data` в группе `ssl-cert` | +| `permission denied` на key | `chown root:ssl-cert`, `chmod 640`; `sudo -u www-data test -r ...` | | Браузер/агент не доверяет | Неполная цепочка — добавьте intermediate в fullchain | | `certificate has expired` | Продлить у УЦ, заменить файлы |