SSL_CTX_SET_CERT_STORE(3SSL)
π SSL_CTX_SET_CERT_STORE π
okay bestie, buckle up, because we're doing the OpenSSL 3SSL manual page for SSL_CTX_set_cert_store, SSL_CTX_set1_cert_store and SSL_CTX_get_cert_store β aka the girlies who handle your X509 certificate verification storage. yes, that's the whole vibe. let's go π
β¨ NAME β¨
SSL_CTX_set_cert_store, SSL_CTX_set1_cert_store, SSL_CTX_get_cert_store β manipulate X509 certificate verification storage π
β¨ SYNOPSIS β¨
#include <openssl/ssl.h>
void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store);
void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store);
X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx);
like, that's it. three little functions. icon behavior honestly πΈ
β¨ DESCRIPTION β¨
okay so, three functions, three totally different personalities:
SSL_CTX_set_cert_store()β sets/replaces the certificate verification storage ofctxto/withstore. and here's the thing, bestie: if anotherX509_STOREobject is currently set inctx, it will beX509_STORE_free()ed.SSL_CTX_set_cert_store()will take ownership of thestore, i.e., the callX509_STORE_free(store)is no longer needed. it's giving "hand me your keys, i'm the main character now" ππSSL_CTX_set1_cert_store()β sets/replaces the certificate verification storage ofctxto/withstoretoo, but this one is respectful. the store's reference count is incremented. and yeah, if anotherX509_STOREobject is currently set inctx, it will beX509_STORE_free()ed. shared custody energy, we love to see it π«ΆSSL_CTX_get_cert_store()β returns a pointer to the current certificate verification storage. and listen,ctxMUST NOT beNULL. like that's not a suggestion, that's a hard boundary. π«
β¨ NOTES β¨
okay so context, because you deserve it π
In order to verify the certificates presented by the peer, trusted CA certificates must be accessed. These CA certificates are made available via lookup methods, handled inside the X509_STORE. From the X509_STORE the X509_STORE_CTX used when verifying certificates is created. it's a whole pipeline, iykyk π¦
Typically the trusted certificate store is handled indirectly via using SSL_CTX_load_verify_locations(3). but if you're feeling β¨extraβ¨, using the SSL_CTX_set_cert_store() and SSL_CTX_get_cert_store() functions it is possible to manipulate the X509_STORE object beyond the SSL_CTX_load_verify_locations(3) call. no cap π
Currently no detailed documentation on how to use the X509_STORE object is available. and ngl, not all members of the X509_STORE are used when the verification takes place. so will e.g. the verify_callback() be overridden with the verify_callback() set via the SSL_CTX_set_verify(3) family of functions. This document must therefore be updated when documentation about the X509_STORE object and its handling becomes available. yes bestie, the manpage is literally admitting it's a work in progress π
β οΈ very important, do not skip this one:SSL_CTX_set_cert_store()does not increment the store's reference count, so it should not be used to assign anX509_STOREthat is owned by anotherSSL_CTX. that's a whole mess and we are not doing that. periodt.
To share X509_STOREs between two SSL_CTXs, use SSL_CTX_get_cert_store() to get the X509_STORE from the first SSL_CTX, and then use SSL_CTX_set1_cert_store() to assign to the second SSL_CTX and increment the reference count of the X509_STORE. that's the correct way, bestie. matching best friend bracelets energy ππ
β¨ RESTRICTIONS β¨
The X509_STORE structure used by an SSL_CTX is used for verifying peer certificates and building certificate chains, and it's also shared by every child SSL structure. so like, everybody's using the same one, no secrets in this friend group π
Applications wanting finer control can use functions such as SSL_CTX_set1_verify_cert_store() instead. so if you're a control freak about your certs (valid), there's a whole other function for you π
β¨ RETURN VALUES β¨
SSL_CTX_set_cert_store()does not return diagnostic output. it's mysterious like that π€«SSL_CTX_set1_cert_store()does not return diagnostic output. also mysterious. twins.SSL_CTX_get_cert_store()returns the current setting. finally, someone who communicates β¨
β¨ SEE ALSO β¨
ssl(7), SSL_CTX_load_verify_locations(3), SSL_CTX_set_verify(3) β go read those next, bestie, they're in the same universe π¦
β¨ COPYRIGHT β¨
Copyright 2001-2024 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>.
aaaand that's the whole page, bestie!! π this was OpenSSL version 4.0.3, dated 2026-09-29, from the SSL_CTX_SET_CERT_STORE(3SSL) manual. go forth and manage your cert stores responsibly, mwah πβ¨π
π¦ where this page comes from
- ubuntu stonking: libssl-doc 4.0.3-1ubuntu1 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms