]> code.citadel.org Git - citadel.git/blobdiff - webcit/crypto.c
* crypto.c: allow use of chained certificates
[citadel.git] / webcit / crypto.c
index 36e7f8427a99b28e281d9aa483eca0e86f5666d8..5e690e4e745cae0eb0d31618a6b779e7410d1fa4 100644 (file)
@@ -1,8 +1,11 @@
-/* $Id$ */
+/*
+ * $Id$
+ *
+ * Provides HTTPS, when the OpenSSL library is available.
+ */
 
 #ifdef HAVE_OPENSSL
 
-
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
@@ -83,7 +86,7 @@ void init_ssl(void)
         * Initialize SSL transport layer
         */
        SSL_library_init();
-       OpenSSL_add_all_algorithms();
+       /* OpenSSL_add_all_algorithms(); */
        SSL_load_error_strings();
        ssl_method = SSLv2_server_method();
        if (!(ssl_ctx = SSL_CTX_new(ssl_method))) {
@@ -329,8 +332,10 @@ void init_ssl(void)
 
        /*
         * Now try to bind to the key and certificate.
+        * Note that we use SSL_CTX_use_certificate_chain_file() which allows
+        * the certificate file to contain intermediate certificates.
         */
-       SSL_CTX_use_certificate_file(ssl_ctx, CTDL_CER_PATH, SSL_FILETYPE_PEM);
+       SSL_CTX_use_certificate_chain_file(ssl_ctx, CTDL_CER_PATH);
        SSL_CTX_use_PrivateKey_file(ssl_ctx, CTDL_KEY_PATH, SSL_FILETYPE_PEM);
        if ( !SSL_CTX_check_private_key(ssl_ctx) ) {
                lprintf(3, "Cannot install certificate: %s\n",
@@ -452,7 +457,6 @@ void client_write_ssl(char *buf, int nbytes)
                        if (retval == -1)
                                lprintf(9, "errno is %d\n", errno);
                        endtls();
-                       client_write(&buf[nbytes - nremain], nremain);
                        return;
                }
                nremain -= retval;
@@ -511,8 +515,7 @@ int client_read_ssl(char *buf, int bytes, int timeout)
                        }
                        lprintf(9, "SSL_read got error %ld\n", errval);
                        endtls();
-                       return (client_read_to
-                               (WC->http_sock, &buf[len], bytes - len, timeout));
+                       return (0);
                }
                len += rlen;
        }