OPENSSL-S_TIME(1SSL)

✨ OPENSSL-S_TIME ✨

okay bestie, sit down, hydrate, because we're about to talk about the openssl-s_time manual page β€” aka the SSL/TLS performance timing program. yes. it's from the OpenSSL fam. yes. it's giving benchmark diva. πŸ’…


🌸 NAME 🌸

openssl-s_time β€” the SSL/TLS performance timing program. she times things. she measures. she's the stopwatch of the TLS world. ⏱️✨


πŸ¦‹ SYNOPSIS πŸ¦‹

openssl s_time [-help] [-connect host:port] [-www page] [-cert filename]
[-key filename] [-reuse] [-new] [-verify depth] [-time seconds] [-tls1]
[-tls1_1] [-tls1_2] [-tls1_3] [-bugs] [-cipher cipherlist]
[-ciphersuites val] [-nameopt option] [-cafile file] [-CAfile file]
[-no-CAfile] [-CApath dir] [-no-CApath] [-CAstore uri] [-no-CAstore]
[-provider name] [-provider-path path] [-provparam [name:]key=value]
[-propquery propq]

πŸ’– DESCRIPTION πŸ’–

so basically? this command is a generic SSL/TLS client. she connects to a remote host over SSL/TLS, and if you want she'll even request a page from that server. and here's the iconique part: she includes the time it takes to transfer the payload data in her timing measurements. so you get the full ✨vibe✨ of the handshake and the data yeet.

she measures:

  • the number of connections made within a given timeframe πŸ•
  • the amount of data transferred (if any) πŸ“¦
  • and she calculates the average time spent for one connection πŸ“Š

no cap, she's a whole performance analyst. πŸ”₯


