Giriş
Şu satırı dahil ederiz.
TLS V1.2 ise daha düşük sürümdeki şunlar desteklenir. Daha düşük protokol desteği için Windows'ta ayarları değiştirmek gerekebilir.
Şu satırı dahil ederiz.
#include <boost/asio/ssl.hpp>
Constructor - methodTLS V1.2 ise daha düşük sürümdeki şunlar desteklenir. Daha düşük protokol desteği için Windows'ta ayarları değiştirmek gerekebilir.
TLS v. 1.1, TLS v. 1.0, SSL 3.0, SSL 2.0
Şöyle yaparız.
asio::ssl::context ctx (asio::ssl::context::tlsv12_server);
veya şöyle yaparız.asio::ssl::context ctx(asio::ssl::context::tlsv12_client);
veya şöyle yaparız.asio::ssl::context ctx (asio::ssl::context::tlsv11);
veya şöyle yaparız.asio::ssl::context ctx (asio::ssl::context::sslv23_client);
veya şöyle yaparız.asio::ssl::context ctx (asio::ssl::context::sslv23)
Constructor - io_service + method
Bu constructor deprecated. Kullanılmamalı. Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
CA sertifikaların olduğu dosyayı yükler. Şöyle yaparız.
Şöyle yaparız.
Örnek
Şöyle yaparız.
set_options metodu
Bu constructor deprecated. Kullanılmamalı. Şöyle yaparız.
boost::asio::io_service ios;
asio::ssl::context ctx {ios, asio::ssl::context::method::sslv23_client};
add_certificate_authority metoduŞöyle yaparız.
std::vector<char> caCrtBuffer = ...;
ctx.add_certificate_authority(asio::buffer(caCrtBuffer, caCrtBuffer.size()));
impl metoduŞöyle yaparız.
SSL_CTX* impl = ctx.impl();
load_verify_file metoduCA sertifikaların olduğu dosyayı yükler. Şöyle yaparız.
ctx.load_verify_file(filename);
Şöyle yaparız.ctx.load_verify_file("ca.pem");
Sertifiları windows'ta almak için şöyle yaparız.#include <windows.h>
#include <Wincrypt.h>
std::vector<std::string> system_root_certificates()
{
std::vector<std::string> certs;
HCERTSTORE hStore;
PCCERT_CONTEXT pCertContext = NULL;
if (!(hStore = ::CertOpenStore(
CERT_STORE_PROV_SYSTEM_A,
0,
NULL,
CERT_SYSTEM_STORE_CURRENT_USER,
"Root")))
return certs;
do
{
if (pCertContext = ::CertFindCertificateInStore(
hStore,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
0,
CERT_FIND_ANY,
NULL,
pCertContext))
{
certs.push_back("-----BEGIN CERTIFICATE-----\n" +
Base64::encode_copy(std::string((char *) pCertContext->pbCertEncoded,
(size_t) pCertContext->cbCertEncoded), true) +
"\n-----END CERTIFICATE-----\n");
}
} while (pCertContext);
if (!pCertContext)
::CertFreeCertificateContext(pCertContext);
::CertCloseStore(
hStore,
CERT_CLOSE_STORE_FORCE_FLAG);
return certs;
}
Dosya oluşturmak için şöyle yaparız....
for (size_t i = 0; i < certs.size(); ++i)
certFile << certs[i];
...
native_handle metoduŞöyle yaparız.
SSL_CIPHER* handle = ctx->native_handle();
set_default_verify_paths metodu
Açıklaması şöyle.Trusted certificates are often installed or updated via the OS, browsers, or individual packages. For instance, in the *nix world, the certificates are often available through the ca-certificates package, and the certificates are installed to locations that boost::asio::ssl::context::set_default_verify_paths() will find.OpenSSL kurulumunun oluşturduğu CA'ları kullanır. Bu dizin sanırım SSL_CERT_DIR ortam değişkeni ile belirtiliyor.
Örnek
Şöyle yaparız.
// set security
ctx.set_default_verify_paths();
Örnek 1
Şöyle yaparız.
SSLv2 istemiyorsak şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Örnek ver. ssl::stream sınıfında da aynı metod mevcut.
set_verify_mode metodu
İstemci tarafında şöyle yaparız.
Şöyle yaparız.
ctx.set_options(SSL_OP_NO_TICKET);
ÖrnekSSLv2 istemiyorsak şöyle yaparız.
ctx.set_options
(
boost::asio::ssl::context::default_workarounds |
boost::asio::ssl::context::no_sslv2
);
Örnek
Bir çok sunucu SSLV3 ve altını desteklemiyor. Sunucular şu hatayı verirler.Bu desteği istemediğimizi belirtmek için şöyle yaparız.Error: sslv3 alert handshake failure
ctx.set_options(boost::asio::ssl::context::default_workarounds |
boost::asio::ssl::context::no_sslv2 |
boost::asio::ssl::context::no_sslv3);
ÖrnekŞöyle yaparız.
try {
ctx.set_options(boost::asio::ssl::context::default_workarounds |
boost::asio::ssl::context::no_sslv2 |
boost::asio::ssl::context::no_sslv3 |
boost::asio::ssl::context::single_dh_use);
}
catch (std::exception& e) {
std::cout << e.what() << std::endl;
}
ÖrnekŞöyle yaparız.
ctx.set_options(asio::ssl::context::default_workarounds | asio::ssl::context::no_sslv2 | asio::ssl::context::no_sslv3 | asio::ssl::context::no_tlsv1 | asio::ssl::context::no_tlsv1_1 | asio::ssl::context::single_dh_use);
ÖrnekŞöyle yaparız.
ctx.set_options( asio::ssl::context::default_workarounds |
asio::ssl::context::no_sslv2 |
asio::ssl::context::single_dh_use);
set_password_callback metoduŞöyle yaparız.
ctx.set_password_callback (&password_callback);
set_verify_callback metoduÖrnek ver. ssl::stream sınıfında da aynı metod mevcut.
set_verify_mode metodu
İstemci tarafında şöyle yaparız.
ctx.set_verify_mode(asio::ssl::verify_peer |
asio::ssl::verify_fail_if_no_peer_cert);
user_certificate_chain metodu
SSL sunucusunda kullanılır. Şöyle yaparız.
Şöyle yaparız.
boost::asio::const_buffer cert = ...;
ctx.use_certificate_chain (cert);
Şöyle yaparız.std::vector<char> buf = ...; ctx.use_certificate_chain (asio::buffer(buf, userCrtBuffer.size()));
use_certificate_chain_file metoduŞöyle yaparız.
ctx.use_certificate_chain_file("server.pem");
user_certificate_file metodu
Şöyle yaparız.
ctx.use_certificate_file ("public_key.pem", ssl::context::pem);
use_private_key metodu
SSL sunucusunda kullanılır. Şöyle yaparız.
Şöyle yaparız.
boost::asio::const_buffer key =...;
ctx.use_private_key(key, boost::asio::ssl::context::pem);
Şöyle yaparız.std::vector<char> userKeyBuffer = ctx.use_private_key (asio::buffer(userKeyBuffer, userKeyBuffer.size()), asio::ssl::context::pem);
use_private_key_file metoduŞöyle yaparız.
ctx.use_private_key_file("server.pem", boost::asio::ssl::context::pem);
use_rsa_private_key_file metodu
Şöyle yaparız.
ctx.use_rsa_private_key_file ("private_key.pem", ssl::context::pem);
use_tmp_dh metodu
Şöyle yaparız.
std::vector<char> dhParamsBuffer = ...
ctx.use_tmp_dh (asio::buffer(dhParamsBuffer, dhParamsBuffer.size()));
Hiç yorum yok:
Yorum Gönder