Исходный код вики Настройка https для PERCo-Web

Версия 1.1 от PROSTO:СКУД на 2026/09/30 09:35

Скрыть последних авторов
PROSTO:СКУД 1.1 1 # Подключение ПРОСТО:СКУД к PERCo-Web по HTTPS
2
3 Инструкция для администратора PERCo-Web и сервера 1С. Пример ниже использует IP-адрес `192.168.12.22`; перед выполнением замените его на адрес своего сервера.
4
5 ## 1. Определите адрес подключения
6
7 Адрес, указанный в настройках интеграции 1С, должен совпадать с адресом в сертификате PERCo-Web:
8
9 - Если 1С подключается по IP, сертификат должен содержать этот IP в поле **Subject Alternative Name (SAN)** как `IP Address`.
10 - Если 1С подключается по имени, сертификат должен содержать это имя в SAN как `DNS Name`.
11
12 Одного поля `CN` недостаточно для надёжной проверки адреса. [Правила проверки HTTPS-сертификата](https://www.rfc-editor.org/rfc/rfc9110.html#section-4.3.5)
13
14 Если у вас уже есть подходящий сертификат и закрытый ключ в файлах `.crt` и `.key`, переходите к разделу 3.
15
16 ## 2. Создайте сертификат с помощью OpenSSL
17
18 Команды выполняются в **PowerShell на Windows**. OpenSSL можно запустить на отдельном компьютере администратора. Выполняйте команды по порядку, **каждую строку отдельно**.
19
20 Укажите IP PERCo-Web и создайте новую папку:
21
22 ```powershell
23 $PercoIP = "192.168.12.22"
24 ```
25
26 ```powershell
27 $CertDir = Join-Path $env:USERPROFILE ("perco-tls-" + (Get-Date -Format "yyyyMMdd-HHmmss"))
28 ```
29
30 ```powershell
31 New-Item -ItemType Directory -Path $CertDir
32 ```
33
34 ```powershell
35 Set-Location -LiteralPath $CertDir
36 ```
37
38 Создайте внутренний удостоверяющий центр (УЦ). OpenSSL запросит пароль для файла `ca.key`:
39
40 ```powershell
41 Set-Content -Path .\ca.cnf -Encoding ascii -Value @('[req]','distinguished_name = dn','x509_extensions = v3_ca','[dn]','CN = PERCo Internal Root CA','[v3_ca]','basicConstraints = critical,CA:TRUE,pathlen:0','keyUsage = critical,keyCertSign,cRLSign','subjectKeyIdentifier = hash')
42 ```
43
44 ```powershell
45 openssl req -x509 -newkey rsa:3072 -sha256 -days 3650 -keyout ca.key -out ca.crt -config ca.cnf -extensions v3_ca -subj "/CN=PERCo Internal Root CA"
46 ```
47
48 Создайте ключ и запрос на сертификат сервера:
49
50 ```powershell
51 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out perco.key
52 ```
53
54 ```powershell
55 openssl req -new -sha256 -key perco.key -out perco.csr -subj "/CN=$PercoIP"
56 ```
57
58 Добавьте IP в SAN и выпустите сертификат. При выпуске снова потребуется пароль от `ca.key`:
59
60 ```powershell
61 Set-Content -Path .\server.ext -Encoding ascii -Value @('[v3_server]','basicConstraints = critical,CA:FALSE','keyUsage = critical,digitalSignature,keyEncipherment','extendedKeyUsage = serverAuth',"subjectAltName = IP:$PercoIP",'subjectKeyIdentifier = hash','authorityKeyIdentifier = keyid,issuer')
62 ```
63
64 ```powershell
65 openssl x509 -req -in perco.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out perco.crt -days 397 -sha256 -extfile server.ext -extensions v3_server
66 ```
67
68 Проверьте сертификат:
69
70 ```powershell
71 openssl verify -CAfile ca.crt -purpose sslserver -verify_ip $PercoIP perco.crt
72 ```
73
74 Ожидаемый результат — `perco.crt: OK`. Проверка SAN:
75
76 ```powershell
77 openssl x509 -in perco.crt -noout -ext subjectAltName -fingerprint -sha256
78 ```
79
80 В выводе должен быть нужный `IP Address`. Использованные расширения сертификата описаны в [документации OpenSSL](https://docs.openssl.org/3.0/man5/x509v3_config/).
81
82 ## 3. Установите сертификат в PERCo-Web
83
84 Откройте **Менеджер PERCo-Web → Настройки → HTTPS и сертификаты**:
85
86 1. В поле сертификата выберите `perco.crt`.
87 2. В поле ключа выберите соответствующий `perco.key`.
88 3. Нажмите **Сохранить** и включите **HTTPS**.
89 4. Проверьте, что для HTTPS назначен нужный порт, обычно `443`.
90 5. На вкладке **Мониторинг** перезапустите **Web-сервер**. Если после этого порт 443 продолжает отдавать прежний сертификат, перезагрузите сервер PERCo-Web в согласованное время.
91
92 Поля загрузки сертификата и ключа описаны в [руководстве PERCo-Web](https://ru.percoweb.com/help/server_db.htm). **Не загружайте в PERCo-Web файл `ca.key`.**
93
94 ## 4. Настройте доверие на сервере 1С
95
96 Если использован внутренний УЦ из раздела 2, скопируйте **только `ca.crt`** на компьютер, где выполняется обмен 1С. В клиент-серверной базе это сервер 1С; при наличии кластера выполните шаг на каждом узле, который может выполнять обмен.
97
98 Запустите PowerShell от администратора и укажите фактический путь к скопированному файлу:
99
100 ```powershell
101 Import-Certificate -FilePath "C:\путь\к\ca.crt" -CertStoreLocation Cert:\LocalMachine\Root
102 ```
103
104 Для просмотра хранилища нажмите **Win + R** и выполните `certlm.msc`. Сертификат УЦ должен появиться в **Доверенные корневые центры сертификации → Сертификаты**. [Документация Microsoft](https://learn.microsoft.com/en-us/powershell/module/pki/import-certificate?view=windowsserver2025-ps)
105
106 Если в PERCo-Web установлен сертификат от уже доверенного УЦ, отдельный импорт может не потребоваться.
107
108 ## 5. Проверьте действующий сертификат и подключение
109
110 После перезапуска PERCo-Web проверьте **не файл на диске, а сертификат, который реально выдаёт порт 443**:
111
112 ```powershell
113 '' | openssl s_client -connect "${PercoIP}:443" -noservername -showcerts 2>$null | openssl x509 -noout -subject -issuer -fingerprint -sha256 -ext subjectAltName
114 ```
115
116 Сравните его SHA-256 отпечаток с отпечатком `perco.crt`. Они должны совпадать. В нашем случае именно эта проверка обнаружила, что после загрузки нового файла PERCo-Web продолжал выдавать старый сертификат до перезагрузки.
117
118 На сервере 1С проверьте HTTPS без отключения проверки сертификата:
119
120 ```powershell
121 curl.exe -v --noproxy "*" "https://${PercoIP}:443/api/system/auth"
122 ```
123
124 Ответ HTTP `401` или `405` для этого тестового `GET` допустим: он означает, что HTTPS-соединение установлено и сервер ответил. После этого в настройках интеграции 1С укажите тот же IP, порт `443`, включите защищённое соединение и повторите подключение.
125
126 | Ошибка | Что проверить |
127 | :-- | :-- |
128 | `SEC_E_WRONG_PRINCIPAL`, «Главное конечное имя неверно» | IP или имя отсутствует в SAN; PERCo-Web выдаёт прежний сертификат |
129 | «Удаленный узел не прошел проверку» | Доверие к УЦ, срок и цепочку сертификата, доступ к проверке отзыва, настройки прокси |
130 | HTTP `401` | Учётные данные PERCo-Web |
131 | HTTP `405` при тесте через `curl.exe` | Для `/api/system/auth` нужен `POST`; проверка HTTPS уже прошла |
132
133 **Хранение ключей:** `perco.key` необходим Web-серверу PERCo-Web. `ca.key` — закрытый ключ внутреннего УЦ; храните его отдельно и не передавайте на сервер 1С или в PERCo-Web.