SSL_CHECK_CHAIN(3ossl)
π SSL_CHECK_CHAIN π
okay so this is the page for SSL_check_chain from the OpenSSL 3ossl manual, and honestly it's a whole vibe check for your cert chains. let's get into it π
β¨ NAME β¨
SSL_check_chain β check certificate chain suitability (yes queen, we're validating things today)
π¦ SYNOPSIS π¦
#include <openssl/ssl.h>
int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain);
πΈ DESCRIPTION πΈ
so SSL_check_chain() is literally the function that checks whether certificate x, private key pk and certificate chain chain is suitable for use with the current session s. that's it. that's the whole thing. it's giving "are you compatible with me or not" energy π
β RETURN VALUES β
SSL_check_chain() returns a bitmap of flags indicating the validity of the chain β like a little report card for your cert π«Ά
CERT_PKEY_VALIDβ the chain can be used with the current session. and bestie, listen: if this flag is not set then the certificate will never be used even if the application tries to set it, because it's inconsistent with the peer preferences. no exceptions, no negotiating. periodt πCERT_PKEY_SIGNβ the EE key can be used for signing.CERT_PKEY_EE_SIGNATUREβ the signature algorithm of the EE certificate is acceptable.CERT_PKEY_CA_SIGNATUREβ the signature algorithms of all CA certificates are acceptable.CERT_PKEY_EE_PARAMβ the parameters of the end entity certificate are acceptable (e.g. it is a supported curve).CERT_PKEY_CA_PARAMβ the parameters of all CA certificates are acceptable.CERT_PKEY_EXPLICIT_SIGNβ the end entity certificate algorithm can be used explicitly for signing (i.e. it is mentioned in the signature algorithms extension).CERT_PKEY_ISSUER_NAMEβ the issuer name is acceptable. this one is only meaningful for client authentication, iykyk.CERT_PKEY_CERT_TYPEβ the certificate type is acceptable. only meaningful for client authentication.CERT_PKEY_SUITEBβ chain is suitable for Suite B use. fancy π
π₯ NOTES π₯
okay so timing matters here, and the timing is lowkey specific:
SSL_check_chain() must be called in servers after a client hello message, or in clients after a certificate request message. it will typically be called in the certificate callback. don't just call it whenever, bestie, it's not that kind of function π
An application wishing to support multiple certificate chains may call this function on each chain in turn β starting with the one it considers the most secure β and could then use the chain of the first set which returns suitable flags. like going down your contact list until someone answers π
As a minimum the flag CERT_PKEY_VALID must be set for a chain to be usable. An application supporting multiple chains with different CA signature algorithms may also wish to check CERT_PKEY_CA_SIGNATURE too. And if no chain is suitable, a server should fall back to the most secure chain which sets CERT_PKEY_VALID. fallback queen behavior π
The validity of a chain is determined by checking if it matches a supported signature algorithm, supported curves, and β in the case of client authentication β certificate types and issuer names.
β οΈ okay important one: since the supported signature algorithms extension is only used in TLS 1.2, TLS 1.3 and DTLS 1.2, the results for earlier versions of TLS and DTLS may not be very useful. Applications may wish to specify a different "legacy" chain for earlier versions of TLS or DTLS. ngl the old-protocol results are giving nothing π
π SEE ALSO π
π COPYRIGHT π
Copyright 2015-2018 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>.
and that's the whole page, bestie β¨ this was OpenSSL 3.5.6, dated 2026-04-07, page SSL_CHECK_CHAIN(3ossl) β go forth and validate those chains, you're gonna ate it up fr fr ππΈπ¦
π¦ where this page comes from
- freebsd 15.1: base 15.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms