11/* SPDX-License-Identifier: LGPL-2.1-or-later */
22
3+ #include "netlog-tls.h"
4+
35#include <arpa/inet.h>
46#include <netinet/in.h>
57#include <openssl/bio.h>
1113#include "fd-util.h"
1214#include "io-util.h"
1315#include "iovec-util.h"
14- #include "netlog-tls.h"
16+
1517#include "string-table.h"
1618
19+ #include "netlog-ssl.h"
20+
1721static const char * const certificate_auth_mode_table [OPEN_SSL_CERTIFICATE_AUTH_MODE_MAX ] = {
1822 [OPEN_SSL_CERTIFICATE_AUTH_MODE_NONE ] = "no" ,
1923 [OPEN_SSL_CERTIFICATE_AUTH_MODE_ALLOW ] = "allow" ,
@@ -23,105 +27,6 @@ static const char *const certificate_auth_mode_table[OPEN_SSL_CERTIFICATE_AUTH_M
2327
2428DEFINE_STRING_TABLE_LOOKUP (certificate_auth_mode , int );
2529
26- int ssl_verify_certificate_validity (int s , X509_STORE_CTX * store ) {
27- SSL * ssl = X509_STORE_CTX_get_ex_data (store , SSL_get_ex_data_X509_STORE_CTX_idx ());
28- SocketAddress * address = (SocketAddress * ) SSL_get_ex_data (ssl , 1 );
29- _cleanup_ (OPENSSL_freep ) void * subject = NULL , * issuer = NULL ;
30- TLSManager * m = (TLSManager * ) SSL_get_ex_data (ssl , 0 );
31- X509 * cert = X509_STORE_CTX_get_current_cert (store );
32- int depth = X509_STORE_CTX_get_error_depth (store );
33- int error = X509_STORE_CTX_get_error (store );
34- int verify_mode = SSL_get_verify_mode (ssl );
35- _cleanup_free_ char * pretty = NULL ;
36- union sockaddr_union sa ;
37- int r ;
38- long rc ;
39-
40- assert (store );
41-
42- r = sockaddr_pretty (& address -> sockaddr .sa , address -> sockaddr .sa .sa_family == AF_INET ?
43- sizeof (sa .in ) : sizeof (sa .in6 ), true, true, & pretty );
44- if (r < 0 )
45- return r ;
46-
47- log_debug ("TLS: Verifying SSL certificates of server: %s" , pretty );
48-
49- if (cert ) {
50- subject = X509_NAME_oneline (X509_get_subject_name (cert ), 0 , 0 );
51- issuer = X509_NAME_oneline (X509_get_issuer_name (cert ), 0 , 0 );
52- }
53-
54- if (verify_mode == SSL_VERIFY_NONE ) {
55- log_debug ("TLS: SSL Certificate validation DISABLED but Error at depth: %d, issuer=%s, subject=%s: server=%s %s" ,
56- depth , (char * ) subject , (char * ) issuer , pretty , X509_verify_cert_error_string (error ));
57-
58- return 1 ;
59- }
60-
61- rc = SSL_get_verify_result (ssl );
62- if (rc != X509_V_OK ) {
63- switch (rc ) {
64- case X509_V_ERR_CERT_HAS_EXPIRED : {
65- switch (m -> auth_mode ) {
66- case OPEN_SSL_CERTIFICATE_AUTH_MODE_DENY : {
67- log_error_errno (SYNTHETIC_ERRNO (EINVAL ),
68- "TLS: Failed to verify certificate server=%s: %s" , pretty , X509_verify_cert_error_string (rc ));
69- return 0 ;
70- }
71- break ;
72- case OPEN_SSL_CERTIFICATE_AUTH_MODE_WARN : {
73- log_warning_errno (SYNTHETIC_ERRNO (EINVAL ),
74- "TLS: Failed to verify certificate server=%s: %s" , pretty , X509_verify_cert_error_string (rc ));
75-
76- return 1 ;
77- }
78- break ;
79- case OPEN_SSL_CERTIFICATE_AUTH_MODE_ALLOW : {
80- log_debug ("TLS: Failed to verify certificate server=%s: %s" , pretty , X509_verify_cert_error_string (rc ));
81- return 1 ;
82- }
83-
84- break ;
85- default :
86- break ;
87- }}
88- break ;
89- case X509_V_ERR_CERT_REVOKED : {
90- switch (m -> auth_mode ) {
91- case OPEN_SSL_CERTIFICATE_AUTH_MODE_DENY : {
92- log_error_errno (SYNTHETIC_ERRNO (EINVAL ),
93- "TLS: Failed to verify certificate server=%s: %s" , pretty , X509_verify_cert_error_string (rc ));
94- return 0 ;
95- }
96- break ;
97- case OPEN_SSL_CERTIFICATE_AUTH_MODE_WARN : {
98- log_warning_errno (SYNTHETIC_ERRNO (EINVAL ),
99- "TLS: Failed to verify certificate server=%s: %s" , pretty , X509_verify_cert_error_string (rc ));
100-
101- return 1 ;
102- }
103- break ;
104- case OPEN_SSL_CERTIFICATE_AUTH_MODE_ALLOW : {
105- log_debug_errno (SYNTHETIC_ERRNO (EINVAL ),
106- "TLS: Failed to verify certificate server=%s: %s" , pretty , X509_verify_cert_error_string (rc ));
107- return 1 ;
108- }
109- break ;
110- default :
111- break ;
112- }}
113- break ;
114- default :
115- log_error ("TLS: Failed to validate remote certificate server=%s: %s. Aborting connection ..." , pretty , X509_verify_cert_error_string (rc ));
116- return 0 ;
117- }
118- }
119-
120- log_debug ("TLS: SSL certificates verified server=%s: %s" , pretty , X509_verify_cert_error_string (rc ));
121-
122- return 1 ;
123- }
124-
12530static int tls_write (TLSManager * m , const char * buf , size_t count ) {
12631 int r ;
12732
0 commit comments