OpenSSL

密碼學和 SSL/TLS 工具包

openssl-s_client

名稱

openssl-s_client - SSL/TLS 伺服器程式

語法

openssl s_client [-help] [-ssl_config section] [-connect host:port] [-host hostname] [-port port] [-bind host:port] [-proxy host:port] [-proxy_user userid] [-proxy_pass arg] [-unix path] [-4] [-6] [-quic] [-servername name] [-noservername] [-verify depth] [-verify_return_error] [-verify_quiet] [-verifyCAfile filename] [-verifyCApath dir] [-verifyCAstore uri] [-cert filename] [-certform DER|PEM|P12] [-cert_chain filename] [-build_chain] [-CRL filename] [-CRLform DER|PEM] [-crl_download] [-key filename|uri] [-keyform DER|PEM|P12|ENGINE] [-pass arg] [-chainCAfile filename] [-chainCApath directory] [-chainCAstore uri] [-requestCAfile filename] [-dane_tlsa_domain domain] [-dane_tlsa_rrdata rrdata] [-dane_ee_no_namechecks] [-reconnect] [-showcerts] [-prexit] [-no-interactive] [-debug] [-trace] [-nocommands] [-adv] [-security_debug] [-security_debug_verbose] [-msg] [-timeout] [-mtu size] [-no_etm] [-no_ems] [-keymatexport label] [-keymatexportlen len] [-msgfile filename] [-nbio_test] [-state] [-nbio] [-crlf] [-ign_eof] [-no_ign_eof] [-psk_identity identity] [-psk key] [-psk_session file] [-quiet] [-sctp] [-sctp_label_bug] [-fallback_scsv] [-async] [-maxfraglen len] [-max_send_frag] [-split_send_frag] [-max_pipelines] [-read_buf] [-ignore_unexpected_eof] [-bugs] [-no_tx_cert_comp] [-no_rx_cert_comp] [-comp] [-no_comp] [-brief] [-legacy_server_connect] [-no_legacy_server_connect] [-allow_no_dhe_kex] [-prefer_no_dhe_kex] [-sigalgs sigalglist] [-curves curvelist] [-cipher cipherlist] [-ciphersuites val] [-serverpref] [-starttls protocol] [-name hostname] [-xmpphost hostname] [-name hostname] [-tlsextdebug] [-no_ticket] [-sess_out filename] [-serverinfo types] [-sess_in filename] [-serverinfo types] [-status] [-alpn protocols] [-nextprotoneg protocols] [-ct] [-noct] [-ctlogfile] [-keylogfile file] [-early_data file] [-enable_pha] [-use_srtp value] [-srpuser value] [-srppass value] [-srp_lateuser] [-srp_moregroups] [-srp_strength number] [-ktls] [-tfo] [-nameopt option] [-no_ssl3] [-no_tls1] [-no_tls1_1] [-no_tls1_2] [-no_tls1_3] [-ssl3] [-tls1] [-tls1_1] [-tls1_2] [-tls1_3] [-dtls] [-dtls1] [-dtls1_2] [-xkey infile] [-xcert file] [-xchain file] [-xchain_build file] [-xcertform DER|PEM]> [-xkeyform DER|PEM]> [-CAfile file] [-no-CAfile] [-CApath dir] [-no-CApath] [-CAstore uri] [-no-CAstore] [-bugs] [-no_comp] [-comp] [-no_ticket] [-serverpref] [-client_renegotiation] [-legacy_renegotiation] [-no_renegotiation] [-no_resumption_on_reneg] [-legacy_server_connect] [-no_legacy_server_connect] [-no_etm] [-allow_no_dhe_kex] [-prefer_no_dhe_kex] [-prioritize_chacha] [-strict] [-sigalgs algs] [-client_sigalgs algs] [-groups groups] [-curves curves] [-named_curve curve] [-cipher ciphers] [-ciphersuites 1.3ciphers] [-min_protocol minprot] [-max_protocol maxprot] [-record_padding padding] [-debug_broken_protocol] [-no_middlebox] [-rand files] [-writerand file] [-provider name] [-provider-path path] [-propquery propq] [-engine id] [-ssl_client_engine id] [-allow_proxy_certs] [-attime timestamp] [-no_check_time] [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict] [-issuer_checks] [-enable_server_rpk] [-enable_client_rpk] [host:port]

說明

