มีหลายขั้นตอนเมื่อใช้ OpenSSL คุณต้องมีใบรับรอง SSL ที่สร้างขึ้นซึ่งสามารถมีใบรับรองที่มีคีย์ส่วนตัวโปรดระบุตำแหน่งที่แน่นอนของใบรับรอง (ตัวอย่างนี้มีอยู่ในรูท) มีบทเรียนดีๆมากมายอยู่ที่นั่น
บางรายการรวมถึง:
#include <openssl/applink.c>
#include <openssl/bio.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
คุณจะต้องเริ่มต้น OpenSSL:
void InitializeSSL()
{
SSL_load_error_strings();
SSL_library_init();
OpenSSL_add_all_algorithms();
}
void DestroySSL()
{
ERR_free_strings();
EVP_cleanup();
}
void ShutdownSSL()
{
SSL_shutdown(cSSL);
SSL_free(cSSL);
}
ตอนนี้สำหรับฟังก์ชันจำนวนมาก คุณอาจต้องการเพิ่ม while loop ในการเชื่อมต่อ
int sockfd, newsockfd;
SSL_CTX *sslctx;
SSL *cSSL;
InitializeSSL();
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd< 0)
{
//Log and Error
return;
}
struct sockaddr_in saiServerAddress;
bzero((char *) &saiServerAddress, sizeof(saiServerAddress));
saiServerAddress.sin_family = AF_INET;
saiServerAddress.sin_addr.s_addr = serv_addr;
saiServerAddress.sin_port = htons(aPortNumber);
bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
listen(sockfd,5);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
sslctx = SSL_CTX_new( SSLv23_server_method());
SSL_CTX_set_options(sslctx, SSL_OP_SINGLE_DH_USE);
int use_cert = SSL_CTX_use_certificate_file(sslctx, "/serverCertificate.pem" , SSL_FILETYPE_PEM);
int use_prv = SSL_CTX_use_PrivateKey_file(sslctx, "/serverCertificate.pem", SSL_FILETYPE_PEM);
cSSL = SSL_new(sslctx);
SSL_set_fd(cSSL, newsockfd );
//Here is the SSL Accept portion. Now all reads and writes must use SSL
ssl_err = SSL_accept(cSSL);
if(ssl_err <= 0)
{
//Error occurred, log and close down ssl
ShutdownSSL();
}
จากนั้นคุณสามารถอ่านหรือเขียนโดยใช้:
SSL_read(cSSL, (char *)charBuffer, nBytesToRead);
SSL_write(cSSL, "Hi :3\n", 6);
ปรับปรุงSSL_CTX_new
ควรจะเรียกว่ามีวิธี TLS SSLv23_server_method()
ที่เหมาะกับความต้องการของคุณในการสั่งซื้อเพื่อสนับสนุนรุ่นใหม่ของการรักษาความปลอดภัยแทน ดู:
คำอธิบาย OpenSSL SSL_CTX_new
TLS_method (), TLS_server_method (), TLS_client_method ()
นี่คือเมธอด SSL / TLS ที่ยืดหยุ่นสำหรับเวอร์ชันสำหรับวัตถุประสงค์ทั่วไป เวอร์ชันโปรโตคอลจริงที่ใช้จะถูกต่อรองกับเวอร์ชันสูงสุดที่ไคลเอ็นต์และเซิร์ฟเวอร์รองรับ โปรโตคอลที่รองรับ ได้แก่ SSLv3, TLSv1, TLSv1.1, TLSv1.2 และ TLSv1.3