Network Options

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_PATHSSL_CERT_DIRSSL_CERT_FILE 来覆盖,在这种情况下,此函数将始终返回设置的这三个变量中第一个的值(无论路径是否存在)。如果 JULIA_SSL_CA_ROOTS_PATH 被设置为空字符串,则忽略其他变量(就像未设置一样);如果其他变量被设置为空字符串,则它们的行为就像未设置一样。

source
NetworkOptions.ca_roots_pathFunction
ca_roots_path() :: String

ca_roots_path() 函数类似于 ca_roots() 函数,除了它始终返回一个指向 PEM 编码的证书颁发机构根证书的文件或目录的路径。当在像 Windows 或 macOS 这样的系统上调用时,由于系统根证书未存储在文件系统中,它当前将返回与 Julia 捆绑的根证书集的路径。(将来,此函数可能会从系统中提取根证书并将其保存到一个文件中,该文件的路径将被返回。)

如果可以配置使用 TLS 的库以使用系统证书,通常是更可取的:即,使用返回 nothingca_roots() 来指示应使用系统证书更好。ca_roots_path() 函数应仅在配置 需要 指向根证书的文件或目录的库时使用。

ca_roots_path() 返回的默认值可以通过设置 JULIA_SSL_CA_ROOTS_PATHSSL_CERT_DIRSSL_CERT_FILE 环境变量来覆盖,在这种情况下,此函数将始终返回第一个被设置的变量的值(无论路径是否存在)。如果 JULIA_SSL_CA_ROOTS_PATH 被设置为空字符串,则忽略其他变量(就像未设置一样);如果其他变量被设置为空字符串,则它们的行为就像未设置一样。

source
NetworkOptions.ssh_dirFunction
ssh_dir() :: String

ssh_dir() 函数返回 ssh 程序存放/查找配置文件的目录位置。默认情况下,这是 ~/.ssh,但可以通过设置环境变量 SSH_DIR 来覆盖。

source
NetworkOptions.ssh_key_passFunction
ssh_key_pass() :: String

ssh_key_pass() 函数返回环境变量 SSH_KEY_PASS 的值(如果已设置),如果未设置则返回 nothing。将来,这可能能够通过其他方式找到密码,例如安全系统存储,因此需要密码以解密 SSH 私钥的包应该使用此 API,而不是直接检查环境变量,以便在添加时自动获得此类功能。

source
NetworkOptions.ssh_key_nameFunction
ssh_key_name() :: String

ssh_key_name() 函数返回 SSH 在建立连接时应使用的密钥文件的基本名称。通常没有理由直接调用此函数,库通常应使用 ssh_key_pathssh_pub_key_path 函数来获取完整路径。如果环境变量 SSH_KEY_NAME 被设置,则此函数返回该值;否则默认返回 id_rsa

source
NetworkOptions.ssh_key_pathFunction
ssh_key_path() :: String

ssh_key_path() 函数返回应用于 SSH 连接的 SSH 私钥文件的路径。如果设置了 SSH_KEY_PATH 环境变量,则返回该值。否则,它默认返回

joinpath(ssh_dir(), ssh_key_name())

这个默认值又依赖于 SSH_DIRSSH_KEY_NAME 环境变量。

source
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_DIRSSH_KEY_NAME 环境变量。

source
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.comgitlab.com 的已知主机密钥)。然而,如果环境变量 SSH_KNOWN_HOSTS_FILES 被设置,则其值会根据 : 字符(在 Windows 上为 ;)拆分为路径,并返回这个路径向量。如果这个向量的任何组件为空,则会扩展为默认的已知主机路径。

使用 ssh_known_hosts_files() 的包理想情况下应通过比较主机名和密钥类型来查找匹配条目,考虑到任何匹配文件中的第一个条目被视为主机的确定身份。如果调用者无法比较密钥类型(例如,因为它已被哈希),则必须通过在每个文件中查找主机的所有匹配条目来近似上述算法:如果一个文件中有任何主机的条目,则其中一个必须匹配;如果在早期文件中没有该主机的条目,调用者应仅继续搜索进一步的已知主机文件。

source
NetworkOptions.ssh_known_hosts_fileFunction
ssh_known_hosts_file() :: String

ssh_known_hosts_file() 函数返回一个 SSH 已知主机文件的单一路径,该文件在建立 SSH 连接的远程服务器身份时应使用。它返回 ssh_known_hosts_files 返回的第一个实际存在的路径。可以查看多个已知主机文件的调用者应使用 ssh_known_hosts_files,并在该函数文档中描述的所有返回文件中查找主机匹配。

source
NetworkOptions.verify_hostFunction
verify_host(url::AbstractString, [transport::AbstractString]) :: Bool

verify_host 函数告诉调用者在通过安全传输(如 TLS 或 SSH)进行通信时,是否应该验证主机的身份。url 参数可以是:

  1. proto:// 开头的正确 URL
  2. ssh 风格的裸主机名或以 user@ 为前缀的主机名
  3. 如上所述的 scp 风格的主机,后跟 : 和路径位置

在每种情况下,主机名部分被解析出来,是否验证的决定仅基于主机名,而不是输入 URL 的其他内容。特别是,URL 的协议并不重要(更多内容见下文)。

transport 参数指示查询所涉及的传输类型。目前已知的值为 SSL/ssl(别名 TLS/tls)和 SSH/ssh。如果省略 transport,查询将仅在主机名不应被验证时返回 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.comv1.api.example.com
  • **.example.com 匹配 example.com 下的任何域,包括 example.com 本身、api.example.comv1.api.example.com

```

source