<-
Apache > HTTP 伺服器 > 文件 > 版本 2.4 > 模組

Apache 模組 mod_ssl

可用語言:  en  |  fr 

說明使用安全通訊巢層 (SSL) 和傳輸層安全性 (TLS) 協定的強式密碼
狀態擴充
模組識別項ssl_module
原始檔mod_ssl.c

摘要

此模組為 Apache HTTP 伺服器提供 SSL v3 及 TLS v1.x 支援。不再支援 SSL v2。

此模組依賴 OpenSSL 來提供密碼引擎。

SSL 文件 中提供了更多詳細資料、討論和範例。

Support Apache!

主題

指令

問題修正清單

另請參閱

top

環境變數

這個模組可以配置成提供數項 SSL 資訊,作為 SSI 和 CGI 名稱空間的額外環境變數。除了總是定義的 HTTPSSSL_TLS_SNI 之外,此資訊並非預設提供,原因是效能考量。(詳見下面的 SSLOptions StdEnvVars)產生的變數會列在以下表格中。為了向後相容,此資訊也可以使用不同的名稱取得。請參閱 相容性 章節,以取得相容性變數的詳細資料。

變數名稱 值類型 說明
HTTPS 旗標 正在使用 HTTPS。
SSL_PROTOCOL 字串 SSL 協定版本 (SSLv3、TLSv1、TLSv1.1、TLSv1.2)
SSL_SESSION_ID 字串 以十六進位編碼的 SSL 會話 ID
SSL_SESSION_RESUMED 字串 初始的 SSL 會話或已恢復的 SSL 會話。注意:如果正在使用 HTTP KeepAlive,多個要求可能會使用同一個(初始的或已恢復的)SSL 會話。
SSL_SECURE_RENEG 字串 如果支援安全重新協商,則為 true,否則為 false
SSL_CIPHER 字串 密碼規格名稱
SSL_CIPHER_EXPORT 字串 如果密碼是外銷用密碼,則為 true
SSL_CIPHER_USEKEYSIZE 數字 密碼位元數(實際使用中)
SSL_CIPHER_ALGKEYSIZE 數字 密碼位元數(可能)
SSL_COMPRESS_METHOD 字串 協商的 SSL 壓縮方法
SSL_VERSION_INTERFACE 字串 mod_ssl 程式版本
SSL_VERSION_LIBRARY 字串 OpenSSL 程式版本
SSL_CLIENT_M_VERSION 字串 用戶端憑證的版本
SSL_CLIENT_M_SERIAL 字串 用戶端憑證的序號
SSL_CLIENT_S_DN 字串 用戶端憑證的主體 DN
SSL_CLIENT_S_DN_x509 字串 用戶端主體 DN 的組成部分
SSL_CLIENT_SAN_Email_n 字串 用戶端憑證的主體備用名稱延伸項目類型為 rfc822Name
SSL_CLIENT_SAN_DNS_n 字串 類型為 dNSName 的用戶端憑證 subjectAltName 延伸項目
SSL_CLIENT_SAN_OTHER_msUPN_n 字串 類型為其他名稱、Microsoft 用戶主體名稱形式的用戶端憑證 subjectAltName 延伸項目(OID:1.3.6.1.4.1.311.20.2.3)
SSL_CLIENT_I_DN 字串 用戶端憑證的發行者 DN
SSL_CLIENT_I_DN_x509 字串 用戶端發行者 DN 組成部分
SSL_CLIENT_V_START 字串 用戶端憑證有效期間(開始時間)
SSL_CLIENT_V_END 字串 用戶端憑證有效期間(結束時間)
SSL_CLIENT_V_REMAIN 字串 用戶端憑證過期剩餘天數
SSL_CLIENT_A_SIG 字串 用戶端憑證簽章演算法
SSL_CLIENT_A_KEY 字串 用戶端憑證公開金鑰演算法
SSL_CLIENT_CERT 字串 PEM 編碼用戶端憑證
SSL_CLIENT_CERT_CHAIN_n 字串 用戶端憑證鏈中的 PEM 編碼憑證
SSL_CLIENT_CERT_RFC4523_CEA 字串 憑證的序號和發行者。格式與 RFC4523 中的 CertificateExactAssertion 相符
SSL_CLIENT_VERIFY 字串 NONESUCCESSGENEROUSFAILED:原因
SSL_SERVER_M_VERSION 字串 伺服器憑證的版本
SSL_SERVER_M_SERIAL 字串 伺服器憑證的序號
SSL_SERVER_S_DN 字串 伺服器憑證的主體 DN
SSL_SERVER_SAN_Email_n 字串 類型為 rfc822Name 的伺服器憑證 subjectAltName 延伸項目
SSL_SERVER_SAN_DNS_n 字串 類型為 dNSName 的伺服器憑證 subjectAltName 延伸項目
SSL_SERVER_SAN_OTHER_dnsSRV_n 字串 類型為其他名稱、SRVName 形式的伺服器憑證 subjectAltName 延伸項目(OID:1.3.6.1.5.5.7.8.7,RFC 4985)
SSL_SERVER_S_DN_x509 字串 伺服器主體 DN 組成部分
SSL_SERVER_I_DN 字串 伺服器憑證的發行者 DN
SSL_SERVER_I_DN_x509 字串 伺服器發行者 DN 組成部分
SSL_SERVER_V_START 字串 伺服器憑證有效期間(開始時間)
SSL_SERVER_V_END 字串 伺服器憑證有效期間(結束時間)
SSL_SERVER_A_SIG 字串 伺服器憑證簽章演算法
SSL_SERVER_A_KEY 字串 伺服器憑證公開金鑰演算法
SSL_SERVER_CERT 字串 PEM 編碼伺服器憑證
SSL_SRP_USER 字串 SRP 用戶名稱
SSL_SRP_USERINFO 字串 SRP 用戶資訊
SSL_TLS_SNI 字串 SNI TLS 延伸項目內容(如果在 ClientHello 中提供)

x509 指定 X.509 DN 的組成部分;C、ST、L、O、OU、CN、T、I、G、S、D、UID、Email 之一。在 httpd 2.2.0 及更新版本中,x509 也可能包含數字 _n 字尾。如果相關的 DN 包含相同名稱的多個屬性,此字尾可用作從 0 起算的索引,以選取特定屬性。舉例來說,當伺服器憑證主體 DN 包含兩個 OU 屬性時,SSL_SERVER_S_DN_OU_0SSL_SERVER_S_DN_OU_1 可用來分別參照每個屬性。沒有 _n 字尾的變數名稱等同於具有 _0 字尾的名稱;第一個 (或唯一一個) 屬性。在使用 StdEnvVars 選項 SSLOptions 指令 populate 環境表格時,任何 DN 的第一個 (或唯一一個) 屬性只會在沒有字尾的名稱下加入;亦即不會加入 _0 字尾的項目。

在 httpd 2.4.32 及更新版本中,可選擇的 _RAW 字尾可加入 DN 組成部分中的 x509,以禁止將屬性值轉換為 UTF-8。這必須置於索引字尾 (如果有) 之後。舉例來說,可以使用 SSL_SERVER_S_DN_OU_RAWSSL_SERVER_S_DN_OU_0_RAW

*_DN 變數的格式已在 Apache HTTPD 2.3.11 中變更。有關詳細資料,請參閱 SSLOptionsLegacyDNStringFormat 選項。

SSL_CLIENT_V_REMAIN 僅在 2.1 及更新版本中提供。

SSLRequire 表達式或自訂記錄格式中,也可以使用許多額外的環境變數

HTTP_USER_AGENT        PATH_INFO             AUTH_TYPE
HTTP_REFERER           QUERY_STRING          SERVER_SOFTWARE
HTTP_COOKIE            REMOTE_HOST           API_VERSION
HTTP_FORWARDED         REMOTE_IDENT          TIME_YEAR
HTTP_HOST              IS_SUBREQ             TIME_MON
HTTP_PROXY_CONNECTION  DOCUMENT_ROOT         TIME_DAY
HTTP_ACCEPT            SERVER_ADMIN          TIME_HOUR
THE_REQUEST            SERVER_NAME           TIME_MIN
REQUEST_FILENAME       SERVER_PORT           TIME_SEC
REQUEST_METHOD         SERVER_PROTOCOL       TIME_WDAY
REQUEST_SCHEME         REMOTE_ADDR           TIME
REQUEST_URI            REMOTE_USER

在這些情境下,也可以使用兩種特殊格式

ENV:變數名稱
這將擴充成標準環境變數 變數名稱
HTTP:標頭名稱
這將擴充成名稱為 標頭名稱 要求標題的值。
top

自訂記錄格式

mod_ssl 內建於 Apache 中或至少已載入 (在 DSO 情境下),mod_log_config自訂記錄格式 還有額外的函數。首先,有額外的 ``%{變數名稱}x'' 擴充格式函數,可用於擴充任何模組提供的變數,特別是上方表格中 mod_ssl 所提供的函數。

為了向後相容,另外提供特殊 ``%{名稱}c'' 密碼編譯格式函數。有關這個函數的資訊可在 相容性 章節找到。

範例

CustomLog "logs/ssl_request_log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

這些格式甚至可以在未設定 SSLOptions 指令的 StdEnvVars 選項時也能運作。

top

請求備註

mod_ssl 為請求設定「備註」,可以在 mod_log_config 中使用 %{名稱}n 格式字串於記錄中使用。

支援的備註如下

ssl-access-forbidden
如果拒絕存取,原因是具有 SSLRequireSSLRequireSSL 指令,此註記將設為值 1
ssl-secure-reneg
如果 mod_ssl 建構於支援安全重新協商擴充功能的 OpenSSL 版本上,此註記將設為值 1,前提是 SSL 用於目前的連線,且客戶端也支援安全重新協商擴充功能。如果客戶端不支援安全重新協商擴充功能,此註記將設為值 0。如果 mod_ssl 未建構於支援安全重新協商的 OpenSSL 版本上,或 SSL 未使用於目前的連線,則此註記不會設定。
top

表示式剖析器擴充功能

mod_ssl 內建於 Apache 或至少載入 (於 DSO 情況中) 時,任何 mod_ssl 所提供的 變數 都可以在 ap_expr 表示式剖析器 的表示式中使用。可以搭配語法 ``%{變數名稱}'' 來參照這些變數。自版本 2.4.18 起,也可以使用 mod_rewrite 格式語法 ``%{SSL:變數名稱}'' 或函式格式語法 ``ssl(變數名稱)''。

範例 (使用 mod_headers)

Header set X-SSL-PROTOCOL "expr=%{SSL_PROTOCOL}"
Header set X-SSL-CIPHER "expr=%{SSL:SSL_CIPHER}"

即使不設定 SSLOptions 指令的 StdEnvVars 選項,此功能也能運作。

top

與 Require 搭配使用的授權提供者

mod_ssl 提供少數與 mod_authz_coreRequire 指令搭配使用的驗證提供者。

Require ssl

在連線未使用 SSL 加密時,ssl 提供者會拒絕存取。這與 SSLRequireSSL 指令類似。

Require ssl

Require ssl-verify-client

如果使用者已使用有效的客戶端憑證通過驗證,ssl 提供者允許存取。這只在 SSLVerifyClient optional 有效時才實用。

下列範例會在使用者使用客戶端憑證或使用使用者名稱與密碼通過驗證時,允許存取。

Require ssl-verify-client
Require valid-user
top

SSLCACertificateFile 指令

說明串接式 PEM 編碼 CA 憑證檔案,給客戶端驗證用
語法SSLCACertificateFile 檔案路徑
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

