1=pod 2{- OpenSSL::safe::output_do_not_edit_headers(); -} 3 4=head1 NAME 5 6openssl-s_client - SSL/TLS client program 7 8=head1 SYNOPSIS 9 10B<openssl> B<s_client> 11[B<-help>] 12[B<-ssl_config> I<section>] 13[B<-connect> I<host>:I<port>] 14[B<-host> I<hostname>] 15[B<-port> I<port>] 16[B<-bind> I<host>:I<port>] 17[B<-proxy> I<host>:I<port>] 18[B<-proxy_user> I<userid>] 19[B<-proxy_pass> I<arg>] 20[B<-unix> I<path>] 21[B<-4>] 22[B<-6>] 23[B<-quic>] 24[B<-servername> I<name>] 25[B<-noservername>] 26[B<-verify> I<depth>] 27[B<-verify_return_error>] 28[B<-verify_quiet>] 29[B<-verifyCAfile> I<filename>] 30[B<-verifyCApath> I<dir>] 31[B<-verifyCAstore> I<uri>] 32[B<-cert> I<filename>] 33[B<-certform> B<DER>|B<PEM>|B<P12>] 34[B<-cert_chain> I<filename>] 35[B<-build_chain>] 36[B<-CRL> I<filename>] 37[B<-CRLform> B<DER>|B<PEM>] 38[B<-crl_download>] 39[B<-key> I<filename>|I<uri>] 40[B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>] 41[B<-pass> I<arg>] 42[B<-chainCAfile> I<filename>] 43[B<-chainCApath> I<directory>] 44[B<-chainCAstore> I<uri>] 45[B<-requestCAfile> I<filename>] 46[B<-dane_tlsa_domain> I<domain>] 47[B<-dane_tlsa_rrdata> I<rrdata>] 48[B<-dane_ee_no_namechecks>] 49[B<-reconnect>] 50[B<-showcerts>] 51[B<-prexit>] 52[B<-no-interactive>] 53[B<-debug>] 54[B<-trace>] 55[B<-nocommands>] 56[B<-adv>] 57[B<-security_debug>] 58[B<-security_debug_verbose>] 59[B<-msg>] 60[B<-timeout>] 61[B<-mtu> I<size>] 62[B<-no_etm>] 63[B<-no_ems>] 64[B<-keymatexport> I<label>] 65[B<-keymatexportlen> I<len>] 66[B<-msgfile> I<filename>] 67[B<-nbio_test>] 68[B<-state>] 69[B<-nbio>] 70[B<-crlf>] 71[B<-ign_eof>] 72[B<-no_ign_eof>] 73[B<-psk_identity> I<identity>] 74[B<-psk> I<key>] 75[B<-psk_session> I<file>] 76[B<-quiet>] 77[B<-sctp>] 78[B<-sctp_label_bug>] 79[B<-fallback_scsv>] 80[B<-async>] 81[B<-maxfraglen> I<len>] 82[B<-max_send_frag>] 83[B<-split_send_frag>] 84[B<-max_pipelines>] 85[B<-read_buf>] 86[B<-ignore_unexpected_eof>] 87[B<-bugs>] 88[B<-no_tx_cert_comp>] 89[B<-no_rx_cert_comp>] 90[B<-comp>] 91[B<-no_comp>] 92[B<-brief>] 93[B<-legacy_server_connect>] 94[B<-no_legacy_server_connect>] 95[B<-allow_no_dhe_kex>] 96[B<-prefer_no_dhe_kex>] 97[B<-sigalgs> I<sigalglist>] 98[B<-curves> I<curvelist>] 99[B<-cipher> I<cipherlist>] 100[B<-ciphersuites> I<val>] 101[B<-serverpref>] 102[B<-starttls> I<protocol>] 103[B<-name> I<hostname>] 104[B<-xmpphost> I<hostname>] 105[B<-name> I<hostname>] 106[B<-tlsextdebug>] 107[B<-no_ticket>] 108[B<-sess_out> I<filename>] 109[B<-serverinfo> I<types>] 110[B<-sess_in> I<filename>] 111[B<-serverinfo> I<types>] 112[B<-status>] 113[B<-alpn> I<protocols>] 114[B<-nextprotoneg> I<protocols>] 115[B<-ct>] 116[B<-noct>] 117[B<-ctlogfile>] 118[B<-keylogfile> I<file>] 119[B<-early_data> I<file>] 120[B<-enable_pha>] 121[B<-use_srtp> I<value>] 122[B<-srpuser> I<value>] 123[B<-srppass> I<value>] 124[B<-srp_lateuser>] 125[B<-srp_moregroups>] 126[B<-srp_strength> I<number>] 127[B<-ktls>] 128[B<-tfo>] 129{- $OpenSSL::safe::opt_name_synopsis -} 130{- $OpenSSL::safe::opt_version_synopsis -} 131{- $OpenSSL::safe::opt_x_synopsis -} 132{- $OpenSSL::safe::opt_trust_synopsis -} 133{- $OpenSSL::safe::opt_s_synopsis -} 134{- $OpenSSL::safe::opt_r_synopsis -} 135{- $OpenSSL::safe::opt_provider_synopsis -} 136{- $OpenSSL::safe::opt_engine_synopsis -}[B<-ssl_client_engine> I<id>] 137{- $OpenSSL::safe::opt_v_synopsis -} 138[B<-enable_server_rpk>] 139[B<-enable_client_rpk>] 140[I<host>:I<port>] 141 142=head1 DESCRIPTION 143 144This command implements a generic SSL/TLS client which 145connects to a remote host using SSL/TLS. It is a I<very> useful diagnostic 146tool for SSL servers. 147 148=head1 OPTIONS 149 150In addition to the options below, this command also supports the 151common and client only options documented 152in the "Supported Command Line Commands" section of the L<SSL_CONF_cmd(3)> 153manual page. 154 155=over 4 156 157=item B<-help> 158 159Print out a usage message. 160 161=item B<-ssl_config> I<section> 162 163Use the specified section of the configuration file to configure the B<SSL_CTX> object. 164 165=item B<-connect> I<host>:I<port> 166 167This specifies the host and optional port to connect to. It is possible to 168select the host and port using the optional target positional argument instead. 169If neither this nor the target positional argument are specified then an attempt 170is made to connect to the local host on port 4433. 171If the host string is an IPv6 address, it must be enclosed in C<[> and C<]>. 172 173=item B<-host> I<hostname> 174 175Host to connect to; use B<-connect> instead. 176 177=item B<-port> I<port> 178 179Connect to the specified port; use B<-connect> instead. 180 181=item B<-bind> I<host>:I<port> 182 183This specifies the host address and or port to bind as the source for the 184connection. For Unix-domain sockets the port is ignored and the host is 185used as the source socket address. 186If the host string is an IPv6 address, it must be enclosed in C<[> and C<]>. 187 188=item B<-proxy> I<host>:I<port> 189 190When used with the B<-connect> flag, the program uses the host and port 191specified with this flag and issues an HTTP CONNECT command to connect 192to the desired server. 193If the host string is an IPv6 address, it must be enclosed in C<[> and C<]>. 194 195=item B<-proxy_user> I<userid> 196 197When used with the B<-proxy> flag, the program will attempt to authenticate 198with the specified proxy using basic (base64) authentication. 199NB: Basic authentication is insecure; the credentials are sent to the proxy 200in easily reversible base64 encoding before any TLS/SSL session is established. 201Therefore, these credentials are easily recovered by anyone able to sniff/trace 202the network. Use with caution. 203 204=item B<-proxy_pass> I<arg> 205 206The proxy password source, used with the B<-proxy_user> flag. 207For more information about the format of B<arg> 208see L<openssl-passphrase-options(1)>. 209 210=item B<-unix> I<path> 211 212Connect over the specified Unix-domain socket. 213 214=item B<-4> 215 216Use IPv4 only. 217 218=item B<-6> 219 220Use IPv6 only. 221 222=item B<-quic> 223 224Connect using the QUIC protocol. If specified then the B<-alpn> option must also 225be provided. 226 227=item B<-servername> I<name> 228 229Set the TLS SNI (Server Name Indication) extension in the ClientHello message to 230the given value. 231If B<-servername> is not provided, the TLS SNI extension will be populated with 232the name given to B<-connect> if it follows a DNS name format. If B<-connect> is 233not provided either, the SNI is set to "localhost". 234This is the default since OpenSSL 1.1.1. 235 236Even though SNI should normally be a DNS name and not an IP address, if 237B<-servername> is provided then that name will be sent, regardless of whether 238it is a DNS name or not. 239 240This option cannot be used in conjunction with B<-noservername>. 241 242=item B<-noservername> 243 244Suppresses sending of the SNI (Server Name Indication) extension in the 245ClientHello message. Cannot be used in conjunction with the B<-servername> or 246B<-dane_tlsa_domain> options. 247 248=item B<-cert> I<filename> 249 250The client certificate to use, if one is requested by the server. 251The default is not to use a certificate. 252 253The chain for the client certificate may be specified using B<-cert_chain>. 254 255=item B<-certform> B<DER>|B<PEM>|B<P12> 256 257The client certificate file format to use; unspecified by default. 258See L<openssl-format-options(1)> for details. 259 260=item B<-cert_chain> 261 262A file or URI of untrusted certificates to use when attempting to build the 263certificate chain related to the certificate specified via the B<-cert> option. 264The input can be in PEM, DER, or PKCS#12 format. 265 266=item B<-build_chain> 267 268Specify whether the application should build the client certificate chain to be 269provided to the server. 270 271=item B<-CRL> I<filename> 272 273CRL file to use to check the server's certificate. 274 275=item B<-CRLform> B<DER>|B<PEM> 276 277The CRL file format; unspecified by default. 278See L<openssl-format-options(1)> for details. 279 280=item B<-crl_download> 281 282Download CRL from distribution points in the certificate. Note that this option 283is ignored if B<-crl_check> option is not provided. Note that the maximum size 284of CRL is limited by L<X509_CRL_load_http(3)> function. 285 286=item B<-key> I<filename>|I<uri> 287 288The client private key to use. 289If not specified then the certificate file will be used to read also the key. 290 291=item B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE> 292 293The key format; unspecified by default. 294See L<openssl-format-options(1)> for details. 295 296=item B<-pass> I<arg> 297 298the private key and certificate file password source. 299For more information about the format of I<arg> 300see L<openssl-passphrase-options(1)>. 301 302=item B<-verify> I<depth> 303 304The verify depth to use. This specifies the maximum length of the 305server certificate chain and turns on server certificate verification. 306Currently the verify operation continues after errors so all the problems 307with a certificate chain can be seen. As a side effect the connection 308will never fail due to a server certificate verify failure. 309 310=item B<-verify_return_error> 311 312Return verification errors instead of continuing. This will typically 313abort the handshake with a fatal error. 314 315=item B<-verify_quiet> 316 317Limit verify output to only errors. 318 319=item B<-verifyCAfile> I<filename> 320 321A file in PEM format containing trusted certificates to use 322for verifying the server's certificate. 323 324=item B<-verifyCApath> I<dir> 325 326A directory containing trusted certificates to use 327for verifying the server's certificate. 328This directory must be in "hash format", 329see L<openssl-verify(1)> for more information. 330 331=item B<-verifyCAstore> I<uri> 332 333The URI of a store containing trusted certificates to use 334for verifying the server's certificate. 335 336=item B<-chainCAfile> I<file> 337 338A file in PEM format containing trusted certificates to use 339when attempting to build the client certificate chain. 340 341=item B<-chainCApath> I<directory> 342 343A directory containing trusted certificates to use 344for building the client certificate chain provided to the server. 345This directory must be in "hash format", 346see L<openssl-verify(1)> for more information. 347 348=item B<-chainCAstore> I<uri> 349 350The URI of a store containing trusted certificates to use 351when attempting to build the client certificate chain. 352The URI may indicate a single certificate, as well as a collection of them. 353With URIs in the C<file:> scheme, this acts as B<-chainCAfile> or 354B<-chainCApath>, depending on if the URI indicates a directory or a 355single file. 356See L<ossl_store-file(7)> for more information on the C<file:> scheme. 357 358=item B<-requestCAfile> I<file> 359 360A file containing a list of certificates whose subject names will be sent 361to the server in the B<certificate_authorities> extension. Only supported 362for TLS 1.3 363 364=item B<-dane_tlsa_domain> I<domain> 365 366Enable RFC6698/RFC7671 DANE TLSA authentication and specify the 367TLSA base domain which becomes the default SNI hint and the primary 368reference identifier for hostname checks. This must be used in 369combination with at least one instance of the B<-dane_tlsa_rrdata> 370option below. 371 372When DANE authentication succeeds, the diagnostic output will include 373the lowest (closest to 0) depth at which a TLSA record authenticated 374a chain certificate. When that TLSA record is a "2 1 0" trust 375anchor public key that signed (rather than matched) the top-most 376certificate of the chain, the result is reported as "TA public key 377verified". Otherwise, either the TLSA record "matched TA certificate" 378at a positive depth or else "matched EE certificate" at depth 0. 379 380=item B<-dane_tlsa_rrdata> I<rrdata> 381 382Use one or more times to specify the RRDATA fields of the DANE TLSA 383RRset associated with the target service. The I<rrdata> value is 384specified in "presentation form", that is four whitespace separated 385fields that specify the usage, selector, matching type and associated 386data, with the last of these encoded in hexadecimal. Optional 387whitespace is ignored in the associated data field. For example: 388 389 $ openssl s_client -brief -starttls smtp \ 390 -connect smtp.example.com:25 \ 391 -dane_tlsa_domain smtp.example.com \ 392 -dane_tlsa_rrdata "2 1 1 393 B111DD8A1C2091A89BD4FD60C57F0716CCE50FEEFF8137CDBEE0326E 02CF362B" \ 394 -dane_tlsa_rrdata "2 1 1 395 60B87575447DCBA2A36B7D11AC09FB24A9DB406FEE12D2CC90180517 616E8A18" 396 ... 397 Verification: OK 398 Verified peername: smtp.example.com 399 DANE TLSA 2 1 1 ...ee12d2cc90180517616e8a18 matched TA certificate at depth 1 400 ... 401 402=item B<-dane_ee_no_namechecks> 403 404This disables server name checks when authenticating via DANE-EE(3) TLSA 405records. 406For some applications, primarily web browsers, it is not safe to disable name 407checks due to "unknown key share" attacks, in which a malicious server can 408convince a client that a connection to a victim server is instead a secure 409connection to the malicious server. 410The malicious server may then be able to violate cross-origin scripting 411restrictions. 412Thus, despite the text of RFC7671, name checks are by default enabled for 413DANE-EE(3) TLSA records, and can be disabled in applications where it is safe 414to do so. 415In particular, SMTP and XMPP clients should set this option as SRV and MX 416records already make it possible for a remote domain to redirect client 417connections to any server of its choice, and in any case SMTP and XMPP clients 418do not execute scripts downloaded from remote servers. 419 420=item B<-reconnect> 421 422Reconnects to the same server 5 times using the same session ID, this can 423be used as a test that session caching is working. 424 425=item B<-showcerts> 426 427Displays the server certificate list as sent by the server: it only consists of 428certificates the server has sent (in the order the server has sent them). It is 429B<not> a verified chain. 430 431=item B<-prexit> 432 433Print session information when the program exits. This will always attempt 434to print out information even if the connection fails. Normally information 435will only be printed out once if the connection succeeds. This option is useful 436because the cipher in use may be renegotiated or the connection may fail 437because a client certificate is required or is requested only after an 438attempt is made to access a certain URL. Note: the output produced by this 439option is not always accurate because a connection might never have been 440established. 441 442=item B<-no-interactive> 443 444This flag can be used to run the client in a non-interactive mode. 445 446=item B<-state> 447 448Prints out the SSL session states. 449 450=item B<-debug> 451 452Print extensive debugging information including a hex dump of all traffic. 453 454=item B<-nocommands> 455 456Do not use interactive command letters. 457 458=item B<-adv> 459 460Use advanced command mode. 461 462=item B<-security_debug> 463 464Enable security debug messages. 465 466=item B<-security_debug_verbose> 467 468Output more security debug output. 469 470=item B<-msg> 471 472Show protocol messages. 473 474=item B<-timeout> 475 476Enable send/receive timeout on DTLS connections. 477 478=item B<-mtu> I<size> 479 480Set MTU of the link layer to the specified size. 481 482=item B<-no_etm> 483 484Disable Encrypt-then-MAC negotiation. 485 486=item B<-no_ems> 487 488Disable Extended master secret negotiation. 489 490=item B<-keymatexport> I<label> 491 492Export keying material using the specified label. 493 494=item B<-keymatexportlen> I<len> 495 496Export the specified number of bytes of keying material; default is 20. 497 498Show all protocol messages with hex dump. 499 500=item B<-trace> 501 502Show verbose trace output of protocol messages. 503 504=item B<-msgfile> I<filename> 505 506File to send output of B<-msg> or B<-trace> to, default standard output. 507 508=item B<-nbio_test> 509 510Tests nonblocking I/O 511 512=item B<-nbio> 513 514Turns on nonblocking I/O 515 516=item B<-crlf> 517 518This option translated a line feed from the terminal into CR+LF as required 519by some servers. 520 521=item B<-ign_eof> 522 523Inhibit shutting down the connection when end of file is reached in the 524input. 525 526=item B<-quiet> 527 528Inhibit printing of session and certificate information. This implicitly 529turns on B<-ign_eof> as well. 530 531=item B<-no_ign_eof> 532 533Shut down the connection when end of file is reached in the input. 534Can be used to override the implicit B<-ign_eof> after B<-quiet>. 535 536=item B<-psk_identity> I<identity> 537 538Use the PSK identity I<identity> when using a PSK cipher suite. 539The default value is "Client_identity" (without the quotes). 540 541=item B<-psk> I<key> 542 543Use the PSK key I<key> when using a PSK cipher suite. The key is 544given as a hexadecimal number without leading 0x, for example -psk 5451a2b3c4d. 546This option must be provided in order to use a PSK cipher. 547 548=item B<-psk_session> I<file> 549 550Use the pem encoded SSL_SESSION data stored in I<file> as the basis of a PSK. 551Note that this will only work if TLSv1.3 is negotiated. 552 553=item B<-sctp> 554 555Use SCTP for the transport protocol instead of UDP in DTLS. Must be used in 556conjunction with B<-dtls>, B<-dtls1> or B<-dtls1_2>. This option is only 557available where OpenSSL has support for SCTP enabled. 558 559=item B<-sctp_label_bug> 560 561Use the incorrect behaviour of older OpenSSL implementations when computing 562endpoint-pair shared secrets for DTLS/SCTP. This allows communication with 563older broken implementations but breaks interoperability with correct 564implementations. Must be used in conjunction with B<-sctp>. This option is only 565available where OpenSSL has support for SCTP enabled. 566 567=item B<-fallback_scsv> 568 569Send TLS_FALLBACK_SCSV in the ClientHello. 570 571=item B<-async> 572 573Switch on asynchronous mode. Cryptographic operations will be performed 574asynchronously. This will only have an effect if an asynchronous capable engine 575is also used via the B<-engine> option. For test purposes the dummy async engine 576(dasync) can be used (if available). 577 578=item B<-maxfraglen> I<len> 579 580Enable Maximum Fragment Length Negotiation; allowed values are 581C<512>, C<1024>, C<2048>, and C<4096>. 582 583=item B<-max_send_frag> I<int> 584 585The maximum size of data fragment to send. 586See L<SSL_CTX_set_max_send_fragment(3)> for further information. 587 588=item B<-split_send_frag> I<int> 589 590The size used to split data for encrypt pipelines. If more data is written in 591one go than this value then it will be split into multiple pipelines, up to the 592maximum number of pipelines defined by max_pipelines. This only has an effect if 593a suitable cipher suite has been negotiated, an engine that supports pipelining 594has been loaded, and max_pipelines is greater than 1. See 595L<SSL_CTX_set_split_send_fragment(3)> for further information. 596 597=item B<-max_pipelines> I<int> 598 599The maximum number of encrypt/decrypt pipelines to be used. This will only have 600an effect if an engine has been loaded that supports pipelining (e.g. the dasync 601engine) and a suitable cipher suite has been negotiated. The default value is 1. 602See L<SSL_CTX_set_max_pipelines(3)> for further information. 603 604=item B<-read_buf> I<int> 605 606The default read buffer size to be used for connections. This will only have an 607effect if the buffer size is larger than the size that would otherwise be used 608and pipelining is in use (see L<SSL_CTX_set_default_read_buffer_len(3)> for 609further information). 610 611=item B<-ignore_unexpected_eof> 612 613Some TLS implementations do not send the mandatory close_notify alert on 614shutdown. If the application tries to wait for the close_notify alert but the 615peer closes the connection without sending it, an error is generated. When this 616option is enabled the peer does not need to send the close_notify alert and a 617closed connection will be treated as if the close_notify alert was received. 618For more information on shutting down a connection, see L<SSL_shutdown(3)>. 619 620=item B<-bugs> 621 622There are several known bugs in SSL and TLS implementations. Adding this 623option enables various workarounds. 624 625=item B<-no_tx_cert_comp> 626 627Disables support for sending TLSv1.3 compressed certificates. 628 629=item B<-no_rx_cert_comp> 630 631Disables support for receiving TLSv1.3 compressed certificate. 632 633=item B<-comp> 634 635Enables support for SSL/TLS compression. 636This option was introduced in OpenSSL 1.1.0. 637TLS compression is not recommended and is off by default as of 638OpenSSL 1.1.0. TLS compression can only be used in security level 1 or 639lower. From OpenSSL 3.2.0 and above the default security level is 2, so this 640option will have no effect without also changing the security level. Use the 641B<-cipher> option to change the security level. See L<openssl-ciphers(1)> for 642more information. 643 644=item B<-no_comp> 645 646Disables support for SSL/TLS compression. 647TLS compression is not recommended and is off by default as of 648OpenSSL 1.1.0. 649 650=item B<-brief> 651 652Only provide a brief summary of connection parameters instead of the 653normal verbose output. 654 655=item B<-sigalgs> I<sigalglist> 656 657Specifies the list of signature algorithms that are sent by the client. 658The server selects one entry in the list based on its preferences. 659For example strings, see L<SSL_CTX_set1_sigalgs(3)> 660 661=item B<-curves> I<curvelist> 662 663Specifies the list of supported curves to be sent by the client. The curve is 664ultimately selected by the server. 665 666The list of all supported groups includes named EC parameters as well as X25519 667and X448 or FFDHE groups, and may also include groups implemented in 3rd-party 668providers. For a list of named EC parameters, use: 669 670 $ openssl ecparam -list_curves 671 672=item B<-cipher> I<cipherlist> 673 674This allows the TLSv1.2 and below cipher list sent by the client to be modified. 675This list will be combined with any TLSv1.3 ciphersuites that have been 676configured. Although the server determines which ciphersuite is used it should 677take the first supported cipher in the list sent by the client. See 678L<openssl-ciphers(1)> for more information. 679 680=item B<-ciphersuites> I<val> 681 682This allows the TLSv1.3 ciphersuites sent by the client to be modified. This 683list will be combined with any TLSv1.2 and below ciphersuites that have been 684configured. Although the server determines which cipher suite is used it should 685take the first supported cipher in the list sent by the client. See 686L<openssl-ciphers(1)> for more information. The format for this list is a simple 687colon (":") separated list of TLSv1.3 ciphersuite names. 688 689=item B<-starttls> I<protocol> 690 691Send the protocol-specific message(s) to switch to TLS for communication. 692I<protocol> is a keyword for the intended protocol. Currently, the only 693supported keywords are "smtp", "pop3", "imap", "ftp", "xmpp", "xmpp-server", 694"irc", "postgres", "mysql", "lmtp", "nntp", "sieve" and "ldap". 695 696=item B<-xmpphost> I<hostname> 697 698This option, when used with "-starttls xmpp" or "-starttls xmpp-server", 699specifies the host for the "to" attribute of the stream element. 700If this option is not specified, then the host specified with "-connect" 701will be used. 702 703This option is an alias of the B<-name> option for "xmpp" and "xmpp-server". 704 705=item B<-name> I<hostname> 706 707This option is used to specify hostname information for various protocols 708used with B<-starttls> option. Currently only "xmpp", "xmpp-server", 709"smtp" and "lmtp" can utilize this B<-name> option. 710 711If this option is used with "-starttls xmpp" or "-starttls xmpp-server", 712if specifies the host for the "to" attribute of the stream element. If this 713option is not specified, then the host specified with "-connect" will be used. 714 715If this option is used with "-starttls lmtp" or "-starttls smtp", it specifies 716the name to use in the "LMTP LHLO" or "SMTP EHLO" message, respectively. If 717this option is not specified, then "mail.example.com" will be used. 718 719=item B<-tlsextdebug> 720 721Print out a hex dump of any TLS extensions received from the server. 722 723=item B<-no_ticket> 724 725Disable RFC4507bis session ticket support. 726 727=item B<-sess_out> I<filename> 728 729Output SSL session to I<filename>. 730 731=item B<-sess_in> I<filename> 732 733Load SSL session from I<filename>. The client will attempt to resume a 734connection from this session. 735 736=item B<-serverinfo> I<types> 737 738A list of comma-separated TLS Extension Types (numbers between 0 and 73965535). Each type will be sent as an empty ClientHello TLS Extension. 740The server's response (if any) will be encoded and displayed as a PEM 741file. 742 743=item B<-status> 744 745Sends a certificate status request to the server (OCSP stapling). The server 746response (if any) is printed out. 747 748=item B<-alpn> I<protocols>, B<-nextprotoneg> I<protocols> 749 750These flags enable the Enable the Application-Layer Protocol Negotiation 751or Next Protocol Negotiation (NPN) extension, respectively. ALPN is the 752IETF standard and replaces NPN. 753The I<protocols> list is a comma-separated list of protocol names that 754the client should advertise support for. The list should contain the most 755desirable protocols first. Protocol names are printable ASCII strings, 756for example "http/1.1" or "spdy/3". 757An empty list of protocols is treated specially and will cause the 758client to advertise support for the TLS extension but disconnect just 759after receiving ServerHello with a list of server supported protocols. 760The flag B<-nextprotoneg> cannot be specified if B<-tls1_3> is used. 761 762=item B<-ct>, B<-noct> 763 764Use one of these two options to control whether Certificate Transparency (CT) 765is enabled (B<-ct>) or disabled (B<-noct>). 766If CT is enabled, signed certificate timestamps (SCTs) will be requested from 767the server and reported at handshake completion. 768 769Enabling CT also enables OCSP stapling, as this is one possible delivery method 770for SCTs. 771 772=item B<-ctlogfile> 773 774A file containing a list of known Certificate Transparency logs. See 775L<SSL_CTX_set_ctlog_list_file(3)> for the expected file format. 776 777=item B<-keylogfile> I<file> 778 779Appends TLS secrets to the specified keylog file such that external programs 780(like Wireshark) can decrypt TLS connections. 781 782=item B<-early_data> I<file> 783 784Reads the contents of the specified file and attempts to send it as early data 785to the server. This will only work with resumed sessions that support early 786data and when the server accepts the early data. 787 788=item B<-enable_pha> 789 790For TLSv1.3 only, send the Post-Handshake Authentication extension. This will 791happen whether or not a certificate has been provided via B<-cert>. 792 793=item B<-use_srtp> I<value> 794 795Offer SRTP key management, where B<value> is a colon-separated profile list. 796 797=item B<-srpuser> I<value> 798 799Set the SRP username to the specified value. This option is deprecated. 800 801=item B<-srppass> I<value> 802 803Set the SRP password to the specified value. This option is deprecated. 804 805=item B<-srp_lateuser> 806 807SRP username for the second ClientHello message. This option is deprecated. 808 809=item B<-srp_moregroups> This option is deprecated. 810 811Tolerate other than the known B<g> and B<N> values. 812 813=item B<-srp_strength> I<number> 814 815Set the minimal acceptable length, in bits, for B<N>. This option is 816deprecated. 817 818=item B<-ktls> 819 820Enable Kernel TLS for sending and receiving. 821This option was introduced in OpenSSL 3.2.0. 822Kernel TLS is off by default as of OpenSSL 3.2.0. 823 824=item B<-tfo> 825 826Enable creation of connections via TCP fast open (RFC7413). 827 828{- $OpenSSL::safe::opt_version_item -} 829 830{- $OpenSSL::safe::opt_name_item -} 831 832{- $OpenSSL::safe::opt_x_item -} 833 834{- $OpenSSL::safe::opt_trust_item -} 835 836{- $OpenSSL::safe::opt_s_item -} 837 838{- $OpenSSL::safe::opt_r_item -} 839 840{- $OpenSSL::safe::opt_provider_item -} 841 842{- $OpenSSL::safe::opt_engine_item -} 843 844{- output_off() if $disabled{"deprecated-3.0"}; "" -} 845=item B<-ssl_client_engine> I<id> 846 847Specify engine to be used for client certificate operations. 848{- output_on() if $disabled{"deprecated-3.0"}; "" -} 849 850{- $OpenSSL::safe::opt_v_item -} 851 852Verification errors are displayed, for debugging, but the command will 853proceed unless the B<-verify_return_error> option is used. 854 855=item B<-enable_server_rpk> 856 857Enable support for receiving raw public keys (RFC7250) from the server. 858Use of X.509 certificates by the server becomes optional, and servers that 859support raw public keys may elect to use them. 860Servers that don't support raw public keys or prefer to use X.509 861certificates can still elect to send X.509 certificates as usual. 862 863=item B<-enable_client_rpk> 864 865Enable support for sending raw public keys (RFC7250) to the server. 866A raw public key will be sent by the client, if solicited by the server, 867provided a suitable key and public certificate pair is configured. 868Some servers may nevertheless not request any client credentials, 869or may request a certificate. 870 871=item I<host>:I<port> 872 873Rather than providing B<-connect>, the target host and optional port may 874be provided as a single positional argument after all options. If neither this 875nor B<-connect> are provided, falls back to attempting to connect to 876I<localhost> on port I<4433>. 877If the host string is an IPv6 address, it must be enclosed in C<[> and C<]>. 878 879=back 880 881=head1 CONNECTED COMMANDS (BASIC) 882 883If a connection is established with an SSL/TLS server then any data received 884from the server is displayed and any key presses will be sent to the 885server. If end of file is reached then the connection will be closed down. 886 887When used interactively (which means neither B<-quiet> nor B<-ign_eof> have been 888given), and neither of B<-adv> or B<-nocommands> are given then "Basic" command 889mode is entered. In this mode certain commands are recognized which perform 890special operations. These commands are a letter which must appear at the start 891of a line. All further data after the initial letter on the line is ignored. 892The commands are listed below. 893 894=over 4 895 896=item B<Q> 897 898End the current SSL connection and exit. 899 900=item B<R> 901 902Renegotiate the SSL session (TLSv1.2 and below only). 903 904=item B<C> 905 906Attempt to reconnect to the server using a resumption handshake. 907 908=item B<k> 909 910Send a key update message to the server (TLSv1.3 only) 911 912=item B<K> 913 914Send a key update message to the server and request one back (TLSv1.3 only) 915 916=back 917 918=head1 CONNECTED COMMANDS (ADVANCED) 919 920If B<-adv> has been given then "advanced" command mode is entered. As with basic 921mode, if a connection is established with an SSL/TLS server then any data 922received from the server is displayed and any key presses will be sent to the 923server. If end of file is reached then the connection will be closed down. 924 925Special commands can be supplied by enclosing them in braces, e.g. "{help}" or 926"{quit}". These commands can appear anywhere in the text entered into s_client, 927but they are not sent to the server. Some commands can take an argument by 928ending the command name with ":" and then providing the argument, e.g. 929"{keyup:req}". Some commands are only available when certain protocol versions 930have been negotiated. 931 932If a newline appears at the end of a line entered into s_client then this is 933also sent to the server. If a command appears on a line on its own with no other 934text on the same line, then the newline is suppressed and not sent to the 935server. 936 937The following commands are recognised. 938 939=over 4 940 941=item B<help> 942 943Prints out summary help text about the available commands. 944 945=item B<quit> 946 947Close the connection to the peer 948 949=item B<reconnect> 950 951Reconnect to the peer and attempt a resumption handshake 952 953=item B<keyup> 954 955Send a Key Update message. TLSv1.3 only. This command takes an optional 956argument. If the argument "req" is supplied then the peer is also requested to 957update its keys. Otherwise if "noreq" is supplied the peer is not requested 958to update its keys. The default is "req". 959 960=item B<reneg> 961 962Initiate a renegotiation with the server. (D)TLSv1.2 or below only. 963 964=item B<fin> 965 966Indicate FIN on the current stream. QUIC only. Once FIN has been sent any 967further text entered for this stream is ignored. 968 969=back 970 971=head1 NOTES 972 973This command can be used to debug SSL servers. To connect to an SSL HTTP 974server the command: 975 976 openssl s_client -connect servername:443 977 978would typically be used (https uses port 443). If the connection succeeds 979then an HTTP command can be given such as "GET /" to retrieve a web page. 980 981If the handshake fails then there are several possible causes, if it is 982nothing obvious like no client certificate then the B<-bugs>, 983B<-ssl3>, B<-tls1>, B<-no_ssl3>, B<-no_tls1> options can be tried 984in case it is a buggy server. In particular you should play with these 985options B<before> submitting a bug report to an OpenSSL mailing list. 986 987A frequent problem when attempting to get client certificates working 988is that a web client complains it has no certificates or gives an empty 989list to choose from. This is normally because the server is not sending 990the clients certificate authority in its "acceptable CA list" when it 991requests a certificate. By using this command, the CA list can be viewed 992and checked. However, some servers only request client authentication 993after a specific URL is requested. To obtain the list in this case it 994is necessary to use the B<-prexit> option and send an HTTP request 995for an appropriate page. 996 997If a certificate is specified on the command line using the B<-cert> 998option it will not be used unless the server specifically requests 999a client certificate. Therefore, merely including a client certificate 1000on the command line is no guarantee that the certificate works. 1001 1002If there are problems verifying a server certificate then the 1003B<-showcerts> option can be used to show all the certificates sent by the 1004server. 1005 1006This command is a test tool and is designed to continue the 1007handshake after any certificate verification errors. As a result it will 1008accept any certificate chain (trusted or not) sent by the peer. Non-test 1009applications should B<not> do this as it makes them vulnerable to a MITM 1010attack. This behaviour can be changed by with the B<-verify_return_error> 1011option: any verify errors are then returned aborting the handshake. 1012 1013The B<-bind> option may be useful if the server or a firewall requires 1014connections to come from some particular address and or port. 1015 1016=head2 Note on Non-Interactive Use 1017 1018When B<s_client> is run in a non-interactive environment (e.g., a cron job or 1019a script without a valid I<stdin>), it may close the connection prematurely, 1020especially with TLS 1.3. To prevent this, you can use the B<-ign_eof> flag, 1021which keeps B<s_client> running even after reaching EOF from I<stdin>. 1022 1023For example: 1024 1025 openssl s_client -connect <server address>:443 -tls1_3 1026 -sess_out /path/to/tls_session_params_file 1027 -ign_eof </dev/null 1028 1029However, relying solely on B<-ign_eof> can lead to issues if the server keeps 1030the connection open, expecting the client to close first. In such cases, the 1031client may hang indefinitely. This behavior is not uncommon, particularly with 1032protocols where the server waits for a graceful disconnect from the client. 1033 1034For example, when connecting to an SMTP server, the session may pause if the 1035server expects a QUIT command before closing: 1036 1037 $ openssl s_client -brief -ign_eof -starttls smtp 1038 -connect <server address>:25 </dev/null 1039 CONNECTION ESTABLISHED 1040 Protocol version: TLSv1.3 1041 Ciphersuite: TLS_AES_256_GCM_SHA384 1042 ... 1043 250 CHUNKING 1044 [long pause] 1045 1046To avoid such hangs, it's better to use an application-level command to 1047initiate a clean disconnect. For SMTP, you can send a QUIT command: 1048 1049 printf 'QUIT\r\n' | openssl s_client -connect <server address>:25 1050 -starttls smtp -brief -ign_eof 1051 1052Similarly, for HTTP/1.1 connections, including a `Connection: close` header 1053ensures the server closes the connection after responding: 1054 1055 printf 'GET / HTTP/1.1\r\nHost: <server address>\r\nConnection: close\r\n\r\n' 1056 | openssl s_client -connect <server address>:443 -brief 1057 1058These approaches help manage the connection closure gracefully and prevent 1059hangs caused by the server waiting for the client to initiate the disconnect. 1060 1061=head1 BUGS 1062 1063Because this program has a lot of options and also because some of the 1064techniques used are rather old, the C source for this command is rather 1065hard to read and not a model of how things should be done. 1066A typical SSL client program would be much simpler. 1067 1068The B<-prexit> option is a bit of a hack. We should really report 1069information whenever a session is renegotiated. 1070 1071=head1 SEE ALSO 1072 1073L<openssl(1)>, 1074L<openssl-sess_id(1)>, 1075L<openssl-s_server(1)>, 1076L<openssl-ciphers(1)>, 1077L<SSL_CONF_cmd(3)>, 1078L<SSL_CTX_set_max_send_fragment(3)>, 1079L<SSL_CTX_set_split_send_fragment(3)>, 1080L<SSL_CTX_set_max_pipelines(3)>, 1081L<ossl_store-file(7)> 1082 1083=head1 HISTORY 1084 1085The B<-no_alt_chains> option was added in OpenSSL 1.1.0. 1086The B<-name> option was added in OpenSSL 1.1.1. 1087 1088The B<-certform> option has become obsolete in OpenSSL 3.0.0 and has no effect. 1089 1090The B<-engine> option was deprecated in OpenSSL 3.0. 1091 1092The 1093B<-enable_client_rpk>, 1094B<-enable_server_rpk>, 1095B<-no_rx_cert_comp>, 1096B<-no_tx_cert_comp>, 1097and B<-tfo> 1098options were added in OpenSSL 3.2. 1099 1100=head1 COPYRIGHT 1101 1102Copyright 2000-2024 The OpenSSL Project Authors. All Rights Reserved. 1103 1104Licensed under the Apache License 2.0 (the "License"). You may not use 1105this file except in compliance with the License. You can obtain a copy 1106in the file LICENSE in the source distribution or at 1107L<https://www.openssl.org/source/license.html>. 1108 1109=cut 1110