此指令實作一個通用 SSL/TLS 伺服器程式,它會使用 SSL/TLS 連線到遠端主機。它是 SSL 伺服器的非常有用的診斷工具。

選項

除了下列選項之外,此指令還支援 SSL_CONF_cmd(3) 手冊頁面「支援的命令列指令」區段中記載的常見選項和僅伺服器選項。

-help

列印使用訊息。

-ssl_config 區段

使用組態檔的指定區段來組態 SSL_CTX 物件。

-connect 主機:

這會指定要連線的主機和選用埠。也可以使用選用的目標位置引數來選擇主機和埠。如果未指定此引數或目標位置引數,則會嘗試以埠 4433 連線到本機主機。

-host 主機名稱

要連線的主機;請改用 -connect

-port

連線到指定的埠;請改用 -connect

-bind 主機:

這會指定主機位址和/或埠,作為連線來源。對於 Unix 領域套接字,埠會被忽略,而主機會用作來源套接字位址。

-proxy 主機:

當與 -connect 旗標一起使用時,程式會使用此旗標指定的主機和埠,並發出 HTTP CONNECT 指令以連線到目標伺服器。

-proxy_user 使用者 ID

當與 -proxy 旗標一起使用時,程式會嘗試使用基本 (base64) 驗證向指定的代理伺服器進行驗證。注意:基本驗證並不安全;憑證會在建立任何 TLS/SSL 會話之前以容易還原的 base64 編碼傳送給代理伺服器。因此,任何有能力嗅探/追蹤網路的人都可以輕鬆還原這些憑證。請小心使用。

-proxy_pass 引數

代理伺服器密碼來源,與 -proxy_user 旗標一起使用。有關 arg 格式的詳細資訊,請參閱 openssl-passphrase-options(1)

-unix 路徑

透過指定的 Unix 領域套接字連線。

-4

僅使用 IPv4。

-6

僅使用 IPv6。

-quic

使用 QUIC 協定連線。如果指定,則也必須提供 -alpn 選項。

-servername 名稱

將 ClientHello 訊息中的 TLS SNI (伺服器名稱指示) 擴充套件設定為指定值。如果未提供 -servername,則 TLS SNI 擴充套件會填入給予 -connect 的名稱(如果符合 DNS 名稱格式)。如果也未提供 -connect,則 SNI 會設定為「localhost」。自 OpenSSL 1.1.1 起,這是預設值。

儘管 SNI 通常應該是 DNS 名稱而不是 IP 位址,但如果提供了 -servername,則會傳送該名稱,無論它是否為 DNS 名稱。

此選項無法與 -noservername 搭配使用。

-noservername

禁止在 ClientHello 訊息中傳送 SNI (伺服器名稱指示) 擴充套件。無法與 -servername-dane_tlsa_domain 選項搭配使用。

-cert 檔名

如果伺服器要求,則要使用的用戶端憑證。預設是不使用憑證。

可以使用 -cert_chain 指定用戶端憑證的鏈。

-certform DER|PEM|P12

要使用的用戶端憑證檔案格式;預設未指定。有關詳細資訊,請參閱 openssl-format-options(1)

-cert_chain

嘗試建立與透過 -cert 選項指定的憑證相關的憑證鏈時,要使用的不受信任憑證的檔案或 URI。輸入可以是 PEM、DER 或 PKCS#12 格式。

-build_chain

指定應用程式是否應建立要提供給伺服器的用戶端憑證鏈。

-CRL 檔名

用於檢查伺服器憑證的 CRL 檔案。

-CRLform DER|PEM

CRL 檔案格式;預設未指定。有關詳細資訊,請參閱 openssl-format-options(1)

-crl_download

從憑證中的分發點下載 CRL。

-key 檔名|uri

要使用的用戶端私密金鑰。如果未指定,則會使用憑證檔案來讀取金鑰。

-keyform DER|PEM|P12|ENGINE

金鑰格式;預設未指定。有關詳細資訊,請參閱 openssl-format-options(1)

-pass arg

私密金鑰和憑證檔案密碼來源。有關 arg 格式的詳細資訊,請參閱 openssl-passphrase-options(1)

-verify 深度

要使用的驗證深度。這會指定伺服器憑證鏈的最大長度,並開啟伺服器憑證驗證。目前,驗證作業會在發生錯誤後繼續進行,因此可以查看憑證鏈的所有問題。作為副作用,連線永遠不會因為伺服器憑證驗證失敗而失敗。

-verify_return_error

