OpenSSL kullanırken birkaç adım vardır. Özel anahtara sahip sertifikayı içerebilecek bir SSL sertifikasına sahip olmalısınız, sertifikanın tam konumunu belirttiğinizden emin olun (bu örnekte, kökte vardır). Orada birçok iyi öğretici var.
Bazıları şunları içerir:
#include <openssl/applink.c>
#include <openssl/bio.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
OpenSSL'yi başlatmanız gerekecek:
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);
}
Şimdi işlevselliğin büyük kısmı için. Bağlantılara bir while döngüsü eklemek isteyebilirsiniz.
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();
}
Daha sonra aşağıdakileri kullanarak okuyabilir veya yazabilirsiniz:
SSL_read(cSSL, (char *)charBuffer, nBytesToRead);
SSL_write(cSSL, "Hi :3\n", 6);
GüncellemeSSL_CTX_new
sırayla ihtiyaçlarını en uygun yerine, güvenlik yeni sürümlerini desteklemek için bu TLS yöntemi ile çağrılmalıdır SSLv23_server_method()
. Bkz:
OpenSSL SSL_CTX_new açıklama
TLS_method (), TLS_server_method (), TLS_client_method ().
Bunlar genel amaçlı sürüm esnek SSL / TLS yöntemleridir. Kullanılan gerçek protokol sürümü, istemci ve sunucu tarafından karşılıklı olarak desteklenen en yüksek sürüme göre müzakere edilecektir. Desteklenen protokoller SSLv3, TLSv1, TLSv1.1, TLSv1.2 ve TLSv1.3'tür.