#5919: API XML-RPC поверх HTTPS
Отредактирована: 105 дней назадСимптомы
- API XML-RPC поверх HTTPS.
- Как использовать HTTPS в API?
- Возможно ли передавать API запросы, используя протокол HTTPS вместо HTTP?
- API по HTTPS.
- HTTPS для API.
Решение
Прежде всего в настройках зоны нужно разрешить сервис API XML-RPC поверх HTTPS.
При обращении к NGFW, он будет слать SSL-сертификат веб-консоли. По умолчанию это сертификат Web GUI (Default). Соответственно, XML-RPC клиент должен доверять этому сертификату. Поэтому предварительно его нужно экспортировать на свой ПК.
Из веб-консоли SSL сертификаты импортируются в формате DER. Python не может работать с SSL сертификатами в этом формате, поэтому SSL сертификат предварительно нужно конвертировать в PEM формат. С помощью openssl это можно сделать командой:
openssl x509 -inform DER -in certificate.der -out certificate.pem -outform PEM
Для подключения к API XML-RPC поверх HTTPS можно использовать следующий код:
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.check_hostname = False
context.load_verify_locations(cafile='certificate.pem')
context.verify_mode = ssl.CERT_OPTIONAL
server = rpc.ServerProxy(f'https://{SERVER}:{PORT}/rpc', verbose=False, context=context)
Шаблон кода
#!/usr/bin/env python3
import xmlrpc.client
import ssl
SERVER = "IP_адрес"
PORT = 4443
USER = "логин"
PASSWORD = "пароль"
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.check_hostname = False
context.load_verify_locations(cafile='certificate.pem')
context.verify_mode = ssl.CERT_OPTIONAL
server = xmlrpc.client.ServerProxy('https://' + SERVER + ':' + str(PORT) + '/rpc', verbose=False, context=context)
res = server.v2.core.login(USER, PASSWORD, {})
auth_token = res['auth_token']
# тут любой код на Python
server.v2.core.logout(auth_token)