傳回驗證錯誤,而非繼續。這通常會以致命錯誤中止握手。

-verify_quiet

將驗證輸出限制為僅顯示錯誤。

-verifyCAfile 檔名

PEM 格式的檔案,其中包含用於驗證伺服器憑證的可信賴憑證。

-verifyCApath 目錄

目錄,其中包含用於驗證伺服器憑證的可信賴憑證。此目錄必須為「雜湊格式」,如需詳細資訊,請參閱 openssl-verify(1)

-verifyCAstore uri

儲存體的 URI,其中包含用於驗證伺服器憑證的可信賴憑證。

-chainCAfile 檔案

PEM 格式的檔案,其中包含在嘗試建立用戶端憑證鏈時要使用的可信賴憑證。

-chainCApath 目錄

目錄,其中包含用於建立提供給伺服器的用戶端憑證鏈的可信賴憑證。此目錄必須為「雜湊格式」,如需詳細資訊,請參閱 openssl-verify(1)

-chainCAstore uri

儲存體的 URI,其中包含在嘗試建立用戶端憑證鏈時要使用的可信賴憑證。URI 可能表示單一憑證,也可能是憑證集合。對於 file: 範式的 URI,這會作用為 -chainCAfile-chainCApath,視 URI 表示目錄或單一檔案而定。如需 file: 範式的詳細資訊,請參閱 ossl_store-file(7)

-requestCAfile 檔案

包含憑證清單的檔案,其主體名稱將在 certificate_authorities 延伸模組中傳送給伺服器。僅支援 TLS 1.3

-dane_tlsa_domain 網域

啟用 RFC6698/RFC7671 DANE TLSA 驗證,並指定 TLSA 基底網域,此網域會成為預設的 SNI 提示和主機名稱檢查的主要參考識別碼。這必須與下方 -dane_tlsa_rrdata 選項的至少一個執行個體搭配使用。

當 DANE 驗證成功時,診斷輸出將包含 TLSA 記錄驗證鏈憑證的最低深度(最接近 0)。當該 TLSA 記錄為簽署(而非比對)鏈頂端憑證的「2 1 0」信任錨定公開金鑰時,結果會報告為「TA 公開金鑰已驗證」。否則,TLSA 記錄會在正深度「比對 TA 憑證」,或在深度 0「比對 EE 憑證」。

-dane_tlsa_rrdata rrdata

使用一次或多次來指定與目標服務相關聯的 DANE TLSA RRset 的 RRDATA 欄位。rrdata 值以「簡報格式」指定,也就是四個空白分隔的欄位,分別指定使用方式、選擇器、比對類型和關聯資料,其中最後一個會以十六進位編碼。關聯資料欄位會忽略選用的空白。例如

$ openssl s_client -brief -starttls smtp \
  -connect smtp.example.com:25 \
  -dane_tlsa_domain smtp.example.com \
  -dane_tlsa_rrdata "2 1 1
    B111DD8A1C2091A89BD4FD60C57F0716CCE50FEEFF8137CDBEE0326E 02CF362B" \
  -dane_tlsa_rrdata "2 1 1
    60B87575447DCBA2A36B7D11AC09FB24A9DB406FEE12D2CC90180517 616E8A18"
...
Verification: OK
Verified peername: smtp.example.com
DANE TLSA 2 1 1 ...ee12d2cc90180517616e8a18 matched TA certificate at depth 1
...
-dane_ee_no_namechecks

這會在透過 DANE-EE(3) TLSA 記錄進行驗證時停用伺服器名稱檢查。對於某些應用程式,主要是網路瀏覽器,由於「未知金鑰分享」攻擊,停用名稱檢查並不安全,其中惡意伺服器可以讓客戶端相信與受害伺服器的連線,反而是與惡意伺服器的安全連線。惡意伺服器隨後可能會違反跨來源指令碼限制。因此,儘管 RFC7671 的文字,名稱檢查預設會針對 DANE-EE(3) TLSA 記錄啟用,並可以在安全執行的應用程式中停用。特別是,SMTP 和 XMPP 客戶端應設定此選項,因為 SRV 和 MX 記錄已經讓遠端網域可以將客戶端連線重新導向到它選擇的任何伺服器,且在任何情況下,SMTP 和 XMPP 客戶端都不會執行從遠端伺服器下載的指令碼。

-reconnect

使用相同的會話 ID 重新連線到相同的伺服器 5 次,這可以用作會話快取運作的測試。

