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

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

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