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

Версия 5.1 от PROSTO:СКУД на 2026/10/30 12:29

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