-showcerts

顯示伺服器傳送的伺服器憑證清單:它只包含伺服器傳送的憑證(依伺服器傳送的順序)。它不是已驗證的鏈。

-prexit

當程式結束時列印會話資訊。這將總是嘗試列印資訊,即使連線失敗。通常,只有在連線成功時才會列印資訊一次。此選項很有用,因為正在使用的加密法可能會重新協商,或者連線可能會失敗,因為需要客戶端憑證或僅在嘗試存取特定 URL 後才要求。注意:此選項產生的輸出並不總是準確的,因為可能從未建立連線。

-no-interactive

此旗標可用於在非互動模式下執行客戶端。

-state

列印 SSL 會話狀態。

-debug

列印詳細的偵錯資訊,包括所有流量的十六進位轉儲。

-nocommands

不要使用互動式命令字母。

-adv

使用進階命令模式。

-security_debug

啟用安全性偵錯訊息。

-security_debug_verbose

輸出更多安全性偵錯輸出。

-msg

顯示協定訊息。

-timeout

啟用 DTLS 連線上的傳送/接收逾時。

-mtu 大小

將鏈路層的 MTU 設為指定大小。

-no_etm

停用加密再驗證協商。

-no_ems

停用延伸主密鑰協商。

-keymatexport 標籤

使用指定的標籤匯出金鑰材料。

-keymatexportlen 長度

匯出指定位元組數量的金鑰材料;預設為 20。

顯示所有協定訊息和十六進位轉儲。

-trace

顯示協定訊息的詳細追蹤輸出。

-msgfile 檔名

傳送 -msg-trace 輸出的檔案,預設為標準輸出。

-nbio_test

測試非封鎖 I/O

-nbio

開啟非封鎖 I/O

-crlf

此選項將終端機的換行符號轉換為 CR+LF,這是某些伺服器所要求的。

-ign_eof

在輸入中到達檔案結尾時,禁止關閉連線。

-quiet

禁止列印階段和憑證資訊。這也會隱含開啟 -ign_eof

-no_ign_eof

在輸入中到達檔案結尾時,關閉連線。可用於在 -quiet 之後覆寫隱含的 -ign_eof

-psk_identity 身分

在使用 PSK 加密套件時,使用 PSK 身分 身分。預設值為「Client_identity」(不含引號)。

-psk 金鑰

在使用 PSK 加密套件時,使用 PSK 金鑰 金鑰。金鑰以十六進位數字表示,不含前導 0x,例如 -psk 1a2b3c4d。必須提供此選項才能使用 PSK 加密。

-psk_session 檔案

使用儲存在 檔案 中的 pem 編碼 SSL_SESSION 資料作為 PSK 的基礎。請注意,這僅在協商 TLSv1.3 時才會運作。

-sctp

在 DTLS 中使用 SCTP 作為傳輸協定,而非 UDP。必須與 -dtls-dtls1-dtls1_2 搭配使用。此選項僅在 OpenSSL 支援 SCTP 的情況下可用。

-sctp_label_bug

在計算 DTLS/SCTP 的端點對共用密鑰時,使用舊版 OpenSSL 實作的不正確行為。這允許與舊版損毀的實作進行通訊,但會破壞與正確實作的互通性。必須與 -sctp 搭配使用。此選項僅在 OpenSSL 支援 SCTP 的情況下可用。

-fallback_scsv

在 ClientHello 中傳送 TLS_FALLBACK_SCSV。

-async

開啟非同步模式。加密作業將非同步執行。這僅在透過 -engine 選項使用非同步引擎時才會生效。為了測試目的,可以使用虛擬非同步引擎 (dasync)(如果可用)。

-maxfraglen 長度

啟用最大片段長度協商;允許的值為 512102420484096

-max_send_frag int

傳送資料片段的最大大小。有關更多資訊,請參閱 SSL_CTX_set_max_send_fragment(3)

-split_send_frag int

用於分割資料以進行加密管線的大小。如果一次寫入的資料比此值還多,則會將資料分割成多個管線,最多可達 max_pipelines 所定義的最大管線數。僅當已協商出適當的密碼組、已載入支援管線的引擎,且 max_pipelines 大於 1 時,此選項才會產生作用。有關更多資訊,請參閱 SSL_CTX_set_split_send_fragment(3)

-max_pipelines int

