#include #include #include #include #include int main(int argc, char **argv) { SSL_CTX *ctx = SSL_CTX_new(TLS_server_method()); SSL_CTX_use_certificate_chain_file(ctx, "chain.pem") == 1 || fprintf(stderr, "problem with chain.pem\n"); //SSL_CTX_use_certificate_file(ctx, "server.crt", SSL_FILETYPE_PEM) == 1 || fprintf(stderr, "problem with server.crt\n"); SSL_CTX_use_PrivateKey_file(ctx, "server.key", SSL_FILETYPE_PEM) == 1 || fprintf(stderr, "problem with server.key\n"); struct sockaddr_in sa = {0}; sa.sin_family = AF_INET; sa.sin_addr.s_addr = INADDR_ANY; sa.sin_port = htons(atoi(argv[1])); int sfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); bind(sfd, (struct sockaddr *)&sa, sizeof(sa)) == 0 || fprintf(stderr, "problem with bind\n"); listen(sfd, 10); while (1) { int cfd = accept(sfd, NULL, NULL); SSL *ssl = SSL_new(ctx); SSL_set_fd(ssl, cfd); SSL_accept(ssl); char buf[1024]; SSL_read(ssl, buf, sizeof(buf)); SSL_write(ssl, "Welcome to the SSL/TLS server!\n", 31); SSL_shutdown(ssl); SSL_free(ssl); close(cfd); } }