本指令設定可組裝您處理的客戶端憑證授權中心 (CA) 憑證的 [一體適用] 檔案。這些憑證用於客戶端驗證。此類檔案只是各種 PEM 編碼憑證檔案順序結合而成,依優先順序排列。這可以與 SSLCACertificatePath 另選使用,或一併使用。

範例

SSLCACertificateFile "/usr/local/apache2/conf/ssl.crt/ca-bundle-client.crt"
top

SSLCACertificatePath 指令

說明用於客戶端認證的 PEM 編碼 CA 憑證目錄
語法SSLCACertificatePath directory-path
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

本指令設定您用於儲存和您處理的客戶端的憑證授權中心 (CA) 憑證的目錄。這些憑證用於在客戶端驗證上驗證客戶端憑證。

此目錄中的檔案必須經過 PEM 編碼,且透過雜湊檔名存取。因此,您通常無法僅放置憑證檔案:也必須建立名為 雜湊值.N 的符號連結。您應隨時確定此目錄包含適當的符號連結。

範例

SSLCACertificatePath "/usr/local/apache2/conf/ssl.crt/"
top

SSLCADNRequestFile 指令

說明用於定義可接受 CA 名稱的 PEM 編碼 CA 憑證連接檔案
語法SSLCADNRequestFile 檔案路徑
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

當 mod_ssl 要求客戶端憑證時,可接受的憑證授權中心名稱清單將於 SSL 交握中傳送至客戶端。客戶端可以使用這些 CA 名稱,從其可取得的憑證中選取適當的客戶端憑證。

如果未提供 SSLCADNRequestPathSSLCADNRequestFile 指令,則傳送給客戶端的可接受 CA 名稱會是 SSLCACertificateFileSSLCACertificatePath 指令所提供的所有 CA 憑證的名稱。換句話說,就是實際用於驗證客戶端憑證的 CA 名稱。

在某些狀況下,傳送與實際用於驗證客戶端憑證的 CA 設定不同的可接受 CA 名稱清單會很有用,例如客戶端憑證是由中間 CA 所簽署。此類案例可以使用 SSLCADNRequestPath 和/或 SSLCADNRequestFile;可接受的 CA 名稱會從這對指令所指定的目錄和/或檔案中的完整憑證集合取得。

SSLCADNRequestFile 必須指定包含 PEM 編碼 CA 憑證連接的 [一體適用] 檔案。

範例

SSLCADNRequestFile "/usr/local/apache2/conf/ca-names.crt"
top

SSLCADNRequestPath 指令

說明用於定義可接受 CA 名稱的 PEM 編碼 CA 憑證目錄
語法SSLCADNRequestPath directory-path
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

您可以使用此選用指令指定要求用戶端憑證時將傳送給用戶端之可接受 CA 名稱集合。請參閱SSLCADNRequestFile 指令以了解更多詳細資訊。

此目錄中的檔案必須經過 PEM 編碼,且透過雜湊檔名存取。因此,您通常無法僅放置憑證檔案:也必須建立名為 雜湊值.N 的符號連結。您應隨時確定此目錄包含適當的符號連結。

範例

SSLCADNRequestPath "/usr/local/apache2/conf/ca-names.crt/"
top

SSLCARevocationCheck 指令

說明啟用基於 CRL 的廢止檢查
語法SSLCARevocationCheck chain|leaf|none [旗標 ...]
預設SSLCARevocationCheck none
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性httpd 2.4.21 或更新版本提供之旗標(選用)

啟用憑證吊銷清單 (CRL) 檢查。至少必須設定 SSLCARevocationFileSSLCARevocationPath 其中之一。設定為 chain(建議設定)時,CRL 檢查將套用至鏈中所有憑證,而設定為 leaf 則視為將檢查限制在終端實體憑證。

可用的旗標

  • no_crl_for_cert_ok

    在 mod_ssl 2.3.15 版本之前,若在設定 SSLCARevocationFileSSLCARevocationPath 的任何位置中找不到已檢查憑證的 CRL,CRL 檢查也仍然會成功。

    隨著 SSLCARevocationFile 的推出,此行為已變更:預設值為 chainleaf,則驗證必須存在 CRL 才能成功,否則會傳回 「無法取得憑證 CRL」 錯誤。

    旗標 no_crl_for_cert_ok 可用來回復之前的行為。

範例

SSLCARevocationCheck chain

與 2.2 版本相容性

SSLCARevocationCheck chain no_crl_for_cert_ok
top

SSLCARevocationFile 指令

說明用於用戶端身分驗證之串接 PEM 編碼 CA CRL 的檔案
語法SSLCARevocationFile file-path
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

此指令設定一體適用檔案,您可以在其中組合您處理其用戶端的憑證吊銷清單 (CRL) 和憑證授權單位 (CA)。這些用於用戶端身分驗證。此類檔案只是單純串接各種 PEM 編碼 CRL 檔案,並依照優先順序排列。這個指令可以用來作為 SSLCARevocationPath 的替代方式,或與其合併使用。

範例

SSLCARevocationFile "/usr/local/apache2/conf/ssl.crl/ca-bundle-client.crl"
top

SSLCARevocationPath 指令

說明用於用戶端身分驗證之 PEM 編碼 CA CRL 的目錄
語法SSLCARevocationPath directory-path
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

此指令設定目錄,您可將您處理其用戶端的憑證授權單位 (CA) 之憑證吊銷清單 (CRL) 儲存在其中。這些用於廢止用戶端身分驗證中的用戶端憑證。

此目錄中的檔案必須為 PEM 編碼,並透過雜湊檔案名稱存取。因此,通常您不僅必須將 CRL 檔案放在那裡。此外,您還必須建立名為 hash-value.rN 的符號連結。而且您應始終確保此目錄包含適當的符號連結。

範例

SSLCARevocationPath "/usr/local/apache2/conf/ssl.crl/"
top

SSLCertificateChainFile 指令

說明PEM 編碼伺服器 CA 憑證檔案
語法SSLCertificateChainFile file-path
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

SSLCertificateChainFile 已標示為不建議使用

在 2.4.8 版中,SSLCertificateChainFile 已過時,當時 SSLCertificateFile 已擴充套件,也從伺服器憑證檔案載入中間 CA 憑證。

此指令設定選用的 all-in-one 檔案,您可以在其中組合由認證機構 (CA) 的憑證,這些憑證組成伺服器憑證的憑證鏈。這從伺服器憑證的發行 CA 憑證開始,並可延伸到根 CA 憑證。此類檔案只是各種 PEM 編碼 CA 憑證檔案的串接,通常順著憑證鏈順序排列。

應將此用於 SSLCACertificatePath 的替代選項和/或額外選項,以明確建構伺服器憑證鏈,除了伺服器憑證外,也會將該憑證鏈傳送給瀏覽器。這對於避免在使用用戶端驗證時與 CA 憑證產生衝突特別有用。因為即使將伺服器憑證鏈的 CA 憑證放入 SSLCACertificatePath,對憑證鏈建構有相同的作用,但會產生一個副作用,也就是由該相同 CA 憑證發行的用戶端憑證也會在用戶端驗證中被接受。

但請小心:提供憑證鏈僅在您使用 單一 RSA DSA 為基礎的伺服器憑證時才有效。如果您使用配對的 RSA+DSA 憑證,只有當兩個憑證實際使用 相同 憑證鏈時,這才會奏效。否則,瀏覽器會在這種情況下感到困惑。

範例

SSLCertificateChainFile "/usr/local/apache2/conf/ssl.crt/ca.crt"
top

SSLCertificateFile 指令

說明伺服器 PEM 編碼的 X.509 憑證資料檔案或權杖識別碼
語法SSLCertificateFile file-path|certid
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性certid 可在 2.4.42 和更新版本中使用。

此指令指向 PEM 格式驗證資料或透過已設定加密令牌的驗證識別碼檔案。如果使用 PEM 檔案,至少檔案必須包含末端實體 (葉子) 驗證。指令可使用多次 (參照不同檔案名稱),以支援多種伺服器驗證演算法,通常為 RSA、DSA 與 ECC。支援的演算法數量會根據 mod_ssl 使用的 OpenSSL 版本而定:版本 1.0.0 或更新版本,openssl list-public-key-algorithms 會輸出支援演算法的清單,也請參閱下方備註,瞭解 1.0.2 之前的 OpenSSL 版本限制和解決方法。

檔案也可能包含中間 CA 驗證,從葉子到根排序。此功能的版本相容性為 2.4.8 以上,而且使 SSLCertificateChainFile 過時了。執行 OpenSSL 1.0.2 或更新版本時,此功能會針對每張驗證設定中間 CA 鏈。

自訂 DH 參數和瞬時金鑰的 EC 曲線名稱,也能新增到使用 SSLCertificateFile 設定的第一個檔案結尾。此功能的版本相容性為 2.4.7 以上。這些參數可以透過 openssl dhparamopenssl ecparam 指令產生。參數能以原樣新增到第一個驗證檔案結尾。僅第一個檔案能用於自訂參數,因為這些參數會獨立套用驗證演算法類型。

最後,末端實體驗證的私密金鑰也能新增到驗證檔案,而不是使用個別 SSLCertificateKeyFile 指令。極度不建議這種做法。如果採用此做法,使用內嵌金鑰的驗證檔案就必須在使用個別金鑰檔案的驗證後設定。如果私密金鑰已加密,就會在啟動時強制顯示密碼詞對話方塊。

除了將驗證和私密金鑰儲存在檔案中,也可以使用驗證識別碼來識別儲存在令牌中的驗證。目前,僅 PKCS#11 URI 被承認為驗證識別碼,而且能與 OpenSSL pkcs11 引擎或提供者結合使用。如果省略 SSLCertificateKeyFile,就能透過 SSLCertificateFile 指定的個別識別碼載入驗證和私密金鑰。

大於 1024 位元的 DH 參數互通性

從版本 2.4.7 開始,mod_ssl 會使用標準化 DH 參數,質數長度為 2048、3072 和 4096 位元,額外的質數長度為 6144 和 8192,從版本 2.4.10 (來自RFC 3526) 開始,並根據憑證 RSA/DSA 金鑰的長度將它們交給用戶端。特別是使用 java 為基礎的用戶端 (Java 7 或更早版本),這可能會導致交握失敗 - 參閱常見解答,以解決此類問題。

在使用多個憑證和早於 1.0.2 的 OpenSSL 版本時的預設 DH 參數

在使用多個憑證來支援不同的驗證演算法 (例如 RSA、DSA,但主要為 ECC) 和早於 1.0.2 的 OpenSSL 時,建議透過將自訂 DH 參數新增至第一個憑證檔案 (如上所述),或依序配置SSLCertificateFile 指示,這樣可以將 RSA/DSA 憑證放在 ECC 之後,或兩者皆可執行。

這是由於舊版 OpenSSL 的限制,在交握時間 (此時必須將 DH 參數傳送給對等端) 時,它無法讓 Apache HTTP Server 判斷目前選取的憑證,而是始終提供最後配置的憑證。因此,伺服器可能會根據錯誤憑證金鑰的長度來選擇預設 DH 參數 (ECC 金鑰遠小於 RSA/DSA 金鑰,而且它們的長度與選擇 DH 質數無關)。

由於自訂 DH 參數始終優先於預設參數,因此,透過建立和配置自訂參數 (如上所述),即可避免此問題,進而使用自訂/適當的長度。

範例

# Example using a PEM-encoded file.
SSLCertificateFile "/usr/local/apache2/conf/ssl.crt/server.crt"
# Example use of a certificate and private key from a PKCS#11 token:
SSLCertificateFile "pkcs11:token=My%20Token%20Name;id=45"
top

SSLCertificateKeyFile 指令

說明伺服器 PEM 編碼的私人金鑰檔案
語法SSLCertificateKeyFile file-path|keyid
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性keyid 可用於 2.4.42 及更新版本。