要使用的加密/解密管線的最大數目。僅當已載入支援管線的引擎(例如 dasync 引擎)且已協商出適當的密碼組時,此選項才會產生作用。預設值為 1。有關更多資訊,請參閱 SSL_CTX_set_max_pipelines(3)

-read_buf int

要針對連線使用的預設讀取緩衝區大小。僅當緩衝區大小大於原本會使用的尺寸且正在使用管線時,此選項才會產生作用(有關更多資訊,請參閱 SSL_CTX_set_default_read_buffer_len(3))。

-ignore_unexpected_eof

某些 TLS 實作在關閉時不會傳送強制性的 close_notify 警示。如果應用程式嘗試等待 close_notify 警示,但對端在未傳送警示的情況下關閉連線,則會產生錯誤。啟用此選項後,對端不需要傳送 close_notify 警示,而關閉的連線將被視為已收到 close_notify 警示。有關關閉連線的更多資訊,請參閱 SSL_shutdown(3)

-bugs

SSL 和 TLS 實作中存在數個已知的錯誤。加入此選項可啟用各種解決方法。

-no_tx_cert_comp

停用傳送 TLSv1.3 壓縮憑證的支援。

-no_rx_cert_comp

停用接收 TLSv1.3 壓縮憑證的支援。

-comp

啟用 SSL/TLS 壓縮的支援。此選項在 OpenSSL 1.1.0 中引入。不建議使用 TLS 壓縮,且從 OpenSSL 1.1.0 開始預設為關閉。TLS 壓縮只能在安全性等級 1 或更低時使用。從 OpenSSL 3.2.0 以上開始,預設安全性等級為 2,因此此選項在未同時變更安全性等級的情況下不會產生作用。使用 -cipher 選項來變更安全性等級。有關更多資訊,請參閱 openssl-ciphers(1)

-no_comp

停用 SSL/TLS 壓縮支援。不建議使用 TLS 壓縮,且在 OpenSSL 1.1.0 中預設為關閉。

-brief

僅提供連線參數的簡要摘要,而非一般詳細的輸出。

-sigalgs sigalglist

指定由客戶端傳送的簽章演算法清單。伺服器會根據其偏好選項從清單中選取一項。例如字串,請參閱 SSL_CTX_set1_sigalgs(3)

-curves curvelist

指定由客戶端傳送的支援曲線清單。曲線最終由伺服器選取。如需所有曲線的清單,請使用

$ openssl ecparam -list_curves
-cipher cipherlist

這允許修改由客戶端傳送的 TLSv1.2 及以下的加密清單。此清單將與已設定的任何 TLSv1.3 加密組套合併。儘管伺服器會決定使用哪個加密組套,但它應採用客戶端傳送清單中第一個支援的加密。請參閱 openssl-ciphers(1) 以取得更多資訊。

-ciphersuites val

這允許修改由客戶端傳送的 TLSv1.3 加密組套。此清單將與已設定的任何 TLSv1.2 及以下的加密組套合併。儘管伺服器會決定使用哪個加密組套,但它應採用客戶端傳送清單中第一個支援的加密。請參閱 openssl-ciphers(1) 以取得更多資訊。此清單的格式為以冒號 (":") 分隔的 TLSv1.3 加密組套名稱清單。

-starttls protocol

傳送特定於協定的訊息以切換至 TLS 進行通訊。protocol 是預期協定的關鍵字。目前,唯一支援的關鍵字為「smtp」、「pop3」、「imap」、「ftp」、「xmpp」、「xmpp-server」、「irc」、「postgres」、「mysql」、「lmtp」、「nntp」、「sieve」和「ldap」。

-xmpphost hostname

此選項與「-starttls xmpp」或「-starttls xmpp-server」搭配使用時,會指定串流元素「to」屬性的主機。如果未指定此選項,則會使用與「-connect」指定的相同主機。

此選項是「xmpp」和「xmpp-server」的 -name 選項別名。

-name hostname

此選項用於指定與 -starttls 選項搭配使用的各種協定的主機資訊。目前只有「xmpp」、「xmpp-server」、「smtp」和「lmtp」可以使用這個 -name 選項。

如果此選項與「-starttls xmpp」或「-starttls xmpp-server」搭配使用,則會指定串流元素「to」屬性的主機。如果未指定此選項,則會使用與「-connect」指定的相同主機。

