網路選項

NetworkOptions.ca_roots函式
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 設定為空字串,則其他變數將會被忽略(如同未設定);如果其他變數設定為空字串,它們的行為就像未設定一樣。

NetworkOptions.ca_roots_path函數
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 設定為空字串,則會忽略其他變數(如同未設定);如果其他變數設定為空字串,則它們的行為如同未設定。

NetworkOptions.ssh_dir函數
ssh_dir() :: String

ssh_dir() 函數傳回 ssh 程式保留/尋找組態檔案的目錄位置。預設為 ~/.ssh,但可以透過設定環境變數 SSH_DIR 來覆寫。

NetworkOptions.ssh_key_pass函數
ssh_key_pass() :: String

ssh_key_pass() 函數傳回環境變數 SSH_KEY_PASS 的值(如果已設定)或 nothing(如果未設定)。未來,它可能能夠透過其他方式(例如安全的系統儲存)來尋找密碼,因此需要密碼來解密 SSH 私密金鑰的套件應使用此 API,而不是直接檢查環境變數,以便在新增這些功能時自動獲得這些功能。

NetworkOptions.ssh_key_name函數
ssh_key_name() :: String

ssh_key_name() 函數傳回 SSH 在建立連線時應使用的金鑰檔案的基本名稱。通常沒有理由直接呼叫此函數,而且函式庫通常應使用 ssh_key_pathssh_pub_key_path 函數來取得完整路徑。如果環境變數 SSH_KEY_NAME 已設定,則此函數會傳回該變數;否則,它會預設傳回 id_rsa

NetworkOptions.ssh_key_path函數
ssh_key_path() :: String

ssh_key_path() 函數傳回應用於 SSH 連線的 SSH 私密金鑰檔案路徑。如果已設定 SSH_KEY_PATH 環境變數,則它會傳回該值。否則,它會預設傳回

joinpath(ssh_dir(), ssh_key_name())

此預設值反過來取決於 SSH_DIRSSH_KEY_NAME 環境變數。

NetworkOptions.ssh_pub_key_path函數
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 環境變數。

NetworkOptions.ssh_known_hosts_files函數
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() 的套件應透過比較主機名稱和金鑰類型來尋找相符的項目,並將任何檔案中第一個相符的項目視為主機的明確身分。如果呼叫者無法比較金鑰類型(例如因為已雜湊),則必須透過在每個檔案中尋找主機的所有相符項目來近似上述演算法:如果某個檔案有任何主機項目,則其中一個項目必定相符;呼叫者只有在之前檔案中沒有問題主機的任何項目時,才應繼續搜尋更多已知主機檔案。

NetworkOptions.ssh_known_hosts_file函式
ssh_known_hosts_file() :: String

ssh_known_hosts_file() 函式傳回 SSH 已知主機檔案的單一路徑,應在建立 SSH 連線的遠端伺服器身分時使用。它傳回 ssh_known_hosts_files 傳回的第一個實際存在的路徑。能夠在多個已知主機檔案中搜尋的呼叫者應改用 ssh_known_hosts_files,並在所有傳回的檔案中尋找主機相符項,如該函式的文件所述。

NetworkOptions.verify_host函式
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.comv1.api.example.com
  • **.example.com 會比對 example.com 底下的任何網域,包括 example.com 本身、api.example.comv1.api.example.com