Add HTTPS support
This commit is contained in:
@@ -32,6 +32,10 @@
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
|
||||
#ifdef HTTPS_ENABLED
|
||||
#include <openssl/ssl.h>
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// src/basic.h
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -204,33 +208,44 @@ int mutex_unlock(Mutex *mutex);
|
||||
// src/secure_context.h
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef SERVER_CERTIFICATE_LIMIT
|
||||
// Maximum number of certificates that can be
|
||||
// associated to a TLS server. This doesn't include
|
||||
// the default certificate.
|
||||
#define SERVER_CERTIFICATE_LIMIT 8
|
||||
#endif
|
||||
|
||||
int global_secure_context_init(void);
|
||||
int global_secure_context_free(void);
|
||||
|
||||
typedef struct {
|
||||
#ifdef HTTPS_ENABLED
|
||||
// TODO
|
||||
SSL_CTX *p;
|
||||
#endif
|
||||
} ClientSecureContext;
|
||||
|
||||
int client_secure_context_init(ClientSecureContext *ctx);
|
||||
int client_secure_context_free(ClientSecureContext *ctx);
|
||||
|
||||
typedef struct {
|
||||
|
||||
} SecureDomain;
|
||||
int client_secure_context_init(ClientSecureContext *ctx);
|
||||
void client_secure_context_free(ClientSecureContext *ctx);
|
||||
|
||||
typedef struct {
|
||||
#ifdef HTTPS_ENABLED
|
||||
char domain[128];
|
||||
SSL_CTX *ctx;
|
||||
#endif
|
||||
} ServerCertificate;
|
||||
|
||||
typedef struct {
|
||||
#ifdef HTTPS_ENABLED
|
||||
// TODO
|
||||
SSL_CTX *p;
|
||||
int num_certs;
|
||||
ServerCertificate certs[SERVER_CERTIFICATE_LIMIT];
|
||||
#endif
|
||||
} ServerSecureContext;
|
||||
|
||||
int server_secure_context_init(ServerSecureContext *ctx);
|
||||
int server_secure_context_free(ServerSecureContext *ctx);
|
||||
int server_secure_context_add_certificate(ServerSecureContext *ctx,
|
||||
int server_secure_context_init(ServerSecureContext *ctx,
|
||||
HTTP_String cert_file, HTTP_String key_file);
|
||||
void server_secure_context_free(ServerSecureContext *ctx);
|
||||
int server_secure_context_add_certificate(ServerSecureContext *ctx,
|
||||
HTTP_String domain, HTTP_String cert_file, HTTP_String key_file);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -366,6 +381,11 @@ typedef enum {
|
||||
SOCKET_STATE_DIED,
|
||||
} SocketState;
|
||||
|
||||
typedef struct {
|
||||
int refs;
|
||||
char data[];
|
||||
} RegisteredName;
|
||||
|
||||
// Internal use only
|
||||
typedef struct {
|
||||
union {
|
||||
@@ -374,6 +394,15 @@ typedef struct {
|
||||
};
|
||||
bool is_ipv4;
|
||||
Port port;
|
||||
|
||||
#ifdef HTTPS_ENABLED
|
||||
// When connecting to a peer using TLS, if the address
|
||||
// was resolved from a registered name, that name is
|
||||
// used to request the correct certificate once the TCP
|
||||
// handshake is established, and therefore need to
|
||||
// store it somewhere until that happens.
|
||||
RegisteredName *name;
|
||||
#endif
|
||||
} AddressAndPort;
|
||||
|
||||
// Internal use only
|
||||
@@ -405,6 +434,12 @@ typedef struct {
|
||||
AddressAndPort addr; // When num_addr=1
|
||||
AddressAndPort *addrs; // Dynamically allocated when num_addr>1
|
||||
};
|
||||
|
||||
#ifdef HTTPS_ENABLED
|
||||
ServerSecureContext *server_secure_context;
|
||||
SSL *ssl;
|
||||
#endif
|
||||
|
||||
} Socket;
|
||||
|
||||
// Glorified array of sockets. This structure
|
||||
@@ -476,8 +511,8 @@ int socket_manager_listen_tcp(SocketManager *sm,
|
||||
// and secure connections.
|
||||
// Returns 0 on success, -1 on error.
|
||||
int socket_manager_listen_tls(SocketManager *sm,
|
||||
HTTP_String addr, Port port, HTTP_String cert_file_name,
|
||||
HTTP_String key_file_name);
|
||||
HTTP_String addr, Port port, HTTP_String cert_file,
|
||||
HTTP_String key_file);
|
||||
|
||||
// If the socket manager was configures to accept
|
||||
// TLS connections, this adds additional certificates
|
||||
|
||||
Reference in New Issue
Block a user