如果此選項與「-starttls lmtp」或「-starttls smtp」搭配使用,則會分別指定要在「LMTP LHLO」或「SMTP EHLO」訊息中使用的名稱。如果未指定此選項,則會使用「mail.example.com」。

-tlsextdebug

列印從伺服器接收到的任何 TLS 擴充功能的十六進位轉儲。

-no_ticket

停用 RFC4507bis 會話票證支援。

-sess_out 檔名

將 SSL 會話輸出至 檔名

-sess_in 檔名

檔名 載入 SSL 會話。用戶端將嘗試從此會話恢復連線。

-serverinfo 類型

一個由逗號分隔的 TLS 擴充功能類型清單(0 到 65535 之間的數字)。每個類型都將作為一個空的 ClientHello TLS 擴充功能傳送。伺服器的回應(如果有)將被編碼並顯示為 PEM 檔案。

-status

向伺服器傳送憑證狀態要求(OCSP 釘選)。伺服器的回應(如果有)將被列印出來。

-alpn 協定, -nextprotoneg 協定

這些旗標分別啟用應用層協定協商或下一個協定協商 (NPN) 擴充功能。ALPN 是 IETF 標準,取代了 NPN。協定清單是一個由逗號分隔的協定名稱清單,用戶端應宣告支援。清單應首先包含最理想的協定。協定名稱是可列印的 ASCII 字串,例如「http/1.1」或「spdy/3」。一個空的協定清單會被特別處理,並將導致用戶端宣告支援 TLS 擴充功能,但在收到包含伺服器支援協定清單的 ServerHello 之後立即斷線。如果使用 -tls1_3,則無法指定旗標 -nextprotoneg

-ct, -noct

使用這兩個選項之一來控制是否啟用憑證透明度 (CT)(-ct)或停用(-noct)。如果啟用 CT,將從伺服器要求簽署憑證時間戳記 (SCT),並在握手完成時報告。

啟用 CT 也會啟用 OCSP 釘選,因為這是 SCT 的一種可能的傳遞方法。

-ctlogfile

一個包含已知憑證透明度記錄清單的檔案。請參閱 SSL_CTX_set_ctlog_list_file(3) 以取得預期的檔案格式。

-keylogfile 檔案

將 TLS 機密附加到指定的關鍵記錄檔,以便外部程式(例如 Wireshark)可以解密 TLS 連線。

-early_data 檔案

讀取指定檔案的內容,並嘗試將其作為早期資料傳送至伺服器。這只會在支援早期資料的已恢復會話中運作,且當伺服器接受早期資料時。

-enable_pha

僅適用於 TLSv1.3,傳送握手後驗證擴充功能。無論是否透過 -cert 提供憑證,都會執行此動作。

-use_srtp

提供 SRTP 金鑰管理,其中 是分號分隔的設定檔清單。

-srpuser

將 SRP 使用者名稱設定為指定值。此選項已過時。

-srppass

將 SRP 密碼設定為指定值。此選項已過時。

-srp_lateuser

第二個 ClientHello 訊息的 SRP 使用者名稱。此選項已過時。

-srp_moregroups 此選項已過時。

容許已知的 gN 值以外的值。

-srp_strength 數字

設定 N 的最小可接受長度(以位元為單位)。此選項已過時。

-ktls

啟用 Kernel TLS 進行傳送和接收。此選項於 OpenSSL 3.2.0 中引入。預設情況下,Kernel TLS 在 OpenSSL 3.2.0 中關閉。

-tfo

啟用透過 TCP 快速開啟(RFC7413)建立連線。

-no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2, -no_tls1_3, -ssl3, -tls1, -tls1_1, -tls1_2, -tls1_3

請參閱 openssl(1) 中的「TLS 版本選項」

-dtls, -dtls1, -dtls1_2

這些選項指定使用 DTLS,而非 TLS。請參閱 openssl(1) 中的「TLS 版本選項」

-nameopt 選項

此選項指定主旨或發行者名稱的顯示方式。有關詳細資訊,請參閱 openssl-namedisplay-options(1)

-xkey 輸入檔案, -xcert 檔案, -xchain 檔案, -xchain_build 檔案, -xcertform DER|PEM, -xkeyform DER|PEM

設定延伸憑證驗證選項。有關詳細資訊,請參閱 openssl-verification-options(1) 中的「延伸驗證選項」

-CAfile 檔案, -no-CAfile, -CApath 目錄, -no-CApath, -CAstore uri, -no-CAstore