此指示指向伺服器的 PEM 編碼私人金鑰檔案,或者透過已配置的密碼遺失權杖指向金鑰 ID。如果所含的私人金鑰經過加密,則在啟動時會強制要求輸入密碼。

此指示可以多次使用 (參照不同的檔案名稱) 來支援伺服器驗證的各種演算法。每個 SSLCertificateKeyFile 指示都必須有相符的 SSLCertificateFile 指示。

私人金鑰也可以與 SSLCertificateFile 中所提供的檔案中的憑證合併,但不建議這樣做。如果確實使用這種方式,則使用此內嵌金鑰的憑證檔案必須在使用獨立金鑰檔案的憑證之後進行配置。

除了將私人金鑰儲存在檔案中,還可以透過金鑰識別碼來識別儲存在權杖中的私人金鑰。目前僅認可PKCS#11 URI作為私人金鑰識別碼,並且可以與 OpenSSL pkcs11 引擎或提供者結合使用。

範例

# To use a private key from a PEM-encoded file:
SSLCertificateKeyFile "/usr/local/apache2/conf/ssl.key/server.key"
# To use a private key from a PKCS#11 token:
SSLCertificateKeyFile "pkcs11:token=My%20Token%20Name;id=45"
top

SSLCipherSuite 指令

說明SSL 交握中可協商的密碼組
語法SSLCipherSuite [協議] 密碼規範
預設SSLCipherSuite 預設值(取決於 OpenSSL 版本)
內容伺服器設定、虛擬主機、目錄、.htaccess
覆寫AuthConfig
狀態擴充
模組mod_ssl

此複雜指令使用由冒號分隔、包含 OpenSSL 密碼規範的 密碼規範 字串,設定客戶端在 SSL 交握階段允許協商的密碼組。可選的協定規範子定義密碼組,以供特定 SSL 版本使用。可能的數值包括「SSL」,其中包含 TLSv1.2 及其之前所有 SSL 協定。

請注意,此指令可以在伺服器及目錄背景中使用。在伺服器背景中,當建立連線時套用到標準的 SSL 交握。在目錄背景中,會在讀取 HTTP 要求,但傳送 HTTP 回應之前,強制搭配重新設定密碼組的 SSL 重新協商。

如果 SSL 函式庫支援 TLSv1.3(OpenSSL 1.1.1 及更新版本),可以使用協定規範子定義「TLSv1.3」設定該協定的密碼組。由於 TLSv1.3 未提供重新協商,因此不允許在目錄背景中針對其指定密碼。

如需 TLSv1.3 密碼名稱清單,請參閱 OpenSSL 文件

密碼規範 中的 SSL 密碼規範由 4 個主要屬性加上一些額外的次要屬性組成

  • 金鑰交換演算法:
    RSA、Diffie-Hellman、橢圓曲線 Diffie-Hellman、安全遠端密碼
  • 驗證演算法:
    RSA、Diffie-Hellman、DSS、ECDSA,或無。
  • 密碼/加密演算法:
    AES、DES、3DES、RC4、RC2、IDEA,等等。
  • MAC 摘要演算法:
    MD5、SHA 或 SHA1、SHA256、SHA384。

SSL 密碼也可以是匯出密碼。不再支援 SSLv2 密碼。若要指定使用哪些密碼,可以一次指定所有密碼,或使用別名指定密碼的偏好順序(請參閱 表格 1)。實際可用的密碼和別名取決於使用的 openssl 版本。較新的 openssl 版本可能包含其他密碼。

標記 說明
金鑰交換演算法
kRSA RSA 金鑰交換
kDHr RSA 金鑰的 Diffie-Hellman 金鑰交換
kDHd DSA 金鑰的 Diffie-Hellman 金鑰交換
kEDH 短暫性(臨時金鑰)Diffie-Hellman 金鑰交換(無憑證)
kSRP 安全遠端密碼 (SRP) 金鑰交換
驗證演算法
aNULL 無驗證
aRSA RSA 驗證
aDSS DSS 驗證
aDH Diffie-Hellman 驗證
密碼編碼演算法
eNULL 無加密
NULL eNULL 別名
AES AES 加密
DES DES 加密
3DES 三重 DES 加密
RC4 RC4 加密
RC2 RC2 加密
IDEA IDEA 加密
MAC 摘要演算法:
MD5 MD5 雜湊函數
SHA1 SHA1 雜湊函數
SHA SHA1 的別名
SHA256 SHA256 雜湊函數
SHA384 SHA384 雜湊函數
別名
SSLv3 所有 SSL 版本 3.0 的加密
TLSv1 所有 TLS 版本 1.0 的加密
EXP 所有輸出加密
EXPORT40 所有僅具備 40 位元項輸出加密
EXPORT56 所有僅具備 56 位元項輸出加密
LOW 所有強度低的加密(無輸出加密,單一 DES)
MEDIUM 所有採用 128 位元項加密的加密
HIGH 所有採用三重 DES 的加密
RSA 所有採用 RSA 金鑰交換的加密
DH 所有採用 Diffie-Hellman 金鑰交換的加密
EDH 所有採用暫時 Diffie-Hellman 金鑰交換的加密
ECDH 橢圓曲線 Diffie-Hellman 金鑰交換
ADH 所有採用匿名 Diffie-Hellman 金鑰交換的加密
AECDH 所有採用匿名橢圓曲線 Diffie-Hellman 金鑰交換的加密
SRP 所有採用安全遠端密碼 (SRP) 金鑰交換的加密
DSS 所有採用 DSS 驗證的加密
ECDSA 所有採用 ECDSA 驗證的加密
aNULL 所有採用沒有驗證的加密

在這裡變得有趣的是,我們可以加入這些內容,以指定您想要使用的順序和加密。為了加快速度,某些加密群組也有別名(SSLv3、TLSv1、EXP、LOW、MEDIUM、HIGH)。這些標籤與字首結合後可用來形成加密規範。可用的字首為

  • none:將加密加入清單
  • +:將符合的加密移至清單中的目前位置
  • -:從清單中移除加密(之後可以再次加入)
  • !:完全從清單中移除加密(無法之後再次加入)

aNULLeNULLEXP 加密會始終停用

從版本 2.4.7 開始,空值和輸出的加密會始終停用,因為 mod_ssl 無條件將 !aNULL:!eNULL:!EXP 加到初始化的任何加密字串中。

觀察所有內容的較簡單方法是使用「openssl ciphers -v」指令,其提供一種建立正確密文規格字串的絕佳方式。預設密文規格字串取決於使用的 OpenSSL 函式庫版本。假設它是「RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5」,表示下列含義:在開始時放置 RC4-SHAAES128-SHA。我們執行此操作是因為這些密文在速度和安全性之間提供了良好的折衷。接著,包含高安全性與中安全性密文。最後,移除所有未通過身分驗證的密文,即針對 SSL,包括匿名 Diffie-Hellman 密文,以及將 MD5 用作雜湊演算法的所有密文,因為此演算法已證明不敷使用。

$ openssl ciphers -v 'RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5'
RC4-SHA                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=SHA1
AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
...                     ...               ...     ...           ...
SEED-SHA                SSLv3 Kx=RSA      Au=RSA  Enc=SEED(128) Mac=SHA1
PSK-RC4-SHA             SSLv3 Kx=PSK      Au=PSK  Enc=RC4(128)  Mac=SHA1
KRB5-RC4-SHA            SSLv3 Kx=KRB5     Au=KRB5 Enc=RC4(128)  Mac=SHA1

表 2 中提供了特定 RSA 和 DH 密文的完整清單 表 2

範例

SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
密文標籤 通訊協定 金鑰範例。 授權。 加密。 MAC 類型
RSA 密文
DES-CBC3-SHA SSLv3 RSA RSA 3DES(168) SHA1
IDEA-CBC-SHA SSLv3 RSA RSA IDEA(128) SHA1
RC4-SHA SSLv3 RSA RSA RC4(128) SHA1
RC4-MD5 SSLv3 RSA RSA RC4(128) MD5
DES-CBC-SHA SSLv3 RSA RSA DES(56) SHA1
EXP-DES-CBC-SHA SSLv3 RSA(512) RSA DES(40) SHA1 export
EXP-RC2-CBC-MD5 SSLv3 RSA(512) RSA RC2(40) MD5 export
EXP-RC4-MD5 SSLv3 RSA(512) RSA RC4(40) MD5 export
NULL-SHA SSLv3 RSA RSA SHA1
NULL-MD5 SSLv3 RSA RSA MD5
Diffie-Hellman 密文
ADH-DES-CBC3-SHA SSLv3 DH 3DES(168) SHA1
ADH-DES-CBC-SHA SSLv3 DH DES(56) SHA1
ADH-RC4-MD5 SSLv3 DH RC4(128) MD5
EDH-RSA-DES-CBC3-SHA SSLv3 DH RSA 3DES(168) SHA1
EDH-DSS-DES-CBC3-SHA SSLv3 DH DSS 3DES(168) SHA1
EDH-RSA-DES-CBC-SHA SSLv3 DH RSA DES(56) SHA1
EDH-DSS-DES-CBC-SHA SSLv3 DH DSS DES(56) SHA1
EXP-EDH-RSA-DES-CBC-SHA SSLv3 DH(512) RSA DES(40) SHA1 export
EXP-EDH-DSS-DES-CBC-SHA SSLv3 DH(512) DSS DES(40) SHA1 export
EXP-ADH-DES-CBC-SHA SSLv3 DH(512) DES(40) SHA1 export
EXP-ADH-RC4-MD5 SSLv3 DH(512) RC4(40) MD5 export
top

SSLCompression 指令

說明啟用 SSL 層級的壓縮
語法SSLCompression on|off
預設SSLCompression off
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性如果使用 OpenSSL 0.9.8 或更新版本,則在 httpd 2.4.3 和後來的版本中可用;如果使用 OpenSSL 1.0.0 或更新版本,則虛擬主機範圍可用。預設值在版本 2.4.3 中為 on

此指令允許在 SSL 層級啟用壓縮。

在大部分設定中,啟用壓縮會導致安全問題(所謂的 CRIME 攻擊)。

top

SSLCryptoDevice 指令

說明啟用加密硬體加速器的使用
語法SSLCryptoDevice 引擎
預設SSLCryptoDevice 內建
內容伺服器設定
狀態擴充
模組mod_ssl

此指令允許使用加密硬體加速器卡來卸載部分 SSL 處理負擔。此指令僅在 SSL 工具包建立時具有「引擎」支援的情況下才能使用;預設情況下,OpenSSL 0.9.7 和後來的版本具有「引擎」支援,必須使用 OpenSSL 0.9.6 的分別「-engine」版本。

若要瞭解支援哪些引擎名稱,請執行指令「openssl engine」。

範例

# For a Broadcom accelerator:
SSLCryptoDevice ubsec

如果沒有指定引擎、但使用 PKCS#11 URI 指定金鑰或憑證,OpenSSL 3.0 或更高版本會試圖從 OpenSSL 提供者載入金鑰和憑證。必須在 OpenSSL 設定檔中定義和設定要使用的 OpenSSL 提供者,並且必須支援 STORE 方法 以供 PKCS#11 URI 使用。

top

SSLEngine 指令

說明SSL 引擎操作切換
語法SSLEngine on|off|optional
預設SSLEngine off
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

此指令切換 SSL/TLS 協定引擎的使用。應在 <VirtualHost> 區段內使用此指令,為虛擬主機啟用 SSL/TLS。預設情況下,會為主要伺服器和所有已設定的虛擬主機停用 SSL/TLS 協定引擎。

範例

<VirtualHost _default_:443>
SSLEngine on
#...
</VirtualHost>

