ओपनएसएसएल का उपयोग करते समय कई चरण होते हैं। आपके पास एक एसएसएल प्रमाणपत्र होना चाहिए, जिसमें प्रमाणपत्र हो सकता है जिसमें निजी कुंजी के साथ प्रमाणपत्र का सटीक स्थान निर्दिष्ट करना सुनिश्चित हो (यह उदाहरण मूल में है)। वहाँ बहुत सारे अच्छे ट्यूटोरियल हैं।
कुछ में शामिल हैं:
#include <openssl/applink.c>
#include <openssl/bio.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
आपको ओपनएसएसएल को इनिशियलाइज़ करने की आवश्यकता होगी:
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);
}
अब कार्यक्षमता के थोक के लिए। आप कनेक्शन पर कुछ समय लूप जोड़ना चाह सकते हैं।
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
टीएलएस विधि है कि सबसे अच्छा फिट क्रम में अपनी आवश्यकताओं के बजाय सुरक्षा के नए संस्करण का समर्थन करने के साथ बुलाया जाना चाहिए SSLv23_server_method()
। देखें:
OpenSSL SSL_CTX_new विवरण
TLS_method (), TLS_server_method (), TLS_client_method ()।
ये सामान्य प्रयोजन के संस्करण-लचीले एसएसएल / टीएलएस तरीके हैं। उपयोग किए जाने वाले वास्तविक प्रोटोकॉल संस्करण को क्लाइंट और सर्वर द्वारा पारस्परिक रूप से समर्थित उच्चतम संस्करण से बातचीत की जाएगी। समर्थित प्रोटोकॉल SSLv3, TLSv1, TLSv1.1, TLSv1.2 और TLSv1.3 हैं।