UniEvent-HTTP

 view release on metacpan or  search on metacpan

clib/tests/lib/test.cc  view on Meta::CPAN

    string cert = path + "/" + cert_name + ".pem";
    string key = path + "/" + cert_name + ".key";
    int err;

    err = SSL_CTX_use_certificate_file(ctx, cert.c_str(), SSL_FILETYPE_PEM);
    assert(err);

    err = SSL_CTX_use_PrivateKey_file(ctx, key.c_str(), SSL_FILETYPE_PEM);
    assert(err);

    err = SSL_CTX_check_private_key(ctx);
    assert(err);
    return r;
}

string TServer::uri () const {
    string uri = secure ? string("https://") : string("http://");
    uri += sockaddr()->ip();
    uri += ":";
    uri += to_string(sockaddr()->port());
    uri += "/";

clib/tests/lib/test.cc  view on Meta::CPAN


    err = SSL_CTX_load_verify_locations(ctx, ca.c_str(), nullptr);
    assert(err);

    err = SSL_CTX_use_certificate_file(ctx, cert.c_str(), SSL_FILETYPE_PEM);
    assert(err);

    err = SSL_CTX_use_PrivateKey_file(ctx, key.c_str(), SSL_FILETYPE_PEM);
    assert(err);

    SSL_CTX_check_private_key(ctx);
    assert(err);

    SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, nullptr);
    SSL_CTX_set_verify_depth(ctx, 4);

    return r;
}


TClientSP TPool::request (const RequestSP& req) {

lib/UniEvent/HTTP/Request.pod  view on Meta::CPAN


Get/set ssl context. By default, ssl context is autocreated when HTTPS location is requested, but for more precise control (validating server's certificate,
authorizing via ssl, etc) ssl context can be created by hand via L<Net::SSLeay> module and passed here.

After creating context via L<Net::SSLeay> and passing to this method, you can release context via C<CTX_free()> function from C<Net::SSLeay> as it is refcounted
and held by request object.

    my $ctx = Net::SSLeay::CTX_new();
    Net::SSLeay::CTX_use_certificate_file($ctx, "cert/ca.pem", Net::SSLeay::FILETYPE_PEM);
    Net::SSLeay::CTX_use_PrivateKey_file($ctx, "cert/ca.key", Net::SSLeay::FILETYPE_PEM);
    Net::SSLeay::CTX_check_private_key($ctx) or die "wtf?";
    
    $request->ssl_ctx($ctx);
    
    Net::SSLeay::CTX_free($ctx);


=head2 proxy([$url])

Get/set socks5 proxy url as string or L<URI::XS> object. Url scheme must be C<socks5>.

t/client/redirect.t  view on Meta::CPAN

use Net::SSLeay;

variate_catch('[client-redirect]', 'ssl');

subtest "redirect with SSL" => sub {
    my $SERVER_CERT = "t/cert/ca127.pem";

    my $serv_ctx = Net::SSLeay::CTX_new_with_method(Net::SSLeay::SSLv23_server_method()) or sslerr();
    Net::SSLeay::CTX_use_certificate_file($serv_ctx, $SERVER_CERT, &Net::SSLeay::FILETYPE_PEM) or sslerr();
    Net::SSLeay::CTX_use_PrivateKey_file($serv_ctx, ($SERVER_CERT =~ s/.pem$/.key/r), &Net::SSLeay::FILETYPE_PEM) or sslerr();
    Net::SSLeay::CTX_check_private_key($serv_ctx) or sslerr();
    Net::SSLeay::CTX_load_verify_locations($serv_ctx, $SERVER_CERT, undef) or sslerr();
    Net::SSLeay::CTX_set_verify($serv_ctx, &Net::SSLeay::VERIFY_PEER | &Net::SSLeay::VERIFY_FAIL_IF_NO_PEER_CERT, undef );
    Net::SSLeay::CTX_set_verify_depth($serv_ctx, 4);

    my $client_ctx = Net::SSLeay::CTX_new_with_method(Net::SSLeay::SSLv23_client_method()) or sslerr();
    Net::SSLeay::CTX_load_verify_locations($client_ctx, $SERVER_CERT, undef) or sslerr();
    Net::SSLeay::CTX_use_certificate_file($client_ctx, 't/cert/01-alice-127.pem', &Net::SSLeay::FILETYPE_PEM) or sslerr();
    Net::SSLeay::CTX_use_PrivateKey_file($client_ctx, 't/cert/01-alice-127.key', &Net::SSLeay::FILETYPE_PEM) or sslerr();
    Net::SSLeay::CTX_check_private_key($client_ctx) or sslerr();
    Net::SSLeay::CTX_set_verify($client_ctx, &Net::SSLeay::VERIFY_PEER);
    Net::SSLeay::CTX_set_verify_depth($client_ctx, 4);

    my $server_cfg = { locations => [{host => "localhost",  ssl_ctx => $serv_ctx}]};

    my $test   = UE::Test::Async->new(["connect", "redirect"]);
    my $server = MyTest::make_server($test->loop, $server_cfg);
    my $client = MyTest::TClient->new($test->loop);

    $client->{sa} = $server->sockaddr;



( run in 0.279 second using v1.01-cache-2.11-cpan-4d50c553e7e )