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

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

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