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 shouldGETfrom the server. a value of'/'gets theindex.htmlpage. 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-newnor-reuseare 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-newnor-reuseare 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. seeopenssl-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. seeopenssl-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. seeopenssl-namedisplay-options(1)for the deets.-CAfile file,-no-CAfile,-CApath dir,-no-CApath,-CAstore uri,-no-CAstoreβ see"Trusted Certificate Options"inopenssl-verification-options(1)for details. π«Ά-provider name,-provider-path path,-provparam [name:]key=value,-propquery propqβ see"Provider Options"inopenssl(1),provider(7), andproperty(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"inopenssl(1).
π ENVIRONMENT π
SSL_CIPHERβ if the-cipheroption 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 β
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
- ubuntu stonking: openssl 4.0.3-1ubuntu1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms