# API XML-RPC поверх HTTPS
# Симптомы

*   API XML-RPC поверх HTTPS.
*   Как использовать HTTPS в API?
*   Возможно ли передавать API запросы, используя протокол HTTPS вместо HTTP?
*   API по HTTPS.
*   HTTPS для API.

# Решение

:::info
[Доступ к API поверх HTTPS. Доступен в версии 7.3.3 и выше](https://docs.usergate.com/trebovaniya-k-setevomu-okruzheniyu_1068.html)
:::

Прежде всего в настройках зоны нужно разрешить сервис API XML-RPC поверх HTTPS.

При обращении к NGFW, он будет слать SSL-сертификат веб-консоли. По умолчанию это сертификат Web GUI (Default). Соответственно, XML-RPC клиент должен доверять этому сертификату. Поэтому предварительно его нужно экспортировать на свой ПК.

Из веб-консоли SSL сертификаты импортируются в формате DER. Python не может работать с SSL сертификатами в этом формате, поэтому SSL сертификат предварительно нужно конвертировать в PEM формат. С помощью openssl это можно сделать командой:

```txt
openssl x509 -inform DER -in certificate.der -out certificate.pem -outform PEM
```

Для подключения к API XML-RPC поверх HTTPS можно использовать следующий код:

```txt
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)
```

# Шаблон кода

```txt
#!/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)
```