在 Apache 2.1 和更高版本中,SSLEngine 可設定為 optional。這會啟用對 RFC 2817 的支援,在 HTTP/1.1 中升級至 TLS。目前尚無任何瀏覽器支援 RFC 2817。

top

SSLFIPS 指令

說明SSL FIPS 模式切換
語法SSLFIPS on|off
預設SSLFIPS off
內容伺服器設定
狀態擴充
模組mod_ssl

此指令切換 SSL 函式庫 FIPS_mode 標誌的使用。必須在全域伺服器環境中設定,且不可設定為衝突的設定值(例如由 SSLFIPS on 設為 SSLFIPS off,或類似情況)。此模式會套用至所有 SSL 函式庫作業。

如果 httpd 是針對一個不支援 FIPS_mode 標誌的 SSL 函式庫編譯,則 SSLFIPS on 會失敗。請參閱 SSL 提供者函式庫的 FIPS 140-2 Security Policy 文件,以取得在受 FIPS 140-2 認可的操作模式下使用 mod_ssl 的特定需求;請注意,mod_ssl 本身未經驗證,但可能會說明它使用受 FIPS 140-2 驗證的加密模組,如果組件已組裝並且按照適用的安全政策指引進行操作。

top

SSLHonorCipherOrder 指令

說明優先使用伺服器密碼偏好的選項
語法SSLHonorCipherOrder on|off
預設SSLHonorCipherOrder off
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

在 SSLv3 或 TLSv1 交握過程中選擇密碼時,通常會使用用戶端的偏好。如果啟用此指令,則會使用伺服器的偏好。

範例

SSLHonorCipherOrder on
top

SSLInsecureRenegotiation 指令

說明啟用不安全重新協商支援的選項
語法SSLInsecureRenegotiation on|off
預設SSLInsecureRenegotiation off
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性適用於 httpd 2.2.15 和更高版本,如果使用 OpenSSL 0.9.8m 或更高版本

如同最初的規格,SSL 和 TLS 協定的所有版本(包括 TLS/1.2)在重新協商期間會容易遭受中間人攻擊(CVE-2009-3555)。此一漏洞允許攻擊者將有心人選定的純文字「加為前綴」加到網路伺服器所見的 HTTP 要求中。若客戶端與伺服器皆支援所開發的協定擴充功能,即可修正此漏洞。

如果 mod_ssl 已連結到 OpenSSL 版本 0.9.8m 以上,預設值僅支援具有新協定擴充支援能力的客戶端重新協商。如果啟用此指令,則可允許舊有(未修補)的客戶端重新協商,儘管如此並不安全。

安全警告

如果啟用此指令,SSL 連線會容易遭受如 CVE-2009-3555 所述的中間人前綴攻擊。

範例

SSLInsecureRenegotiation on

SSL_SECURE_RENEG 環境變數可用於 SSI 或 CGI 指令,用以確定特定 SSL 連線是否支援安全重新協商。

top

SSLOCSPDefaultResponder 指令

說明設定 OCSP 驗證的預設回應者 URI
語法SSLOCSPDefaultResponder uri
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

此選項設定要使用的預設 OCSP 回應者。如果未啟用 SSLOCSPOverrideResponder,只有在驗證的憑證中未指定回應者 URI 時,才會使用所提供的 URI。

top

SSLOCSPEnable 指令

說明啟用客戶端憑證鏈的 OCSP 驗證
語法SSLOCSPEnable on|leaf|off
預設SSLOCSPEnable off
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性模式 leaf 可用於 httpd 2.4.34 及更新版本

此選項會啟用客戶端憑證鏈的 OCSP 驗證。如果啟用此選項,在進行正常驗證(包括 CRL 檢查)後,將根據 OCSP 回應者驗證客戶端憑證鏈中的憑證。在模式「leaf」中,僅會驗證客戶端憑證本身。

所使用的 OCSP 回應者,可以從憑證本身擷取,或透過設定取得;請參閱 SSLOCSPDefaultResponderSSLOCSPOverrideResponder 指令。

範例

SSLVerifyClient on
SSLOCSPEnable on
SSLOCSPDefaultResponder "http://responder.example.com:8888/responder"
SSLOCSPOverrideResponder on
top

SSLOCSPNoverify 指令

說明略過 OCSP 回應者憑證驗證
語法SSLOCSPNoverify on|off
預設SSLOCSPNoverify off
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性可用於 httpd 2.4.26 以上版本,如果使用的是 OpenSSL 0.9.7 以上版本

略過 OCSP 回應者憑證驗證,在測試 OCSP 伺服器時最為有用。

top

SSLOCSPOverrideResponder 指令

說明強制使用 OCSP 驗證的預設回應者 URI
語法SSLOCSPOverrideResponder on|off
預設SSLOCSPOverrideResponder off
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

此選項強制使用設定好的預設 OCSP 回應器,以驗證 OCSP 憑證時使用,而不論已驗證的憑證是否參照 OCSP 回應器。

top

SSLOCSPProxyURL 指令

說明要對 OCSP 要求使用的 Proxy URL
語法SSLOCSPProxyURL 網址
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性可用於 httpd 2.4.19 及後續版本

此選項允許設定 HTTP 代理伺服器的 URL,該 URL 應適用於對 OCSP 回應器的所有查詢。

top

SSLOCSPResponderCertificateFile 指令

說明一組受信任的 PEM 編碼之 OCSP 回應器憑證
語法SSLOCSPResponderCertificateFile 檔案
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性可用於 httpd 2.4.26 以上版本,如果使用的是 OpenSSL 0.9.7 以上版本

此選項提供清單,列出受信任的 OCSP 回應器憑證,其用於驗證 OCSP 回應器憑證時使用。提供的憑證會自動受信任,而無需任何進一步驗證。這通常用於 OCSP 回應器憑證為自簽憑證,或已從 OCSP 回應中省略時。

top

SSLOCSPResponderTimeout 指令

說明OCSP 查詢的逾時
語法SSLOCSPResponderTimeout 秒數
預設SSLOCSPResponderTimeout 10
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

在啟用 SSLOCSPEnable 時,此選項會設定對 OCSP 應答器的查詢逾時。

top

SSLOCSPResponseMaxAge 指令

說明OCSP 應答允許的最大時間
語法SSLOCSPResponseMaxAge 秒數
預設SSLOCSPResponseMaxAge -1
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

此選項設定 OCSP 回應允許的最大時間(「新鮮度」)。預設值(-1)不強制執行最大時間,這表示只要 OCSP 應答的 nextUpdate 欄位在未來,該 OCSP 應答就會被認為有效。

top

SSLOCSPResponseTimeSkew 指令

說明驗證 OCSP 應答時,允許的最大時間差異
語法SSLOCSPResponseTimeSkew 秒數
預設SSLOCSPResponseTimeSkew 300
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

此選項設定驗證 OCSP 應答時(檢查其 thisUpdatenextUpdate 欄位時),允許的最大時間差異。

top

SSLOCSPUseRequestNonce 指令

說明要在 OCSP 查詢中使用亂數
語法SSLOCSPUseRequestNonce on|off
預設SSLOCSPUseRequestNonce on
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性可用於 httpd 2.4.10 及後續版本,在使用 OpenSSL 1.0.2 或後續版本時

此選項判斷對 OCSP 回應器的查詢是否應包含亂數。預設會總是使用查詢亂數,並核對回應亂數。當回應器不使用亂數時(例如 Microsoft OCSP Responder),應將此選項改為 off

top

SSLOpenSSLConfCmd 指令

說明透過其 SSL_CONF API 設定 OpenSSL 參數
語法SSLOpenSSLConfCmd 指令名稱 指令值
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性在使用 OpenSSL 1.0.2 或後續版本時,可用於 httpd 2.4.8 及後續版本

此指令將 OpenSSL 的SSL_CONF API 公開給 mod_ssl,允許 OpenSSL 參數的彈性組態,而不需在 OpenSSL 加入新功能時實作額外的 mod_ssl 指令。

可用的 SSLOpenSSLConfCmd 指令集合視 mod_ssl 所使用的 OpenSSL 版本而定(至少需要版本 1.0.2)。對於支援的指令名稱清單,請參閱 OpenSSL SSL_CONF_cmd(3) 手冊的支援組態檔指令單元。

有些 SSLOpenSSLConfCmd 指令可用於取代現有的指令(例如 SSLCipherSuiteSSLProtocol),不過請注意參數的語法/可允許值有時候可能不同。

範例

SSLOpenSSLConfCmd Options -SessionTicket,ServerPreference
SSLOpenSSLConfCmd ECDHParameters brainpoolP256r1
SSLOpenSSLConfCmd ServerInfoFile "/usr/local/apache2/conf/server-info.pem"
SSLOpenSSLConfCmd Protocol "-ALL, TLSv1.2"
SSLOpenSSLConfCmd SignatureAlgorithms RSA+SHA384:ECDSA+SHA256
top

SSLOptions 指令

說明組態各種 SSL 引擎執行時期選項
語法SSLOptions [+|-]選項 ...
內容伺服器設定、虛擬主機、目錄、.htaccess
覆寫選項
狀態擴充
模組mod_ssl

此指令可用於控制每個目錄的各種執行時期選項。通常,如果多個 SSLOptions 可套用至目錄,則會完整採用最明確的選項;選項不會合併。但是,如果 SSLOptions 指令上的所有選項前面都加上加號 (+) 或減號 (-) 符號,則會合併選項。任何前面加上 + 的選項會新增到目前有效的選項,而任何前面加上 - 的選項會從目前有效的選項中移除。

