Документация Engee

NetworkOptions

# NetworkOptions.ca_rootsFunction

ca_roots() :: Union{Nothing, String}

Функция ca_roots() сообщает вызывающей стороне, где можно найти файл или каталог с корнями центра сертификации в кодировке PEM. По умолчанию в таких системах, как Windows и macOS, где встроенные модули TLS умеют проверять узлы с помощью встроенного в систему механизма проверки сертификатов, эта функция возвращает nothing. В классических системах UNIX (кроме macOS) корневые сертификаты обычно хранятся в файле в каталоге /etc. Выполняется поиск в стандартных местах для текущей системы UNIX, и если один из этих путей существует, он будет возвращен. Если стандартных путей для хранения корневых сертификатов нет, возвращается путь к набору корневых сертификатов, входящих в состав Julia.

Значение, возвращаемое по умолчанию функцией ca_roots(), можно переопределить, задав переменную среды JULIA_SSL_CA_ROOTS_PATH, SSL_CERT_DIR или SSL_CERT_FILE. В таком случае эта функция всегда будет возвращать значение первой заданной переменной (независимо от того, существует ли путь). Если переменной JULIA_SSL_CA_ROOTS_PATH присвоена пустая строка, остальные переменные игнорируются (будто они не заданы); если остальным переменным присвоены пустые строки, считается, что они не заданы.

# NetworkOptions.ca_roots_pathFunction

ca_roots_path() :: String

Функция ca_roots_path() похожа на функцию ca_roots() за тем исключением, что она всегда возвращает путь к файлу или каталогу с корнями центра сертификации в кодировке PEM. При вызове в такой системе, как Windows или macOS, где корневые сертификаты не хранятся в файловой системе, она в настоящее время возвращает путь к набору корневых сертификатов, входящих в состав Julia. (В будущем эта функция может вместо этого извлекать корневые сертификаты из системы и сохранять их в файле, путь к которому будет возвращаться.)

Если библиотеку, использующую TLS, можно настроить так, чтобы применялись сертификаты системы, лучше сделать это. То есть лучше использовать функцию ca_roots(), которая возвращает nothing для указания на то, что следует применять сертификаты системы. Функцию ca_roots_path() следует использовать только при настройке библиотек, требующих пути к файлу или каталогу для получения корневых сертификатов.

Значение, возвращаемое по умолчанию функцией ca_roots_path(), можно переопределить, задав переменную среды JULIA_SSL_CA_ROOTS_PATH, SSL_CERT_DIR или SSL_CERT_FILE. В таком случае эта функция всегда будет возвращать значение первой заданной переменной (независимо от того, существует ли путь). Если переменной JULIA_SSL_CA_ROOTS_PATH присвоена пустая строка, остальные переменные игнорируются (будто они не заданы); если остальным переменным присвоены пустые строки, считается, что они не заданы.

# NetworkOptions.ssh_dirFunction

ssh_dir() :: String

Функция ssh_dir() возвращает расположение каталога, в котором программа ssh хранит или ищет файлы конфигурации. По умолчанию это каталог ~/.ssh, но его можно переопределить, задав переменную среды SSH_DIR.

# NetworkOptions.ssh_key_passFunction

ssh_key_pass() :: String

Функция ssh_key_pass() возвращает значение переменной среды SSH_KEY_PASS, если она задана, или nothing в противном случае. В будущем, возможно, будет реализован поиск пароля другими способами, например посредством защищенного системного хранилища, поэтому пакеты, которым нужен пароль для расшифровки закрытого ключа SSH, должны использовать этот API вместо обращения к переменной среды напрямую. Это позволит им автоматически использовать такую возможность после ее добавления.

# NetworkOptions.ssh_key_nameFunction

ssh_key_name() :: String

Функция ssh_key_name() возвращает базовое имя файлов ключей, которые протокол SSH должен использовать при установлении подключения. Обычно эту функцию не требуется вызывать напрямую, и для получения полных путей библиотеки должны использовать функции ssh_key_path и ssh_pub_key_path. Если переменная среды SSH_KEY_NAME задана, эта функция возвращает ее значение; в противном случае она по умолчанию возвращает id_rsa.

# NetworkOptions.ssh_key_pathFunction

ssh_key_path() :: String

Функция ssh_key_path() возвращает путь к файлу с закрытым ключом SSH, который следует использовать для подключений SSH. Если переменная среды SSH_KEY_PATH задана, возвращается ее значение. В противном случае по умолчанию возвращается

joinpath(ssh_dir(), ssh_key_name())

Это значение по умолчанию, в свою очередь, зависит от переменных среды SSH_DIR и SSH_KEY_NAME.

# NetworkOptions.ssh_pub_key_pathFunction

ssh_pub_key_path() :: String

Функция ssh_pub_key_path() возвращает путь к файлу с открытым ключом SSH, который следует использовать для подключений SSH. Если переменная среды SSH_PUB_KEY_PATH задана, возвращается ее значение. Если она не задана, но задана переменная SSH_KEY_PATH, возвращается этот путь с добавлением суффикса .pub. Если не задана ни та, ни другая переменная, по умолчанию возвращается

