展示使用 OpenSSL 庫構建基於 TCP 的 SSL/TLS 加密通訊雙向示例,含證書生成、編譯、運行全流程。
SSL_library_init(), OpenSSL_add_all_algorithms(), SSL_load_error_strings()SSL_CTX_new(SSLv23_server_method())SSL_CTX_use_certificate_file(), SSL_CTX_use_PrivateKey_file(), SSL_CTX_check_private_key()socket → bind → listenaccept → SSL_new → SSL_set_fd → SSL_acceptSSL_write / SSL_readSSL_shutdown → SSL_free → close → SSL_CTX_free
SSL_CTX_new(SSLv23_client_method())socket → connectSSL_new → SSL_set_fd → SSL_connectSSL_get_peer_certificate → X509_NAME_oneline 解析主體/頒發者SSL_read / SSL_write
SSL *ssl = SSL_new(ctx);
SSL_set_fd(ssl, new_fd);
if (SSL_accept(ssl) == -1) {
ERR_print_errors_fp(stderr);
close(new_fd);
continue;
}
// 安全通道已建立,使用 SSL_write/SSL_read 替代 send/recv
# 生成 2048 位 RSA 私鑰 openssl genrsa -out privkey.pem 2048 # 自簽證書,有效期 3 年 openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
# 編譯 gcc -Wall ssl-server.c -o server -lssl -lcrypto gcc -Wall ssl-client.c -o client -lssl -lcrypto # 運行服務端:端口 7838,監聽 127.0.0.1 ./server 7838 1 127.0.0.1 cacert.pem privkey.pem # 運行客戶端 ./client 127.0.0.1 7838

SSL_CTX_load_verify_locationsTLS_server_method() 並設置 SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION)ERR_get_error() 診斷SSL_MODE_ENABLE_PARTIAL_WRITE 等模式並配合 select/epollman ssl, man SSL_CTX_new