可用的選項

  • StdEnvVars

    如果啟用此選項,將建立標準的一組與 SSL 相關的 CGI/SSI 環境變數。由於資訊萃取步驟是一個相當昂貴的作業,因此此選項在預設上會基於效能理由而停用。因此,通常只會對 CGI 和 SSI 要求啟用此選項。

  • ExportCertData

    如果啟用此選項,將建立其他 CGI/SSI 環境變數:SSL_SERVER_CERTSSL_CLIENT_CERTSSL_CLIENT_CERT_CHAIN_n(其中 n = 0,1,2,..)。這些變數包含目前 HTTPS 連線的伺服器和用戶端之 PEM 編碼 X.509 憑證,且可由 CGI 腳本用於更深入的憑證檢查。此外,也會提供用戶端憑證鏈中的所有其他憑證。這會讓環境變大,所以您必須使用此選項才能隨選啟用此環境。

  • FakeBasicAuth

    啟用這個選項後,用戶端 X509 憑證的主體識別名稱 (DN) 會轉譯為 HTTP 基本授權使用者名稱。這表示標準 Apache 驗證方法可用來進行存取控制。使用者名稱就是用戶端 X509 憑證的主體(可透過執行 OpenSSL 的 openssl x509 指令來判斷:openssl x509 -noout -subject -in certificate.crt)。請注意,不會從使用者取得密碼。使用者檔案中的每個項目都需要此密碼:``xxj31ZMTZzkVA'',也就是單字 `password'' 的 DES 加密版本。使用 MD5 基礎加密的人(例如使用 FreeBSD 或 BSD/OS 等)應使用以下此單字的 MD5 hash:``$1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/''。

    請注意,AuthBasicFake 指令在 mod_auth_basic 中可用作模擬基本驗證的更通用機制,並能控制使用者名稱和密碼的結構。

  • StrictRequire

    SSLRequireSSLSSLRequire 成功判定存取應遭禁止時,此參數會強制執行禁止存取。通常,預設值是,如果使用 ``Satisfy any'' 指令,而其他存取限制已通過,則由 SSLRequireSSLSSLRequire 造成的存取拒絕會遭到覆寫(因為 Apache 的 Satisfy 機制應如此運作)。但針對嚴格存取限制,您可以將 SSLRequireSSL 和/或 SSLRequire 與 ``SSLOptions +StrictRequire'' 搭配使用。接著,當 mod_ssl 已決定拒絕存取後,另一個 ``Satisfy Any'' 將無效用。

  • OptRenegotiate

    當 SSL 指令用在每個目錄的內容時,這會啟用最佳化 SSL 連線重新協商處理。預設啟用嚴格架構,在其中,每個每個目錄的 SSL 參數重新組態都會造成完全的 SSL 重新協商交握。當使用這項選項時,mod_ssl 會試著透過執行更細緻化(但仍然安全)的參數檢查來避免不必要的交握。儘管如此,這些細緻化的檢查有時可能不如使用者預期,因此,請僅針對每個目錄的基礎啟用這項功能。

  • LegacyDNStringFormat

    此選項會影響 SSL_{CLIENT,SERVER}_{I,S}_DN 變數的值格式。自 2.3.11 版起,Apache HTTPD 預設會使用相容於 RFC 2253 的格式。此格式會在屬性之間使用逗號作為區隔符號,允許使用非 ASCII 字元(會轉換為 UTF8),使用反斜線來跳脫各種特殊字元,並將屬性排序,以「C」屬性為最後一個屬性。

    如果設定了 LegacyDNStringFormat,則會使用舊格式,其先將「C」屬性排序在最前面,使用斜線作為分隔符號,且不會以一致的方式處理非 ASCII 與特殊字元。

範例

SSLOptions +FakeBasicAuth -StrictRequire
<Files ~ "\.(cgi|shtml)$">
    SSLOptions +StdEnvVars -ExportCertData
</Files>
top

SSLPassPhraseDialog 指令

說明加解密私人金鑰的密語對話框類型
語法SSLPassPhraseDialog 類型
預設SSLPassPhraseDialog builtin
內容伺服器設定
狀態擴充
模組mod_ssl

當 Apache 啟動時,它必須讀取已啟用 SSL 的虛擬伺服器的各個憑證 (參閱 SSLCertificateFile) 和私人金鑰 (參閱 SSLCertificateKeyFile) 檔案。由於安全原因,私人金鑰檔案通常經過加密,因此 mod_ssl 需要向管理員查詢密語才能解密這些檔案。此查詢可透過兩種方式進行,且可由 類型 進行設定

  • builtin

    這是預設值,在 Apache 從終端機分離之前,會在啟動時出現互動式終端機對話框。管理員必須在此手動輸入每個已加密私人金鑰檔案的密語。由於可以設定許多已啟用 SSL 的虛擬主機,因此會使用以下重用方案來將對話框減至最低:當私人金鑰檔案加密時,會嘗試所有已知的密語 (一開始當然沒有任何密語)。如果其中一個已知的密語成功,則不會為此特定私人金鑰檔案顯示任何對話框。如果所有密語都失敗了,則會在終端機上查詢另一個密語,並記住這個密語以供下一輪使用 (屆時或許可以重用這個密語)。

    這個方案可讓 mod_ssl 達到最大的彈性 (因為對於 N 個加密的私人金鑰檔案,您可以使用 N 個不同的密語 - 但當然您必須輸入所有密語)。同時,也能將終端機對話框減至最低 (即當您對所有 N 個私人金鑰檔案使用單一密語時,這個密語只會被查詢一次)。

  • |/path/to/program [args...]

    這個模式允許使用外部程式,此程式會進行管道處理,以做為特定輸入裝置的管道;這個程式會透過 stdin 接收 builtin 模式所使用的標準提示文字,並預期透過 stdout 寫入密碼字串。如果需要多個密碼 (或輸入的密碼不正確),則會在傳回第一個密碼之後寫入額外的提示文字,且必須寫回更多密碼。

  • exec:/path/to/program

    在這裡設定一個外部程式於每個已加密的私密金鑰檔案啟動時呼叫它。它有兩個參數(第一個是類似「servername:portnumber」的表單,第二個則是「RSA」、「DSA」、「ECC」或從 3 開始的整數索引,如果超過三個設定的鍵),它指示它必須為對應的通行碼印出stdout給哪個伺服器和演算法。在 2.4.8(未發布)和 2.4.9 版本中,它會有一個參數呼叫,表單為「servername:portnumber:index」的字串(index 是以 0 為基礎的整數),它指示伺服器、TCP 連接埠和憑證編號。意圖是這個外部程式會先執行安全檢查,以確保系統不被攻擊者入侵,且只有在這些檢查成功通過後,才會提供通行碼。

    這兩個安全檢查以及通行碼的決定方式,可以隨心所欲複雜。Mod_ssl 只定義介面:一個可執行程式可以在 stdout 上提供通行碼。不多也不少!因此,如果你真的對安全性有偏執狂,這裡就是你的介面。其他任何事情都必須留給管理員練習,因為本機安全需求有很大的不同。

    上方的重複使用演算法也用在這裡。換句話說:外部程式只會針對每個獨特的通行碼呼叫一次。

範例

SSLPassPhraseDialog "exec:/usr/local/apache/sbin/pp-filter"
top

SSLProtocol 指令

說明設定可用的 SSL/TLS 協定版本
語法SSLProtocol [+|-]協定 ...
預設SSLProtocol all -SSLv3(至 2.4.16:all)
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl

此指令可用於控制在新的連線中將接受哪些版本的 SSL/TLS 協定。

可用的(不分大小寫)協定

  • SSLv3

    這是網景公司出品的安全通訊層 (SSL) 協定,第 3.0 版。它是 SSLv2 的後繼者,也是 TLSv1 的前身,但在 RFC 7568 中已被棄用。

  • TLSv1

    這是傳輸層安全 (TLS) 協定,第 1.0 版。它是 SSLv3 的後繼者,並在 RFC 2246 中定義。它幾乎受到每個客戶端的支援。

  • TLSv1.1(使用 OpenSSL 1.0.1 和更新版本時)

    TLS 1.0 協定的修訂版本,如 RFC 4346 中所定義。

  • TLSv1.2(使用 OpenSSL 1.0.1 和更新版本時)

    TLS 1.1 協定的修訂版本,如 RFC 5246 中所定義。

  • TLSv1.3(使用 OpenSSL 1.1.1 和更新版本時)

    TLS 協定的新版本,如 RFC 8446 中所定義。

  • all

    這是 ``+SSLv3 +TLSv1'' 的捷徑,或在使用 OpenSSL 1.0.1 及其更新版本時,分別為 ``+SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2''(不包括使用 ``no-ssl3'' 組態選項編譯的 OpenSSL 版本,其中 all 不包括 +SSLv3)。

範例

SSLProtocol TLSv1

SSLProtocol for 以名稱為基礎的虛擬主機

在 OpenSSL 1.1.1 之前,即使服務器名稱指示 (SNI) 早在 TLS 交握階段就能判斷目標虛擬主機,但無法在此時間切換連線的 TLS 通訊協定版本。因此,協商後的 SSLProtocol 始終根據基礎虛擬主機之一(連線的傾聽 IP:port 中宣告的第一個虛擬主機)而定。

從 Apache HTTP 伺服器版本 2.4.42 開始,如果使用 OpenSSL 1.1.1 及其更新版本建立/連結,且客戶端在 TLS 交握中提供 SNI,則每個(以名稱為基礎的)虛擬主機的 SSLProtocol 都可且將被尊重。

為了與之前版本相容,如果並未在以名稱為基礎的虛擬主機中組態 SSLProtocol,則依然套用來自基礎虛擬主機的 SSLProtocol除非已在全域中組態 SSLProtocol,否則將套用全域值(後一例外情況比相容更合理)。

top

SSLProxyCACertificateFile 指令

說明遠端伺服器驗證用 PEM 編碼 CA 憑證的連結檔案
語法SSLProxyCACertificateFile file-path
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

此指令設定all-in-one 檔案,可用於彙整您處理其遠端伺服器的憑證授權 (CA) 憑證。這些憑證用於遠端伺服器驗證。此類檔案只是各種 PEM 編碼憑證檔案的連結,其順序以偏好順序排列。這可以使用於做為 SSLProxyCACertificatePath 的替代或補充設定。

範例

SSLProxyCACertificateFile "/usr/local/apache2/conf/ssl.crt/ca-bundle-remote-server.crt"
top

SSLProxyCACertificatePath 指令

說明遠端伺服器驗證用 PEM 編碼 CA 憑證的目錄
語法SSLProxyCACertificatePath directory-path
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

此指令設定存放您處理其遠端伺服器的憑證授權 (CA) 憑證的目錄。這些憑證用於驗證遠端伺服器驗證的遠端伺服器憑證。

此目錄中的檔案必須經過 PEM 編碼,且透過雜湊檔名存取。因此,您通常無法僅放置憑證檔案:也必須建立名為 雜湊值.N 的符號連結。您應隨時確定此目錄包含適當的符號連結。

範例

SSLProxyCACertificatePath "/usr/local/apache2/conf/ssl.crt/"
top

SSLProxyCARevocationCheck 指令

說明針對遠端伺服器驗證啟用 CRL-based 撤銷檢查
語法SSLProxyCARevocationCheck chain|leaf|none
預設SSLProxyCARevocationCheck none
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

啟用您所處理的 遠端伺服器 的憑證撤銷清單 (CRL) 檢查。至少須設定 SSLProxyCARevocationFileSSLProxyCARevocationPath 之一。設定為 chain(建議的設定)時,CRL 檢查會套用至鏈中的所有憑證,而設定為 leaf 時,會將檢查限制於最終實體憑證。

設定為 chainleaf 時,必須有 CRL 才能順利驗證

在 2.3.15 版之前,當使用 SSLProxyCARevocationFileSSLProxyCARevocationPath 設定的任何位置都找不到 CRL 時,mod_ssl 中的 CRL 檢查也會成功。新增此指令後,行為已變更:當啟用檢查時,必須要有 CRL 才能順利驗證 - 否則會因 "無法取得憑證 CRL" 錯誤而失敗。

範例

SSLProxyCARevocationCheck chain
top

SSLProxyCARevocationFile 指令

說明遠端伺服器驗證用的 CA CRL 的合併 PEM 編碼檔
語法SSLProxyCARevocationFile 檔名路徑
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

此指令設定 all-in-one 檔,讓您在此彙整您所處理的 遠端伺服器 之憑證授權中心 (CA) 的憑證撤銷清單 (CRL)。這些內容用於遠端伺服器驗證。此類檔案只是將各種 PEM 編碼 CRL 檔案按偏好順序合併在一起。可單獨或與 SSLProxyCARevocationPath 搭配使用。

範例

SSLProxyCARevocationFile "/usr/local/apache2/conf/ssl.crl/ca-bundle-remote-server.crl"
top

SSLProxyCARevocationPath 指令

說明遠端伺服器驗證用的 CA CRL 的 PEM 編碼檔目錄
語法SSLProxyCARevocationPath 目錄路徑
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

此指令設定目錄,您可以在此目錄中存放您所處理的遠端伺服器的憑證授權中心 (CA) 的憑證撤銷清單 (CRL)。這些內容用於在遠端伺服器驗證時撤銷遠端伺服器憑證。

此目錄中的檔案必須為 PEM 編碼,並透過雜湊檔案名稱存取。因此,通常您不僅必須將 CRL 檔案放在那裡。此外,您還必須建立名為 hash-value.rN 的符號連結。而且您應始終確保此目錄包含適當的符號連結。

範例

SSLProxyCARevocationPath "/usr/local/apache2/conf/ssl.crl/"
top

SSLProxyCheckPeerCN 指令

說明是否檢查遠端伺服器憑證的 CN 欄位
語法SSLProxyCheckPeerCN on|off
預設SSLProxyCheckPeerCN on
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

此指令設定是否將遠端伺服器憑證的 CN 欄位與要求 URL 的主機名稱進行比對。如果兩者不相符,將會傳送 502 狀態碼(錯誤的閘道)。在 2.4.5 和更新的版本中,SSLProxyCheckPeerCN 已由 SSLProxyCheckPeerName 取代。

在所有 2.4.5 到 2.4.20 版本中,設定 SSLProxyCheckPeerName off 就足夠啟用此行為(因為 SSLProxyCheckPeerCN 預設為 on)。在這些版本中,必須將兩個指令都設定為 off 才能完全避免遠端伺服器憑證名稱驗證。許多使用者回報此舉造成很大的困惑。

從 2.4.21 版起,所有啟用 SSLProxyCheckPeerNameSSLProxyCheckPeerCN 選項之一的設定都將使用新的 SSLProxyCheckPeerName 行為,而停用 SSLProxyCheckPeerNameSSLProxyCheckPeerCN 選項之一的所有設定都將抑制所有遠端伺服器憑證名稱驗證。只有下列設定會在 2.4.21 及後續版本中觸發舊版憑證 CN 比較;

範例

SSLProxyCheckPeerCN on
SSLProxyCheckPeerName off
top

SSLProxyCheckPeerExpire 指令

說明是否檢查遠端伺服器憑證是否過期
語法SSLProxyCheckPeerExpire on|off
預設SSLProxyCheckPeerExpire on
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

此指令設定是否檢查遠端伺服器憑證是否過期。如果檢查失敗,則會傳送 502 狀態碼(錯誤的閘道)。

範例

SSLProxyCheckPeerExpire on
top

SSLProxyCheckPeerName 指令

說明設定遠端伺服器憑證的主機名稱檢查
語法SSLProxyCheckPeerName on|off
預設SSLProxyCheckPeerName on
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性Apache HTTP Server 2.4.5 及後續版本
在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

當 mod_ssl 作為 SSL 用戶端時,此指令會設定伺服器憑證的主機名稱檢查。如果要求 URI 的主機名稱與憑證主旨的 CN 屬性之一相符,或與 subjectAltName 延伸元件相符,則檢查將會成功。如果檢查失敗,SSL 要求將會中斷,並傳回 502 狀態碼(錯誤的閘道)。

特定情況支援萬用字元比對:類型為 dNSName 的 subjectAltName 項目,或以 *. 開頭的 CN 屬性將會與同等名稱元素數目和相同字尾的任何主機名稱相符。例如,*.example.org 將會相符 foo.example.org,但不會相符 foo.bar.example.org,因為各別主機名稱中的元素數目不同。

此功能在 2.4.5 中推出,並取代了 SSLProxyCheckPeerCN 指令的行為,後者只針對主機名稱測試第一個 CN 屬性中的確切值。然而,許多使用者對於使用這些指令的行為感到困惑,因此在 2.4.21 版中改善了 SSLProxyCheckPeerNameSSLProxyCheckPeerCN 指令的相互行為。請參閱 SSLProxyCheckPeerCN 指令說明,以了解原始行為和這些改善事宜的詳細資訊。

top

SSLProxyCipherSuite 指令

說明SSL 代理握手協商中可用的加密套件
語法SSLProxyCipherSuite [協定] 加密規格
預設SSLProxyCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

等同於 SSLCipherSuite,但適用於代理連線。有關其他資訊,請參閱 SSLCipherSuite

top

SSLProxyEngine 指令

說明SSL 代理引擎操作切換
語法SSLProxyEngine on|off
預設SSLProxyEngine off
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

此指令切換代理伺服器 SSL/TLS 協定的使用。通常使用在 <VirtualHost> 區段中,以在特定虛擬主機中啟用 SSL/TLS 代理伺服器使用。預設情況下,SSL/TLS 協定主伺服器和所有已設定虛擬主機的代理伺服器都被停用。

請注意,通常不需要在會作用為轉發代理伺服器的虛擬主機中包含 SSLProxyEngine 指令(使用 <Proxy>ProxyRequests 指令)。轉發代理伺服器不需要 SSLProxyEngine 來代理 SSL/TLS 要求。

範例

<VirtualHost _default_:443>
    SSLProxyEngine on
    #...
</VirtualHost>
top

SSLProxyMachineCertificateChainFile 指令

說明連接的 PEM 編碼 CA 憑證檔案,代理伺服器用於選擇憑證
語法SSLProxyMachineCertificateChainFile filename
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

此指令設定一個檔案,其中包含所有正在使用的用戶端憑證的憑證鏈。如果遠端伺服器提供未直接簽署任何已設定用戶端憑證的 CA 憑證清單,則需要此指令。

所引用的檔案只是各種 PEM 編碼憑證檔案的連接。啟動時,會檢查每個設定的用戶端憑證,並建立信任鏈。

安全警告

如果啟用此指令,檔案中的所有憑證都將被信任,就像他們也在 SSLProxyCACertificateFile 中一樣。

範例

SSLProxyMachineCertificateChainFile "/usr/local/apache2/conf/ssl.crt/proxyCA.pem"
top

SSLProxyMachineCertificateFile 指令

說明連接的 PEM 編碼用戶端憑證和金鑰檔案,代理伺服器將使用
語法SSLProxyMachineCertificateFile filename
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境
僅限在 httpd 2.4.59 及後續版本中包含非葉狀(CA)憑證。

此指令設定一個檔案,其中包含用於對代理伺服器進行身分驗證以連線至遠端伺服器的憑證和金鑰。

所引用的檔案只是各種 PEM 編碼憑證檔案的連接。可以替代或額外使用此指令,來使用 SSLProxyMachineCertificatePath。所引用的檔案可以包含任意數量用戶端憑證及其對應私有金鑰的配對。每個配對可以指定為(憑證,金鑰)或(金鑰,憑證)順序。檔案中也可以包含非葉狀(CA)憑證,而且會被視為已使用 SSLProxyMachineCertificateChainFile 設定。

當遠端伺服器要求提供用戶端憑證時,伺服器應在要求中提供「可接受之憑證授權名稱」清單。如果未提供此類清單,mod_ssl 會使用設定的第一組用戶端憑證/金鑰。如果提供了 CA 名稱清單,mod_ssl 將會遍歷該清單,並嘗試尋找由該 CA 直接或間接透過許多中間 CA 憑證所核發的已設定用戶端憑證。中間 CA 憑證鏈可由檔案中包含的憑證組成,或透過 SSLProxyMachineCertificateChainFile 設定。第一組符合的已設定憑證將在回應要求中提供。

如果遠端伺服器提供了 CA 名稱清單,但找不到任何符合的用戶端憑證,mod_ssl 將不會提供任何用戶端憑證,且可能導致 SSL/TLS 交握失敗(視遠端伺服器設定而定)。

目前不支援加密的私密金鑰

僅支援以 PKCS1 RSA、DSA 或 EC 格式編碼的金鑰。以 PKCS8 格式編碼的金鑰(即以「-----BEGIN PRIVATE KEY-----」開始)必須轉換,例如使用「openssl rsa -in private-pkcs8.pem -outform pem」。

範例

SSLProxyMachineCertificateFile "/usr/local/apache2/conf/ssl.crt/proxy.pem"
top

SSLProxyMachineCertificatePath 指令

說明代理程式要使用的 PEM 編碼用戶端憑證及金鑰存放目錄
語法SSLProxyMachineCertificatePath directory
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

此指令設定您保留用戶端憑證和金鑰的目錄,這些憑證和金鑰用於遠端伺服器對代理程式伺服器的驗證。

mod_ssl 將嘗試載入指定目錄中的每個檔案,就像個別使用 SSLProxyMachineCertificateFile 設定一樣。

目前不支援加密的私密金鑰

僅支援以 PKCS1 RSA、DSA 或 EC 格式編碼的金鑰。以 PKCS8 格式編碼的金鑰(即以「-----BEGIN PRIVATE KEY-----」開始)必須轉換,例如使用「openssl rsa -in private-pkcs8.pem -outform pem」。

範例

SSLProxyMachineCertificatePath "/usr/local/apache2/conf/proxy.crt/"
top

SSLProxyProtocol 指令

說明設定代理程式使用中可用的 SSL 協定種類
語法SSLProxyProtocol [+|-]protocol ...
預設SSLProxyProtocol all -SSLv3(2.4.16 以下:all)
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

此指令可用於控制 mod_ssl 在建立其代理程式的伺服器環境時應使用的 SSL 協定種類。它僅使用其中一個提供的協定連線至伺服器。

請參閱 SSLProtocol 以取得更多資訊。

top

SSLProxyVerify 指令

說明遠端伺服器憑證驗證類型
語法SSLProxyVerify level
預設SSLProxyVerify none
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

當代理程式設定為將要求轉發至遠端 SSL 伺服器時,此指令可用於設定遠端伺服器的憑證驗證。

以下等級可用於level

  • none:不需要任何遠端伺服器的憑證
  • optional:遠端伺服器可能會提供有效的憑證
  • require:遠端伺服器需要提供有效的憑證
  • optional_no_ca:遠端伺服器可能會提供有效的憑證
    ,但不需要證明(成功)。

實際上只有層級 nonerequire 有真實意義,因為層級 optional 並非所有伺服器都適用,而層級 optional_no_ca 實際上會違反認證的概念(但可用於建立 SSL 測試頁面等)。

範例

SSLProxyVerify require
top

SSLProxyVerifyDepth 指令

說明遠端伺服器驗證時,憑證中 CA 的最大深度
語法SSLProxyVerifyDepth number
預設SSLProxyVerifyDepth 1
內容伺服器組態、虛擬主機、代理區段
狀態擴充
模組mod_ssl
相容性在 httpd 2.4.30 及其更新版本中允許使用代理區段環境

此指令設定 mod_ssl 在判定遠端伺服器沒有有效憑證之前的驗證深度。

深度指中間憑證簽發者的最大數量,亦即驗證遠端伺服器憑證時最多允許追蹤的 CA 憑證數量。若深度為 0,表示只接受自簽署的遠端伺服器憑證;而預設深度為 1,則表示遠端伺服器憑證可以是自簽署,或是由伺服器直接識別的 CA 所簽署(亦即 CA 的憑證在 SSLProxyCACertificatePath 之下)等。

範例

SSLProxyVerifyDepth 10
top

SSLRandomSeed 指令

說明偽亂數產生器 (PRNG) 播種來源
語法SSLRandomSeed context source [bytes]
內容伺服器設定
狀態擴充
模組mod_ssl

此指令會設定一個或多個來源,用於在 OpenSSL 啟動時(contextstartup)或在建立新的 SSL 連線時(contextconnect)播種偽亂數產生器 (PRNG)。此指令只能用於全域伺服器 context,因為 PRNG 是全域功能。

可用的 source 變體如下

  • builtin

    這是隨時可用的內建播種來源。在執行期間,使用此來源會消耗最少的 CPU 週期,因此沒有缺點,隨時可以使用。用於播種 PRNG 的來源包含當前時間、當前處理程序 ID,以及隨機選擇的堆疊 128 位元組擷取。缺點是此來源本身並不是很強,而且在啟動時(當時機板仍不可用),此來源只會產生幾位元組的熵。因此,至少在啟動時,您應該另外使用一個播種來源。

  • file:/path/to/source

    此變種使用外部檔案 /path/to/source 作為種設定義偽隨機數字產生器 (PRNG) 的熵源。當指定了 _bytes_ 時,只有檔案的前 _bytes_ 位元組會形成熵(且 _bytes_ 是以第一個參數傳給 /path/to/source)。當未指定 _bytes_ 時,整個檔案會形成熵(且 0 是以第一個參數傳給 /path/to/source)。特別在啟動時間使用,例如具有可用的 /dev/random 和/或 /dev/urandom 裝置(這通常存在於 FreeBSD 和 Linux 等現代的 Unix 衍生品上)。

    但請小心:通常 /dev/random 只提供與實際擁有的熵資料相同數量的資料,也就是當您要求 512 位元組的熵,但裝置目前只有 100 位元組可用,可能會發生兩件事:在某些平台上,您只會收到 100 個位元組,而其他平台則會讀取區塊,直到有足夠的位元組可用(這可能需要很長一段時間)。在此,使用現有的 /dev/urandom 會更好,因為它永遠不會阻塞,實際上會提供所要求資料的數量。唯一的缺點是所接收資料的品質可能不是最好的。

  • exec:/path/to/program

    此變種使用外部可執行檔 /path/to/program 作為種設定義隨機數字產生器 (PRNG) 的熵源。當指定了 _bytes_ 時,只有其 stdout 內容的前 _bytes_ 位元組會形成熵。當未指定 _bytes_ 時,stdout 上產生的所有資料會形成熵。只有在啟動時間需要藉助外部程式強設定義種子時才使用此功能(例如以上使用 mod_ssl 中的 truerand 工具的範例,其是基於 AT&T _truerand_ 函式庫)。在連線內容中使用這項功能當然會大幅降低伺服器的速度。所以通常您應避免在此內容中使用外部程式。

  • egd:/path/to/egd-socket (僅 Unix)

    此變種使用外部熵收集守護程式 (EGD) 的 Unix 域通訊端 (請參閱 http://www.lothar.com/tech /crypto/) 來建立偽隨機數字產生器 (PRNG) 的種子。如果您的平台上不存在隨機裝置,請使用此項目。

範例

SSLRandomSeed startup builtin
SSLRandomSeed startup "file:/dev/random"
SSLRandomSeed startup "file:/dev/urandom" 1024
SSLRandomSeed startup "exec:/usr/local/bin/truerand" 16
SSLRandomSeed connect builtin
SSLRandomSeed connect "file:/dev/random"
SSLRandomSeed connect "file:/dev/urandom" 1024
top

SSLRenegBufferSize 指示

說明設定 SSL 重新協商緩衝區的大小
語法SSLRenegBufferSize bytes
預設SSLRenegBufferSize 131072
內容目錄,.htaccess
覆寫AuthConfig
狀態擴充
模組mod_ssl

如果在每個位置的內容中都需要進行 SSL 重新協商,例如在目錄或位置區段中使用 SSLVerifyClient,則 mod_ssl 必須將任何 HTTP 要求本文緩衝在記憶體中,直到執行新的 SSL 交握為止。此指令可用於設定用於此緩衝區的記憶體量。

請注意,在許多組態中,傳送請求主體的客戶端是不可信的,因此在變更這項組態設定時,必須考慮對記憶體消耗的阻斷服務攻擊。

範例

SSLRenegBufferSize 262144
top

SSLRequire 指令

說明當任意複雜的布林運算式為真時允許存取
語法SSLRequire 運算式
內容目錄,.htaccess
覆寫AuthConfig
狀態擴充
模組mod_ssl

SSLRequire 已過時

SSLRequire 已過時,通常應改用 Require expr 取代。Require expr 所謂的 ap_expr 語法是 SSLRequire 語法的超集,例外情況如下

SSLRequire 中,比較運算子 <<= 等於運算子 ltle 等,而且運作方式有點奇怪,會先比較兩個字串的長度,再比較字典順序。另一方面,ap_expr 有兩組比較運算子:運算子 <<= 進行字典字串比較,而運算子 -lt-le 進行整數比較。對於後者,還有沒有前導連字號的別名:ltle 等運算子。

此指令會指定必須滿足的一般存取需求,才能允許存取。這是一個功能強大的指令,因為需求規格是一個包含任意複雜布林運算式及任何數量的存取檢查。

運算式 必須符合下列語法 (使用 BNF 文法表示法給定)

expr     ::= "true" | "false"
           | "!" expr
           | expr "&&" expr
           | expr "||" expr
           | "(" expr ")"
           | comp

comp     ::= word "==" word | word "eq" word
           | word "!=" word | word "ne" word
           | word "<"  word | word "lt" word
           | word "<=" word | word "le" word
           | word ">"  word | word "gt" word
           | word ">=" word | word "ge" word
           | word "in" "{" wordlist "}"
           | word "in" "PeerExtList(" word ")"
           | word "=~" regex
           | word "!~" regex

wordlist ::= word
           | wordlist "," word

word     ::= digit
           | cstring
           | variable
           | function

digit    ::= [0-9]+
cstring  ::= "..."
variable ::= "%{" varname "}"
function ::= funcname "(" funcargs ")"

對於 varname,可以使用 環境變數 中所述的任何變數。對於 funcname,可用函數已列在 ap_expr 文件 中。

載入組態時,運算式 會剖析成內部機器表示,然後在請求處理期間進行評估。在 .htaccess 環境中,運算式 每當請求處理過程中遇到 .htaccess 檔案時,都會剖析並執行。

範例

SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)-/                   \
            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd."          \
            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}    \
            and %{TIME_WDAY} -ge 1 and %{TIME_WDAY} -le 5          \
            and %{TIME_HOUR} -ge 8 and %{TIME_HOUR} -le 20       ) \
           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/

PeerExtList(object-ID) 函數預期找到一個或多個客戶端憑證中由特定 object-ID (OID) 識別的 X.509 憑證延伸元件。如果左手邊字串正確符合以此 OID 識別的延伸元件值,則運算式會評估為真。(如果出現多個具有相同 OID 的延伸元件,則至少一個延伸元件必須符合)。

範例

SSLRequire "foobar" in PeerExtList("1.2.3.4.5.6")

PeerExtList 函數註解

  • object ID 可以指定為 SSL 程式庫可識別的描述性名稱 (例如 "nsComment") 或數字 OID (例如 "1.2.3.4.5.6")。

  • 已知 SSL 函式庫的類型中的表達式會在比較之前呈現為字串。對於 SSL 函式庫無法識別類型的擴充,如果它是由基本 ASN.1 類型 UTF8String、IA5String、VisibleString 或 BMPString 之一所組成的,mod_ssl 會分析該值。對於這種類型之一的擴充,如果需要,字串值會轉換為 UTF-8,然後與左側表達式進行比較。

另請參閱

top

SSLRequireSSL 指令

說明當 HTTP 要求未透過 SSL 使用,拒絕存取
語法SSLRequireSSL
內容目錄,.htaccess
覆寫AuthConfig
狀態擴充
模組mod_ssl

除非對目前連線啟用 SSL (例如 HTTPS) 透過 HTTP,否則此指令禁止存取。這在 SSL 啟用的虛擬主機或目錄中相當方便,可防範構成錯誤暴露應受到保護的項目。當此指令存在時,所有未透過 SSL 使用的要求都會遭到拒絕。

範例

SSLRequireSSL
top

SSLSessionCache 指令

說明全域/跨處理程序 SSL 會話快取的類型
語法SSLSessionCache type
預設SSLSessionCache none
內容伺服器設定
狀態擴充
模組mod_ssl

這組態全域/跨處理程序 SSL 會話快取的儲存類型。此快取是加速並行要求處理的選用功能。對於同一伺服器處理程序的要求 (透過 HTTP 保持存活),OpenSSL 已在本地快取 SSL 會話資訊。但是,由於新的客戶端透過並行要求請求內嵌圖片及其他資料 (通常常見於四個以上的並行要求),這些要求會由不同的預先分岔的伺服器處理程序處理。在此,跨處理程序快取有助於避免不必要的會話交握。

目前支援下列五種類型的儲存

  • none

    這會停用全域/跨處理程序會話快取。這會造成明顯的效能損失,而且在使用特定瀏覽器時可能會造成問題,特別是在啟用客戶端憑證時。不建議使用此設定。

  • nonenotnull

    這會停用任何全域/跨處理程序會話快取。但它會強迫 OpenSSL 傳送非空白的會話 ID,以因應需要非空白會話 ID 且有錯誤的客戶端。

  • dbm:/path/to/datafile

    這會利用本機磁碟中的 DBM hash 檔案來同步伺服器處理程序的本地 OpenSSL 記憶體快取。此會話快取在高負載下可能會遭遇可靠性問題。若要使用此功能,請確定已載入 mod_socache_dbm

  • shmcb:/path/to/datafile[(size)]

    這會利用 RAM 中共用記憶體片段 (透過 /path/to/datafile 建立) 內的高效能循環緩衝區 (大小約為 size 位元組) 來同步伺服器處理程序的本地 OpenSSL 記憶體快取。這是建議的會話快取。若要使用此功能,請確定已載入 mod_socache_shmcb

  • dc:UNIX:/path/to/socket

    利用 distcache 分散式快取庫。參數應使用 distcache 地址語法指定伺服器或代理程式的位置;為範例所述,UNIX:/path/to/socket 指定UNIX網域通訊端點(通常是本機的 dc_client 代理程式);IP:server.example.com:9001 指定 IP 位址。若要使用此功能,請確保已載入 mod_socache_dc

範例

SSLSessionCache "dbm:/usr/local/apache/logs/ssl_gcache_data"
SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_gcache_data(512000)"

ssl-cache 互斥鎖用於序列化存取快取,以避免損毀。可以使用 Mutex 指令設定此互斥鎖。

top

SSLSessionCacheTimeout 指令

說明SSL 快取中 SSL 會話過期前的秒數
語法SSLSessionCacheTimeout 秒數
預設SSLSessionCacheTimeout 300
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性也套用於 Apache 2.4.10 及更新版本的 RFC 5077 TLS 會話繼續

此指令設定儲存在全球/進程之間 SSL 會話快取、OpenSSL 內部記憶體快取和由 TLS 會話繼續 (RFC 5077) 繼續的會話的資料的逾時值(以秒為單位)。可設定為低 15 進行測試,但在實際上應設定為較高的值,如 300。

範例

SSLSessionCacheTimeout 600
top

SSLSessionTicketKeyFile 指令

說明TLS 會話通行證的永續加密/解密金鑰
語法SSLSessionTicketKeyFile 檔案路徑
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性如果使用 OpenSSL 0.9.8h 或更新版本,則在 httpd 2.4.0 及更新版本中可使用

針對加密和解密 TLS 會話通行證選擇性設定機密金鑰,如 RFC 5077 中定義的。主要適用於具備TLS 會話資訊應在多個節點之間共用的叢集環境。對於單一執行個體的 httpd 設定,建議不要設定通行證金鑰檔案,而改為依賴於 mod_ssl 在啟動時產生的(隨機)金鑰。

通行證金鑰檔案必須包含 48 位元組的隨機資料,最好從高熵來源產生。在 Unix 為基礎的系統中,可以使用下列方式產生通行證金鑰檔案

dd if=/dev/random of=/path/to/file.tkey bs=1 count=48

通行證金鑰應定期輪換(更換),因為這是使現有會話通行證失效的唯一方法 - OpenSSL 目前不允許指定通行證使用期限的限制。新的通行證金鑰僅在重新啟動網站伺服器後才會使用。所有現有的會話通行證在重新啟動後都會失效。

通行證金鑰檔案包含敏感金鑰組成資料,應使用類似於 SSLCertificateKeyFile 所使用的檔案權限來保護此檔案。

top

SSLSessionTickets 指令

說明啟用或停用 TLS 會話通行證
語法SSLSessionTickets on|off
預設SSL 會話權杖開啟
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 0.9.8f 以上版本的 httpd 2.4.11 及其後版本中提供。

此指令允許啟用或停用 TLS 會話權杖 (RFC 5077) 的使用。

啟用 TLS 會話權杖為預設值。在未以適當的頻率 (例如每天) 重新啟動網路伺服器的情況下使用它們會損害完美的前向保密性。

top

SSLSRPUnknownUserSeed 指令

說明SRP 未知使用者種子
語法SSLSRPUnknownUserSeed secret-string
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 1.0.1 以上版本的 httpd 2.4.4 及其後版本中提供。

此指令設定用於偽造不認識使用者的 SRP 使用者參數的種子,以避免洩漏給定使用者是否存在。指定一個秘密字串。如果未曾使用這個指令,Apache 會傳回 UNKNOWN_PSK_IDENTITY 警示給指定不認識使用者名稱的用戶端。

範例

SSLSRPUnknownUserSeed "secret"

top

SSLSRPVerifierFile 指令

說明SRP 驗證器檔案路徑
語法SSLSRPVerifierFile file-path
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 1.0.1 以上版本的 httpd 2.4.4 及其後版本中提供。

此指令會啟用 TLS-SRP 並設定路徑到包含 TLS-SRP 使用者名稱、驗證器、salt 和群組參數的 OpenSSL SRP (安全遠端密碼) 驗證器檔案。

範例

SSLSRPVerifierFile "/path/to/file.srpv"

可以使用 openssl 指令行公用程式建立驗證器檔案。

建立 SRP 驗證器檔案

openssl srp -srpvfile passwd.srpv -userinfo "some info" -add username

使用選擇性 -userinfo 參數提供的參數可在 SSL_SRP_USERINFO 要求環境變數取得。

top

SSLStaplingCache 指令

說明設定 OCSP 釘選快取
語法SSLStaplingCache type
內容伺服器設定
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 0.9.8h 以上版本的 httpd 中提供

設定用來儲存 OCSP 回應的快取,這些回應會在啟用 SSLUseStapling 的情況下包含於 TLS 交握中。快取設定對於 OCSP 釘選來說是必要的。除了 nonenonenotnull 以外,支援與 SSLSessionCache 相同的儲存類型。

top

SSLStaplingErrorCacheTimeout 指令

說明OCSP 釘選快取中過期無效回應前的秒數
語法SSLStaplingErrorCacheTimeout seconds
預設SSLStaplingErrorCacheTimeout 600
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 0.9.8h 以上版本的 httpd 中提供

設定 OCSP 釘選快取的 無效 回應 (透過 SSLStaplingCache 設定) 過期前的秒數。要設定有效回應的快取逾時,請參閱 SSLStaplingStandardCacheTimeout

top

SSLStaplingFakeTryLater 指令

說明為失敗的 OCSP 釘選查詢合成「稍後再試」回應
語法SSLStaplingFakeTryLater on|off
預設SSLStaplingFakeTryLater on
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 0.9.8h 以上版本的 httpd 中提供

啟用時,如有 OCSP 回應者的查詢用於訂書針目的發生錯誤,mod_ssl 會為用戶端合成一個「tryLater」回應。僅在 SSLStaplingReturnResponderErrors 也啟用時才會有效。

top

SSLStaplingForceURL 指令

說明覆寫憑證 AIA 擴充中的 OCSP 回應者 URI
語法SSLStaplingForceURL uri
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 0.9.8h 以上版本的 httpd 中提供

此指令會覆寫由憑證的 AuthorityInfoAccess (AIA) 擴充取得的 OCSP 回應者 URI。其中一種可能的用途是使用代理程式來撷取 OCSP 查詢。

top

SSLStaplingResponderTimeout 指令

說明OCSP 訂書針查詢逾時
語法SSLStaplingResponderTimeout 秒數
預設SSLStaplingResponderTimeout 10
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 0.9.8h 以上版本的 httpd 中提供

此選項會在啟用 SSLUseStapling 而且 mod_ssl 正在對應答者進行 OCSP 訂書針目的查詢時,設定 OCSP 應答查詢的逾時。

top

SSLStaplingResponseMaxAge 指令

說明OCSP 訂書針回應允許的最大年限
語法SSLStaplingResponseMaxAge 秒數
預設SSLStaplingResponseMaxAge -1
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 0.9.8h 以上版本的 httpd 中提供

在考慮 OCSP 回覆作為訂書針目的時,此選項會設定允許的最大年限(「新鮮度」),即啟用 SSLUseStapling 時。預設值(-1)不會強制執行最大年限,這表示只要 OCSP 回覆的 nextUpdate 欄位在未來,這些回覆就會被視為有效。

top

SSLStaplingResponseTimeSkew 指令

說明驗證 OCSP 訂書針回應時允許的最大時間偏差
語法SSLStaplingResponseTimeSkew 秒數
預設SSLStaplingResponseTimeSkew 300
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 0.9.8h 以上版本的 httpd 中提供

當 mod_ssl 檢查 OCSP 回覆中包含在 TLS 交握 (OCSP 訂書針) 中的 thisUpdatenextUpdate 欄位時,此選項會設定允許的最大時間偏差。僅在啟用 SSLUseStapling 時才適用。

top

SSLStaplingReturnResponderErrors 指令

說明將與訂書針相關的 OCSP 錯誤傳遞給用戶端
語法SSLStaplingReturnResponderErrors on|off
預設SSLStaplingReturnResponderErrors on
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 0.9.8h 以上版本的 httpd 中提供

啟用時,mod_ssl 會將不成功的訂書針相關 OCSP 查詢的回應(例如狀態總計為「失敗」的回應、憑證狀態為非「良好」的回應、逾期回應等)傳遞給用戶端。如果設為 off,只有指出憑證狀態為「良好」的回應才會包含在 TLS 交握中。

top

SSLStaplingStandardCacheTimeout 指令

說明OCSP 訂書針快取中回應逾期前的秒數
語法SSLStaplingStandardCacheTimeout 秒數
預設SSLStaplingStandardCacheTimeout 3600
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 0.9.8h 以上版本的 httpd 中提供

設定幾秒以後回應 OCSP 貼接快取 (透過 SSLStaplingCache 設定) 將到期。此指令套用至驗證回應,而 SSLStaplingErrorCacheTimeout 則用於控制無效/不可用回應的逾時時間。

top

SSLStrictSNIVHostCheck 指令

說明是否允許非 SNI 用戶端存取基於名稱的虛擬主機。
語法SSLStrictSNIVHostCheck 開啟|關閉
預設SSLStrictSNIVHostCheck 關閉
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性Apache 2.2.12 及更新版本提供

此指令設定是否允許非 SNI 用戶端存取基於名稱的虛擬主機。如果在預設的基於名稱的虛擬主機中設為開啟,沒有 SNI 之用戶端將無法存取此特定 IP/連接埠組合中的任何虛擬主機。如果在其他任何虛擬主機中設為開啟,沒有 SNI 之用戶端將無法存取此特定虛擬主機。

此選項僅當 httpd 已針對 OpenSSL 中 SNI 相容版本編譯時提供。

範例

SSLStrictSNIVHostCheck on
top

SSLUserName 指令

說明變數名稱用於判斷使用者的名稱
語法SSLUserName varname
內容伺服器設定、目錄、.htaccess
覆寫AuthConfig
狀態擴充
模組mod_ssl

此指令設定 Apache 要求物件中的「使用者」欄位。它由較低層級的模組所使用,以用字串識別使用者。特別是,這可能會導致環境變數 REMOTE_USER 被設定。varname 可以是任何 SSL 環境變數

請注意,如果使用 FakeBasicAuth 選項,此指令便會無效 (請參閱 SSLOptions)。

範例

SSLUserName SSL_CLIENT_S_DN_CN
top

SSLUseStapling 指令

說明在 TLS 交握對話中啟用 OCSP 回應的貼接動作
語法SSLUseStapling 開啟|關閉
預設SSLUseStapling 關閉
內容伺服器設定、虛擬主機
狀態擴充
模組mod_ssl
相容性於使用 OpenSSL 0.9.8h 以上版本的 httpd 中提供

此選項會啟用 RFC 6066 中所指定的「憑證狀態要求」TLS 擴充功能所定義的 OCSP 貼接動作。如果啟用 (且用戶端要求),mod_ssl 會在 TLS 交握對話中包含 OCSP 回應供自己的憑證使用。設定 SSLStaplingCache 是啟用 OCSP 貼接動作的前提要件。

OCSP 貼接動作可減輕用戶端自行查詢 OCSP 回應者的負擔,但請注意 RFC 6066 規格中,伺服器的 CertificateStatus 回應可能僅包含單一憑證的 OCSP 回應。對於其憑證鏈中包含中間 CA 憑證的伺服器憑證 (這是現今的典型情況),此貼接動作在其目前的實作方式下只能部分達到「節省往返行程和資源」的目標 - 另請參閱 RFC 6961 (TLS 多憑證狀態擴充功能)。

啟用 OCSP 主動推播時,ssl-stapling 互斥鎖用來控制對 OCSP 主動推播快取的存取,以防止資料損毀,而 sss-stapling-refresh 互斥鎖則用來控制刷新 OCSP 回應。這些互斥鎖可以使用 Mutex 指令來設定。

top

SSLVerifyClient 指令

說明用戶端憑證驗證類型
語法SSLVerifyClient 等級
預設SSLVerifyClient none
內容伺服器設定、虛擬主機、目錄、.htaccess
覆寫AuthConfig
狀態擴充
模組mod_ssl

此指令會設定用戶端驗證的憑證驗證等級。請注意,此指令可在每位伺服器和每個目錄環境中使用。在每位伺服器環境中,它套用至建立連線時標準 SSL 交握中使用的用戶端驗證流程。在每個目錄環境中,它會強制在讀取 HTTP 要求但傳送 HTTP 回應之前,使用重新設定的用戶端驗證等級 SSL 重新協商。

以下等級可用於level

  • none:完全不需要用戶端憑證
  • optional:用戶端可以提供有效的憑證
  • require:用戶端必須提供有效的憑證
  • optional_no_ca:用戶端可以提供有效的憑證
    但可能無法(順利)驗證。無法依靠此選項進行用戶端驗證。

範例

SSLVerifyClient require
top

SSLVerifyDepth 指令

說明用戶端憑證驗證中 CA 憑證的最大深度
語法SSLVerifyDepth 數字
預設SSLVerifyDepth 1
內容伺服器設定、虛擬主機、目錄、.htaccess
覆寫AuthConfig
狀態擴充
模組mod_ssl

此指令會設定 mod_ssl 應該驗證到什麼深度才會決定用戶端沒有有效的憑證。請注意,此指令可在每位伺服器和每個目錄環境中使用。在每位伺服器環境中,它套用至建立連線時標準 SSL 交握中使用的用戶端驗證流程。在每個目錄環境中,它會強制在讀取 HTTP 要求但傳送 HTTP 回應之前,使用重新設定的用戶端驗證深度 SSL 重新協商。

深度實際上是中間憑證頒發者的最大數量,亦即,驗證用戶端憑證時最多允許追蹤的 CA 憑證數量。深度為 0 表示僅接受自簽署的用戶端憑證,預設的深度 1 表示用戶端憑證可以是自簽署的,或必須由伺服器直接知道的 CA 簽署(亦即,CA 的憑證在 SSLCACertificatePath 下),等等。

範例

SSLVerifyDepth 10

可用語言:  en  |  fr 

top

意見

請注意
此處並非問與答區段。發布在這裡的留言應指向關於改善文件或伺服器的建議,且如果留言已 implemented 或被認為無效/與主題無關,我們的版主可能會將其移除。關於如何管理 Apache HTTP 伺服器的問題應導向我們的 IRC 頻道 #httpd,位於 Libera.chat,或傳送至我們的 郵寄名單