/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "intl.h"
#include "utils.h"
#include "ssl.h"
+#include "ssl_certificate.h"
static SSL_CTX *ssl_ctx_SSLv23;
static SSL_CTX *ssl_ctx_TLSv1;
ssl_ctx_SSLv23 = SSL_CTX_new(SSLv23_client_method());
if (ssl_ctx_SSLv23 == NULL) {
- debug_print(_("SSLv23 not available\n"));
+ debug_print("SSLv23 not available\n");
} else {
- debug_print(_("SSLv23 available\n"));
+ debug_print("SSLv23 available\n");
}
ssl_ctx_TLSv1 = SSL_CTX_new(TLSv1_client_method());
- if (ssl_ctx_TLSv1 == NULL) {
- debug_print(_("TLSv1 not available\n"));
+ if (ssl_ctx_TLSv1 == NULL) {
+ debug_print("TLSv1 not available\n");
} else {
- debug_print(_("TLSv1 available\n"));
+ debug_print("TLSv1 available\n");
}
}
gboolean ssl_init_socket_with_method(SockInfo *sockinfo, SSLMethod method)
{
X509 *server_cert;
- gint ret;
+ gboolean ret;
+ unsigned char md[EVP_MAX_MD_SIZE];
+ char *issuer;
+ char *subject;
switch (method) {
- case SSL_METHOD_SSLv23:
- if (!ssl_ctx_SSLv23) {
- log_warning(_("SSL method not available\n"));
- return FALSE;
- }
- sockinfo->ssl = SSL_new(ssl_ctx_SSLv23);
- break;
- case SSL_METHOD_TLSv1:
- if (!ssl_ctx_TLSv1) {
- log_warning(_("SSL method not available\n"));
- return FALSE;
- }
- sockinfo->ssl = SSL_new(ssl_ctx_TLSv1);
- break;
- default:
- log_warning(_("Unknown SSL method *PROGRAM BUG*\n"));
+ case SSL_METHOD_SSLv23:
+ if (!ssl_ctx_SSLv23) {
+ log_warning(_("SSL method not available\n"));
return FALSE;
- break;
+ }
+ sockinfo->ssl = SSL_new(ssl_ctx_SSLv23);
+ break;
+ case SSL_METHOD_TLSv1:
+ if (!ssl_ctx_TLSv1) {
+ log_warning(_("SSL method not available\n"));
+ return FALSE;
+ }
+ sockinfo->ssl = SSL_new(ssl_ctx_TLSv1);
+ break;
+ default:
+ log_warning(_("Unknown SSL method *PROGRAM BUG*\n"));
+ return FALSE;
+ break;
}
if (sockinfo->ssl == NULL) {
}
/* Get the cipher */
+
log_print(_("SSL connection using %s\n"), SSL_get_cipher(sockinfo->ssl));
/* Get server's certificate (note: beware of dynamic allocation) */
if ((server_cert = SSL_get_peer_certificate(sockinfo->ssl)) != NULL) {
- gchar *str;
-
- log_print(_("Server certificate:\n"));
-
- if ((str = X509_NAME_oneline(X509_get_subject_name(server_cert), 0, 0)) != NULL) {
- log_print(_(" Subject: %s\n"), str);
- free(str);
- }
-
- if ((str = X509_NAME_oneline(X509_get_issuer_name(server_cert), 0, 0)) != NULL) {
- log_print(_(" Issuer: %s\n"), str);
- free(str);
- }
-
+ ret = ssl_certificate_check (server_cert, sockinfo->hostname, sockinfo->port);
X509_free(server_cert);
+ } else {
+ printf("server_cert is NULL ! this _should_not_ happen !\n");
+ return FALSE;
}
-
- return TRUE;
+ return ret;
}
void ssl_done_socket(SockInfo *sockinfo)