πŸ‘‘ OPTIONS πŸ‘‘

  • -help β€” prints out a usage message. classic. she's telling you how to use her. slay.
  • -connect host:port β€” this is where you tell her the host and the optional port to connect to. ⚠️ and listen, if the host string is an IPv6 address, you must wrap it in "[" and "]". no exceptions bestie, that's literally the rule.
  • -www page β€” the page she should GET from the server. a value of '/' gets the index.html page. and if you don't specify this parameter at all? she'll only do the handshake to establish the SSL connection and not transfer any payload data. so no page, no payload, just vibes. πŸ™ˆ
  • -cert certname β€” the certificate to use, if one is requested by the server. the default is not to use a certificate. the file is in PEM format. very demure. very mindful.
  • -key keyfile β€” the private key to use. if you don't specify it, then the certificate file gets used instead. also PEM format. πŸ”‘
  • -verify depth β€” the verify depth to use. this specifies the maximum length of the server certificate chain and it turns on server certificate verification. now the tea: currently the verify operation continues after errors, so you can see all the problems with a certificate chain. and as a side effect? the connection will never fail due to a server certificate verify failure. it's giving "I saw the red flags and chose to keep going" 😭
  • -new β€” performs the timing test using a new session ID for each connection. and if neither -new nor -reuse are specified, they're both on by default and executed in sequence. she does both. she's an overachiever. πŸ’…
  • -reuse β€” performs the timing test using the same session ID. you'd use this as a test that session caching is working. same deal: if neither -new nor -reuse are specified, they're both on by default and executed in sequence.
  • -bugs β€” there are several known bugs in SSL and TLS implementations (oof). adding this option enables various workarounds. it's the duct tape of options. 🩹
  • -cipher cipherlist β€” this lets you modify the TLSv1.2 and below cipher list that the client sends out. this list gets combined with any TLSv1.3 ciphersuites you've configured. so like, the server is the one who determines which cipher suite actually gets used, but she should take the first supported cipher in the list the client sent. see openssl-ciphers(1) for more info. πŸ“š
  • -ciphersuites val β€” this lets you modify the TLSv1.3 ciphersuites the client sends. this list gets combined with any TLSv1.2 and below ciphersuites you configured. again, the server decides which cipher suite is used, but it should take the first supported cipher in the list the client sent. see openssl-ciphers(1) for the details. and the format? it's a simple colon (":") separated list of TLSv1.3 ciphersuite names. periodt. πŸŽ€
  • -time length β€” specifies how long, in seconds, this command should establish connections and optionally transfer payload data from a server. how many connections she can establish depends on server and client performance plus the link speed. it's giving "results may vary." πŸ“ˆ
  • -nameopt option β€” specifies how the subject or issuer names are displayed. see openssl-namedisplay-options(1) for the deets.
  • -CAfile file, -no-CAfile, -CApath dir, -no-CApath, -CAstore uri, -no-CAstore β€” see "Trusted Certificate Options" in openssl-verification-options(1) for details. 🫢
  • -provider name, -provider-path path, -provparam [name:]key=value, -propquery propq β€” see "Provider Options" in openssl(1), provider(7), and property(7).
  • -cafile file β€” this is an obsolete synonym for -CAfile. πŸ‘΅ (we'll get to her history later, bestie.)
  • -tls1, -tls1_1, -tls1_2, -tls1_3 β€” see "TLS Version Options" in openssl(1).

🌈 ENVIRONMENT 🌈

  • SSL_CIPHER β€” if the -cipher option isn't specified, the contents of this environment variable are used to modify the TLSv1.2 and below cipher list sent by the client, the exact same way that option does. she's flexible like that. πŸ’œ

πŸ’€ NOTES πŸ’€

this command can be used to measure the performance of an SSL connection. to connect to an SSL HTTP server and grab the default page, the command:

openssl s_time -connect servername:443 -www / -CApath yourdir -CAfile yourfile.pem -cipher commoncipher

would typically be used. (https uses port 443 btw, iykyk.) commoncipher is a cipher to which both client and server can agree β€” see the openssl-ciphers(1) command for details. 🀝

if the handshake fails then there are several possible causes. if it's nothing obvious like no client certificate, then the -bugs and -tls1 options can be tried, in case it's a buggy server. and in particular you should play with these options before submitting a bug report to an OpenSSL mailing list. pls pls pls do not file a bug before you've tried the silly little workaround options, bestie, that's so embarrassing for us. 😭

and here's a frequent problem when you're trying to get client certificates working: a web client complains it has no certificates or gives an empty list to choose from. this is normally because the server isn't sending the client's certificate authority in its "acceptable CA list" when it requests a certificate. by using openssl-s_client(1) the CA list can be viewed and checked. however! some servers only request client authentication after a specific URL is requested. to obtain the list in this case, it's necessary to use the -prexit option of openssl-s_client(1) and send an HTTP request for an appropriate page. sneaky server behavior fr fr. πŸ•΅οΈβ€β™€οΈ

and one more thing: if a certificate is specified on the command line using the -cert option, it will not be used unless the server specifically requests a client certificate. therefore, merely including a client certificate on the command line is no guarantee that the certificate works. it's giving "I brought my resume and nobody asked." 🫠


πŸ› BUGS πŸ›

because this program doesn't have all the options of the openssl-s_client(1) program to turn protocols on and off, you may not be able to measure the performance of all protocols with all servers. she's doing her best okay. πŸ˜”

also, the -verify option should really exit if the server verification fails. yeah. it should. it doesn't. noted. πŸ’€


πŸ“œ HISTORY πŸ“œ

the -cafile option was deprecated in OpenSSL 3.0. she's retired, show some respect. πŸŽ€


πŸ” SEE ALSO πŸ”

openssl(1), openssl-s_client(1), openssl-s_server(1), openssl-ciphers(1), ossl_store-file(7)


Copyright 2004-2025 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.


ok that was a lot of legal text but we respect the license besties, always read your licenses πŸ’œ

and that's a wrap!! this whole thing came from OpenSSL 4.0.3, dated 2026-09-29, and the manual page is literally called OPENSSL-S_TIME(1SSL). mwah. go time some TLS. πŸ’‹βœ¨πŸ¦‹

πŸ“¦ where this page comes from