Настройка https для PERCo-Web

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

Инструкция предназначена для администратора PERCo-Web и сервера 1С. В примерах используется адрес 192.168.12.22. Замените его на адрес своего сервера PERCo-Web.

1. Подготовка

Адрес в настройках подключения 1С должен совпадать с адресом в сертификате PERCo-Web:

  • При подключении по IP сертификат должен содержать этот IP в поле Subject Alternative Name (SAN) как IP Address.
  • При подключении по имени сертификат должен содержать это имя в SAN как DNS Name.

Если подходящий сертификат и закрытый ключ уже имеются в файлах .crt и .key, переходите к разделу 3.

Для создания собственного сертификата потребуется OpenSSL. Команды ниже выполняются в PowerShell на Windows. Запускайте их по порядку, каждую строку отдельно.

2. Создание сертификата с помощью OpenSSL

Укажите IP сервера PERCo-Web и создайте папку для файлов:

$PercoIP = "192.168.12.22"
$CertDir = Join-Path $env:USERPROFILE ("perco-tls-" + (Get-Date -Format "yyyyMMdd-HHmmss"))
New-Item -ItemType Directory -Path $CertDir
Set-Location -LiteralPath $CertDir

Создайте внутренний удостоверяющий центр (УЦ). OpenSSL предложит задать пароль для закрытого ключа ca.key. Сохраните этот пароль.

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')
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"

Создайте ключ и запрос на сертификат PERCo-Web:

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out perco.key
openssl req -new -sha256 -key perco.key -out perco.csr -subj "/CN=$PercoIP"

Добавьте IP-адрес в SAN и подпишите сертификат. OpenSSL запросит пароль от ca.key.

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')
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

Проверьте выпущенный сертификат:

openssl verify -CAfile ca.crt -purpose sslserver -verify_ip $PercoIP perco.crt
openssl x509 -in perco.crt -noout -ext subjectAltName -fingerprint -sha256

Первая команда должна вывести perco.crt: OK, вторая — нужный IP Address.

ФайлНазначение
perco.crtСертификат сервера PERCo-Web
perco.keyЗакрытый ключ сервера PERCo-Web
ca.crtСертификат внутреннего УЦ для доверия на сервере 1С
ca.keyЗакрытый ключ внутреннего УЦ; хранить отдельно, не загружать в PERCo-Web или на сервер 1С

3. Установка сертификата в PERCo-Web

Откройте Менеджер PERCo-Web → Настройки → HTTPS и сертификаты.

  1. В поле сертификата выберите perco.crt.
  2. В поле ключа выберите соответствующий perco.key.
  3. Нажмите Сохранить и включите HTTPS.
  4. Проверьте назначенный порт HTTPS — обычно 443.
  5. На вкладке Мониторинг перезапустите Web-сервер PERCo-Web.

Важно: после загрузки новых файлов если ранее уже были настроен доступ через 443 порт, сервер может продолжать выдавать прежний сертификат до перезапуска. Чтобы это исправить, перезагрузите сервер PERCo-Web в согласованное время.

Описание настроек HTTPS в документации PERCo-Web

4. Настройка доверия на сервере 1С

При использовании внутреннего УЦ скопируйте ca.crt на компьютер, где выполняется обмен с 1С. Для клиент-серверной базы это сервер 1С. Если обмен может выполняться на нескольких узлах кластера, установите сертификат УЦ на каждом таком узле.

Запустите PowerShell от имени администратора и замените путь на фактический:

Import-Certificate -FilePath "C:\путь\к\ca.crt" -CertStoreLocation Cert:\LocalMachine\Root

Для просмотра установленных сертификатов нажмите Win + R, введите certlm.msc и откройте Доверенные корневые центры сертификации → Сертификаты. Там должен находиться сертификат PERCo Internal Root CA.

Если сертификат PERCo-Web выпущен УЦ, которому сервер 1С уже доверяет, отдельный импорт не требуется.

5. Проверка действующего HTTPS-сертификата

Сначала посмотрите отпечаток созданного файла:

openssl x509 -in .\perco.crt -noout -fingerprint -sha256 -ext subjectAltName

Затем проверьте сертификат, который реально выдаёт порт 443. Укажите фактический IP PERCo-Web:

'' | openssl s_client -connect 192.168.12.22:443 -noservername -showcerts 2>$null | openssl x509 -noout -fingerprint -sha256 -ext subjectAltName

Отпечатки должны совпасть. Если они разные, PERCo-Web продолжает выдавать старый сертификат либо на порту 443 отвечает другой HTTPS-сервис.

На сервере 1С проверьте подключение без отключения проверки сертификата:

curl.exe -v --noproxy "*" https://192.168.12.22:443/api/system/auth

Ответ HTTP 401 или 405 для этой проверки допустим: команда отправляет GET-запрос, а цель проверки — убедиться, что HTTPS-соединение установлено и сертификат принят.

После этого в настройках интеграции 1С укажите тот же адрес, порт 443, включите защищённое соединение и повторите подключение к PERCo-Web.

6. Возможные ошибки

СообщениеЧто проверить
SEC_E_WRONG_PRINCIPAL, «Главное конечное имя неверно»Адрес отсутствует в SAN или порт 443 выдаёт прежний сертификат
«Удаленный узел не прошел проверку»Доверие к УЦ, срок и цепочку сертификата, проверку отзыва, настройки прокси
HTTP 401Учётные данные PERCo-Web
HTTP 405 при тесте через curl.exeДля ресурса требуется POST; HTTPS-соединение уже прошло проверку

Хранение ключей: файл perco.key нужен Web-серверу PERCo-Web. Файл ca.key храните отдельно в защищённом месте.