// Initialize the SSL/TLS subsystem.
void init_ssl(void) {
- SSL_library_init(); // Initialize SSL transport layer
+
+ // Initialize the OpenSSL library
SSL_load_error_strings();
+ ERR_load_crypto_strings();
+ OpenSSL_add_all_algorithms();
+ SSL_library_init();
+ // Load (or generate) a key and certificate
mkdir(ctdl_key_dir, 0700); // If the keys directory does not exist, create it
generate_key(file_crpt_file_key); // If a private key does not exist, create it
generate_certificate(file_crpt_file_key, file_crpt_file_cer); // If a certificate does not exist, create it
bind_to_key_and_certificate(); // Load key and cert from disk, and bind to them.
- // Finally let the server know we're here
+ // Register some Citadel protocol commands for dealing with encrypted sessions
CtdlRegisterProtoHook(cmd_stls, "STLS", "Start SSL/TLS session");
CtdlRegisterProtoHook(cmd_gtls, "GTLS", "Get SSL/TLS session status");
CtdlRegisterSessionHook(endtls, EVT_STOP, PRIO_STOP + 10);
// Initialize ssl engine, load certs and initialize openssl internals
void init_ssl(void) {
- // Initialize SSL transport layer
- SSL_library_init();
+ // Initialize the OpenSSL library
SSL_load_error_strings();
+ ERR_load_crypto_strings();
+ OpenSSL_add_all_algorithms();
+ SSL_library_init();
// Now try to bind to the key and certificate.
bind_to_key_and_certificate();
pthread_key_t ThreadSSL; // Per-thread SSL context
-void shutdown_ssl(void) {
- ERR_free_strings();
-}
-
// Set the private key and certificate chain for the global SSL Context.
// This is called during initialization, and can be called again later if the certificate changes.
// initialize ssl engine, load certs and initialize openssl internals
void init_ssl(void) {
- // Initialize SSL transport layer
- SSL_library_init();
+ // Initialize the OpenSSL library
SSL_load_error_strings();
+ ERR_load_crypto_strings();
+ OpenSSL_add_all_algorithms();
+ SSL_library_init();
// Now try to bind to the key and certificate.
bind_to_key_and_certificate();