有關詳細資訊,請參閱 openssl-verification-options(1) 中的「受信任憑證選項」

-bugs, -comp, -no_comp, -no_ticket, -serverpref, -client_renegotiation, -legacy_renegotiation, -no_renegotiation, -no_resumption_on_reneg, -legacy_server_connect, -no_legacy_server_connect, -no_etm -allow_no_dhe_kex, -prefer_no_dhe_kex, -prioritize_chacha, -strict, -sigalgs algs, -client_sigalgs algs, -groups groups, -curves curves, -named_curve curve, -cipher ciphers, -ciphersuites 1.3ciphers, -min_protocol minprot, -max_protocol maxprot, -record_padding padding, -debug_broken_protocol, -no_middlebox

有關詳細資訊,請參閱 SSL_CONF_cmd(3) 中的「支援的命令列指令」

-rand 檔案, -writerand 檔案

有關詳細資訊,請參閱 openssl(1) 中的「隨機狀態選項」

-provider 名稱
-provider-path 路徑
-propquery propq

請參閱 openssl(1) 中的「提供者選項」provider(7)property(7)

-engine id

請參閱 openssl(1) 中的「引擎選項」。此選項已棄用。

-ssl_client_engine id

指定要使用於客戶端憑證操作的引擎。

-allow_proxy_certs-attime-no_check_time-check_ss_sig-crl_check-crl_check_all-explicit_policy-extended_crl-ignore_critical-inhibit_any-inhibit_map-no_alt_chains-partial_chain-policy-policy_check-policy_print-purpose-suiteB_128-suiteB_128_only-suiteB_192-trusted_first-use_deltas-auth_level-verify_depth-verify_email-verify_hostname-verify_ip-verify_name-x509_strict -issuer_checks

設定憑證鏈驗證的各種選項。有關詳細資訊,請參閱 openssl-verification-options(1) 中的「驗證選項」

驗證錯誤會顯示於除錯中,但除非使用 -verify_return_error 選項,否則指令會繼續進行。

-enable_server_rpk

啟用支援從伺服器接收原始公開金鑰 (RFC7250)。伺服器使用 X.509 憑證變成非必要,而支援原始公開金鑰的伺服器可能會選擇使用它們。不支援原始公開金鑰或偏好使用 X.509 憑證的伺服器仍然可以選擇像往常一樣傳送 X.509 憑證。

-enable_client_rpk

啟用支援將原始公開金鑰 (RFC7250) 傳送至伺服器。如果伺服器要求,且已設定適當的金鑰和公開憑證配對,則客戶端會傳送原始公開金鑰。儘管如此,有些伺服器可能不會要求任何客戶端憑證,或可能會要求憑證。

主機:

與其提供 -connect,目標主機名稱和選用埠可以作為所有選項後的單一位置參數提供。如果沒有提供此參數或 -connect,則會回復為嘗試連線至 localhost 上的 4433 埠。

已連線指令 (基本)

如果已與 SSL/TLS 伺服器建立連線,則會顯示從伺服器接收到的任何資料,且任何按鍵都會傳送至伺服器。如果已到達檔案結尾,則會關閉連線。

在互動使用時 (表示未提供 -quiet-ign_eof),且未提供 -adv-nocommands,則會進入「基本」指令模式。在此模式中,會辨識執行特殊操作的特定指令。這些指令為必須出現在行開頭的字母。行中初始字母之後的所有進一步資料都會被忽略。指令如下列出。

Q

結束目前的 SSL 連線並離開。

R

重新協商 SSL 會話(僅限 TLSv1.2 及以下版本)。

C

嘗試使用恢復性握手重新連線至伺服器。

k

傳送金鑰更新訊息至伺服器(僅限 TLSv1.3)。

K

傳送金鑰更新訊息至伺服器並要求伺服器傳送回訊息(僅限 TLSv1.3)。

已連線的命令(進階)

如果已提供 -adv,則會進入「進階」命令模式。與基本模式一樣,如果已與 SSL/TLS 伺服器建立連線,則會顯示從伺服器接收到的任何資料,且任何按鍵動作都會傳送至伺服器。如果已到達檔案結尾,則會關閉連線。

特殊命令可透過將其括在花括號中來提供,例如「{help}」或「{quit}」。這些命令可以出現在輸入至 s_client 的文字中的任何位置,但不會傳送至伺服器。有些命令可以透過在命令名稱結尾加上「:」並提供引數來接收引數,例如「{keyup:req}」。有些命令僅在已協商特定通訊協定版本時才可用。

如果輸入至 s_client 的行尾出現換行符號,則也會傳送至伺服器。如果命令出現在單獨一行且同一行中沒有其他文字,則會抑制換行符號且不會傳送至伺服器。

可辨識下列命令。

help

列印關於可用命令的摘要說明文字。

quit

關閉與對方的連線

reconnect

重新連線至對方並嘗試恢復性握手

keyup

傳送金鑰更新訊息。僅限 TLSv1.3。此命令會接收一個選用引數。如果提供「req」引數,則也會要求對方更新其金鑰。否則,如果提供「noreq」,則不會要求對方更新其金鑰。預設為「req」。

reneg

與伺服器啟動重新協商。(僅限 D)TLSv1.2 或以下版本。

fin

在目前的串流上指出 FIN。僅限 QUIC。傳送 FIN 後,針對此串流輸入的任何其他文字都會被忽略。

備註

此命令可用於除錯 SSL 伺服器。若要連線至 SSL HTTP 伺服器,通常會使用命令

openssl s_client -connect servername:443

(https 使用埠 443)。如果連線成功,則可以提供 HTTP 命令,例如「GET /」來擷取網頁。

如果握手失敗,則有幾個可能的原因,如果沒有明顯的原因,例如沒有客戶端憑證,則可以嘗試使用 -bugs-ssl3-tls1-no_ssl3-no_tls1 選項,以防出現錯誤的伺服器。特別是在向 OpenSSL 郵件清單提交錯誤報告之前,您應該使用這些選項。

在嘗試讓客戶端憑證正常運作時,一個常見的問題是,網頁客戶端抱怨它沒有憑證或提供一個空的清單供選擇。這通常是因為伺服器在請求憑證時,沒有在其「可接受的 CA 清單」中傳送客戶端的憑證授權。透過使用這個指令,可以檢視和檢查 CA 清單。但是,有些伺服器只在請求特定 URL 後,才會要求客戶端驗證。為了在這種情況下取得清單,有必要使用 -prexit 選項,並傳送 HTTP 請求以取得適當的頁面。

如果使用 -cert 選項在指令列中指定憑證,則除非伺服器特別要求客戶端憑證,否則不會使用該憑證。因此,僅在指令列中包含客戶端憑證,並不能保證憑證會正常運作。

如果在驗證伺服器憑證時遇到問題,則可以使用 -showcerts 選項來顯示伺服器傳送的所有憑證。

這個指令是一個測試工具,旨在在任何憑證驗證錯誤後繼續握手。因此,它會接受對等端傳送的任何憑證鏈(受信任或不受信任)。非測試應用程式不應這樣做,因為這會使它們容易受到 MITM 攻擊。此行為可以使用 -verify_return_error 選項進行變更:任何驗證錯誤都會被傳回,並中止握手。

如果伺服器或防火牆要求連線來自某些特定地址和或埠,則 -bind 選項可能很有用。

錯誤

由於這個程式有很多選項,而且因為所使用的某些技術相當舊,因此這個指令的 C 原始碼相當難以閱讀,也不是事情應該如何運作的範例。典型的 SSL 客户端程式會簡單得多。

-prexit 選項有點像是一種駭客手法。我們應該在每次重新協商會話時報告資訊。

另請參閱

openssl(1)openssl-sess_id(1)openssl-s_server(1)openssl-ciphers(1)SSL_CONF_cmd(3)SSL_CTX_set_max_send_fragment(3)SSL_CTX_set_split_send_fragment(3)SSL_CTX_set_max_pipelines(3)ossl_store-file(7)

歷史

-no_alt_chains 選項新增於 OpenSSL 1.1.0。-name 選項新增於 OpenSSL 1.1.1。

-certform 選項已於 OpenSSL 3.0.0 中過時,且不再生效。

-engine 選項已於 OpenSSL 3.0 中棄用。

-enable_client_rpk-enable_server_rpk-no_rx_cert_comp-no_tx_cert_comp-tfo 選項新增於 OpenSSL 3.2。

版權所有 2000-2023 OpenSSL 專案作者。保留所有權利。

根據 Apache License 2.0(「授權」)授權。您只能在遵守授權的規定下使用此檔案。您可以在原始程式碼散佈中的 LICENSE 檔案中取得一份副本,或至 https://www.openssl.org/source/license.html 取得。