Изменения документа Настройка https для PERCo-Web

Редактировал(а) PROSTO:СКУД 2026/10/30 12:30

От версии 5.1
отредактировано PROSTO:СКУД
на 2026/10/30 12:29
Изменить комментарий: К данной версии нет комментариев
К версии 1.1
отредактировано PROSTO:СКУД
на 2026/09/30 09:35
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

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