Network Options
NetworkOptions.ca_roots
— Functionca_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_path
— Functionca_roots_path() :: String
ca_roots_path()
函数类似于 ca_roots()
函数,除了它始终返回一个指向 PEM 编码的证书颁发机构根证书的文件或目录的路径。当在像 Windows 或 macOS 这样的系统上调用时,由于系统根证书未存储在文件系统中,它当前将返回与 Julia 捆绑的根证书集的路径。(将来,此函数可能会从系统中提取根证书并将其保存到一个文件中,该文件的路径将被返回。)
如果可以配置使用 TLS 的库以使用系统证书,通常是更可取的:即,使用返回 nothing
的 ca_roots()
来指示应使用系统证书更好。ca_roots_path()
函数应仅在配置 需要 指向根证书的文件或目录的库时使用。
ca_roots_path()
返回的默认值可以通过设置 JULIA_SSL_CA_ROOTS_PATH
、SSL_CERT_DIR
或 SSL_CERT_FILE
环境变量来覆盖,在这种情况下,此函数将始终返回第一个被设置的变量的值(无论路径是否存在)。如果 JULIA_SSL_CA_ROOTS_PATH
被设置为空字符串,则忽略其他变量(就像未设置一样);如果其他变量被设置为空字符串,则它们的行为就像未设置一样。
NetworkOptions.ssh_dir
— Functionssh_dir() :: String
ssh_dir()
函数返回 ssh
程序存放/查找配置文件的目录位置。默认情况下,这是 ~/.ssh
,但可以通过设置环境变量 SSH_DIR
来覆盖。
NetworkOptions.ssh_key_pass
— Functionssh_key_pass() :: String
ssh_key_pass()
函数返回环境变量 SSH_KEY_PASS
的值(如果已设置),如果未设置则返回 nothing
。将来,这可能能够通过其他方式找到密码,例如安全系统存储,因此需要密码以解密 SSH 私钥的包应该使用此 API,而不是直接检查环境变量,以便在添加时自动获得此类功能。
NetworkOptions.ssh_key_name
— Functionssh_key_name() :: String
ssh_key_name()
函数返回 SSH 在建立连接时应使用的密钥文件的基本名称。通常没有理由直接调用此函数,库通常应使用 ssh_key_path
和 ssh_pub_key_path
函数来获取完整路径。如果环境变量 SSH_KEY_NAME
被设置,则此函数返回该值;否则默认返回 id_rsa
。
NetworkOptions.ssh_key_path
— Functionssh_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_path
— Functionssh_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_files
— Functionssh_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_file
— Functionssh_known_hosts_file() :: String
ssh_known_hosts_file()
函数返回一个 SSH 已知主机文件的单一路径,该文件在建立 SSH 连接的远程服务器身份时应使用。它返回 ssh_known_hosts_files
返回的第一个实际存在的路径。可以查看多个已知主机文件的调用者应使用 ssh_known_hosts_files
,并在该函数文档中描述的所有返回文件中查找主机匹配。
NetworkOptions.verify_host
— Functionverify_host(url::AbstractString, [transport::AbstractString]) :: Bool
verify_host
函数告诉调用者在通过安全传输(如 TLS 或 SSH)进行通信时,是否应该验证主机的身份。url
参数可以是:
- 以
proto://
开头的正确 URL ssh
风格的裸主机名或以user@
为前缀的主机名- 如上所述的
scp
风格的主机,后跟:
和路径位置
在每种情况下,主机名部分被解析出来,是否验证的决定仅基于主机名,而不是输入 URL 的其他内容。特别是,URL 的协议并不重要(更多内容见下文)。
transport
参数指示查询所涉及的传输类型。目前已知的值为 SSL
/ssl
(别名 TLS
/tls
)和 SSH
/ssh
。如果省略 transport
,查询将仅在主机名不应被验证时返回 true
,而与传输无关。
主机名与相关环境变量中的主机模式进行匹配,具体取决于是否提供 transport
及其值:
JULIA_NO_VERIFY_HOSTS
— 不应验证的主机,适用于任何传输JULIA_SSL_NO_VERIFY_HOSTS
— 不应验证的主机,适用于 SSL/TLSJULIA_SSH_NO_VERIFY_HOSTS
— 不应验证的主机,适用于 SSHJULIA_ALWAYS_VERIFY_HOSTS
— 应始终验证的主机
这些变量的值是一个以逗号分隔的主机名模式列表,具有以下语法 — 每个模式在 .
上拆分为部分,每部分必须是:
- 由一个或多个 ASCII 字母、数字、连字符或下划线组成的字面域名组件(技术上不属于合法主机名的一部分,但有时使用)。字面域名组件仅匹配其自身。
**
,匹配零个或多个域名组件。*
,匹配任何一个域名组件。
在将主机名与这些变量中的模式列表进行匹配时,主机名在 .
上拆分为组件,该单词序列与模式进行匹配:字面模式精确匹配一个具有该值的主机名组件;*
模式精确匹配一个具有任何值的主机名组件;**
模式匹配任意数量的主机名组件。例如:
**
匹配任何主机名**.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
```