joinpath(ssh_dir(), ssh_key_name() * ".pub")

Это значение по умолчанию, в свою очередь, зависит от переменных среды SSH_DIR и SSH_KEY_NAME.

# NetworkOptions.ssh_known_hosts_filesFunction

ssh_known_hosts_files() :: Vector{String}

Функция ssh_known_hosts_files() возвращает вектор путей к файлам известных узлов SSH, которые следует использовать при проверке удостоверений удаленных серверов для установления подключений SSH. По умолчанию эта функция возвращает

[joinpath(ssh_dir(), "known_hosts"), bundled_known_hosts]

где bundled_known_hosts — это путь к копии файла известных узлов, которая входит в состав пакета (и содержит ключи известных узлов для github.com и gitlab.com). Однако если задана переменная среды SSH_KNOWN_HOSTS_FILES, ее значение разделяется на пути по символу : (или ; в Windows) и возвращается вектор этих путей. Если какой-либо компонент этого вектора пуст, он расширяется до известных путей узлов по умолчанию.

Пакеты, использующие ssh_known_hosts_files(), в идеале должны искать соответствующие записи путем сравнения имени узла и типов ключей и принимать первую запись в любом из соответствующих файлов в качестве удостоверения узла. Если вызывающая сторона не может сравнить тип ключа (например, потому что он хэширован), она должна аппроксимировать описанный выше алгоритм путем поиска всех соответствующих записей для узла в каждом файле: если в файле есть записи для узла, одна из них должна совпадать. Вызывающая сторона должна продолжать поиск в следующих файлах известных узлов, только если в предыдущих файлах нет записей для нужного узла.

# NetworkOptions.ssh_known_hosts_fileFunction

ssh_known_hosts_file() :: String

Функция ssh_known_hosts_file() возвращает один путь к файлу известных узлов SSH, который следует использовать при проверке удостоверений удаленных серверов для установления подключений SSH. Она возвращает первый существующий путь, возвращаемый функцией ssh_known_hosts_files. Вызывающие стороны, которые могут выполнять поиск в более чем одном файле известных узлов, должны вместо этого использовать функцию ssh_known_hosts_files и искать совпадающие узлы во всех возвращаемых файлах, как описано в документации к этой функции.

# NetworkOptions.verify_hostFunction

verify_host(url::AbstractString, [transport::AbstractString]) :: Bool

Функция verify_host сообщает вызывающей стороне, следует ли проверить удостоверение узла при обмене данными по защищенному транспортному протоколу, такому как TLS или SSH. Аргумент url может содержать:

  1. обычный URL-адрес, начинающийся с proto://;

  2. чистое имя узла в стиле ssh или имя узла с префиксом user@;

  3. имя узла в стиле scp, как показано выше, с символом : и путем после него.

В любом случае имя узла анализируется, и решение о проверке принимается исключительно исходя из него, а не еще каких-либо компонентов входного URL-адреса. В частности, не имеет значения протокол URL-адреса (подробнее см. ниже).

Аргумент transport указывает тип транспорта для запроса. Текущие известные значения: SSL или ssl (псевдоним TLS или tls) и SSH или ssh. Если транспорт не указан, запрос вернет true только в том случае, если имя узла не должно проверяться независимо от транспорта.

Имя узла сравнивается с шаблонами узлов в соответствующих переменных среды с учетом того, указан ли аргумент transport и каково его значение:

  • JULIA_NO_VERIFY_HOSTS — узлы, которые не должны проверяться ни для какого транспорта;

  • JULIA_SSL_NO_VERIFY_HOSTS — узлы, которые не должны проверяться для SSL и TLS;

  • JULIA_SSH_NO_VERIFY_HOSTS — узлы, которые не должны проверяться для SSH;

  • JULIA_ALWAYS_VERIFY_HOSTS — узлы, которые должны проверяться всегда.

Значение каждой из этих переменных представляет собой разделенный запятыми список шаблонов имен узлов со следующим синтаксисом: каждый шаблон должен разделяться на части по символу ., и каждая часть должна представлять собой:

  1. литеральное доменное имя, состоящее из одной или нескольких букв ASCII, цифр, дефисов или символов подчеркивания (которые, строго говоря, не должны быть частью имени узла, но иногда используются); литеральное доменное имя соответствует только себе;

  2. символы **, которые соответствуют нулю или любому числу компонентов доменного имени;

  3. символ *, который соответствует любому компоненту доменного имени.

При сопоставлении имени узла со списком шаблонов в одной из этих переменных оно разделяется по символу . на компоненты, и полученная последовательность слов сопоставляется с шаблоном: литеральному шаблону соответствует ровно один компонент имени узла с соответствующим значением; шаблону * соответствует ровно один компонент имени узла с любым значением; шаблону ** соответствует любое количество компонентов имени узла. Пример:

  • ** соответствует любому имени узла.

  • **.org соответствует любому имени узла в домене верхнего уровня .org.

  • example.com соответствует только имени узла example.com.

  • *.example.com соответствует api.example.com, но не example.com или v1.api.example.com

  • **.example.com соответствует любому домену в example.com, включая собственно example.com, api.example.com и v1.api.example.com.