13 |
#ifdef SSL_TLS |
#ifdef SSL_TLS |
14 |
#include <openssl/ssl.h> |
#include <openssl/ssl.h> |
15 |
#include <openssl/err.h> |
#include <openssl/err.h> |
16 |
|
#include <openssl/x509.h> |
17 |
|
|
18 |
|
|
19 |
static SSL *ssl; |
static SSL *ssl; |
86 |
int e; |
int e; |
87 |
SSL_CTX *ctx; |
SSL_CTX *ctx; |
88 |
SSL_METHOD *method = NULL; |
SSL_METHOD *method = NULL; |
89 |
|
X509 *cert; |
90 |
|
char *c; |
91 |
|
EVP_MD *evp; |
92 |
|
unsigned char digest[EVP_MAX_MD_SIZE]; |
93 |
|
int s, i; |
94 |
|
|
95 |
SSL_library_init(); |
SSL_library_init(); |
96 |
|
|
121 |
ERR_error_string(e, NULL)); |
ERR_error_string(e, NULL)); |
122 |
return ERROR_SSL; |
return ERROR_SSL; |
123 |
} |
} |
124 |
|
/* Get server's certificate. */ |
125 |
|
if (!(cert = SSL_get_peer_certificate(ssl))) |
126 |
|
return ERROR_SSL; |
127 |
|
|
128 |
|
if (!(c = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0))) |
129 |
|
return ERROR_SSL; |
130 |
|
verbose("Server certificate subject: %s\n", c); |
131 |
|
free(c); |
132 |
|
|
133 |
|
if (!(c = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0))) |
134 |
|
return ERROR_SSL; |
135 |
|
verbose("Server certificate issuer: %s\n", c); |
136 |
|
free(c); |
137 |
|
|
138 |
|
if (!(evp = EVP_md5())) |
139 |
|
return ERROR_SSL; |
140 |
|
if (!(X509_digest(cert, evp, digest, &s))) |
141 |
|
return ERROR_SSL; |
142 |
|
|
143 |
|
verbose("Server key fingerprint: "); |
144 |
|
for (i = 0; i < s; i++) |
145 |
|
verbose(i != s - 1 ? "%02X:" : "%02X\n", digest[i]); |
146 |
|
|
147 |
|
X509_free(cert); |
148 |
SSL_CTX_free(ctx); |
SSL_CTX_free(ctx); |
149 |
|
|
150 |
return 0; |
return 0; |