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

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

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