1Net::SSLeay(3) User Contributed Perl Documentation Net::SSLeay(3)
2
3
4
6 Net::SSLeay - Perl extension for using OpenSSL
7
9 use Net::SSLeay qw(get_https post_https sslcat make_headers make_form);
10
11 ($page) = get_https('www.bacus.pt', 443, '/'); # Case 1
12
13 ($page, $response, %reply_headers)
14 = get_https('www.bacus.pt', 443, '/', # Case 2
15 make_headers(User-Agent => 'Cryptozilla/5.0b1',
16 Referer => 'https://www.bacus.pt'
17 ));
18
19 ($page, $result, %headers) = # Case 2b
20 = get_https('www.bacus.pt', 443, '/protected.html',
21 make_headers(Authorization =>
22 'Basic ' . MIME::Base64::encode("$user:$pass",''))
23 );
24
25 ($page, $response, %reply_headers)
26 = post_https('www.bacus.pt', 443, '/foo.cgi', '', # Case 3
27 make_form(OK => '1',
28 name => 'Sampo'
29 ));
30
31 $reply = sslcat($host, $port, $request); # Case 4
32
33 ($reply, $err, $server_cert) = sslcat($host, $port, $request); # Case 5
34
35 $Net::SSLeay::trace = 2; # 0=no debugging, 1=ciphers, 2=trace, 3=dump data
36
37 Net::SSLeay::initialize(); # Initialize ssl library once
38
40 Net::SSLeay module contains perl bindings to openssl
41 (<http://www.openssl.org>) library.
42
43 COMPATIBILITY NOTE: Net::SSLeay cannot be built with pre-0.9.3 openssl.
44 It is strongly recommended to use at least 0.9.7 (as older versions are
45 not tested during development). Some low level API functions may be
46 available with certain openssl versions.
47
48 It is compatible with OpenSSL 1.0 and 1.1. Some functions are not
49 available under OpenSSL 1.1.
50
51 Net::SSLeay module basically comprise of:
52
53 · High level functions for accessing web servers (by using
54 HTTP/HTTPS)
55
56 · Low level API (mostly mapped 1:1 to openssl's C functions)
57
58 · Convenience functions (related to low level API but with more perl
59 friendly interface)
60
61 There is also a related module called Net::SSLeay::Handle included in
62 this distribution that you might want to use instead. It has its own
63 pod documentation.
64
65 High level functions for accessing web servers
66 This module offers some high level convenience functions for accessing
67 web pages on SSL servers (for symmetry, the same API is offered for
68 accessing http servers, too), an "sslcat()" function for writing your
69 own clients, and finally access to the SSL api of the SSLeay/OpenSSL
70 package so you can write servers or clients for more complicated
71 applications.
72
73 For high level functions it is most convenient to import them into your
74 main namespace as indicated in the synopsis.
75
76 Basic set of functions
77
78 · get_https
79
80 · post_https
81
82 · put_https
83
84 · head_https
85
86 · do_https
87
88 · sslcat
89
90 · https_cat
91
92 · make_form
93
94 · make_headers
95
96 Case 1 (in SYNOPSIS) demonstrates the typical invocation of get_https()
97 to fetch an HTML page from secure server. The first argument provides
98 the hostname or IP in dotted decimal notation of the remote server to
99 contact. The second argument is the TCP port at the remote end (your
100 own port is picked arbitrarily from high numbered ports as usual for
101 TCP). The third argument is the URL of the page without the host name
102 part. If in doubt consult the HTTP specifications at
103 <http://www.w3c.org>.
104
105 Case 2 (in SYNOPSIS) demonstrates full fledged use of "get_https()". As
106 can be seen, "get_https()" parses the response and response headers and
107 returns them as a list, which can be captured in a hash for later
108 reference. Also a fourth argument to "get_https()" is used to insert
109 some additional headers in the request. "make_headers()" is a function
110 that will convert a list or hash to such headers. By default
111 "get_https()" supplies "Host" (to make virtual hosting easy) and
112 "Accept" (reportedly needed by IIS) headers.
113
114 Case 2b (in SYNOPSIS) demonstrates how to get a password protected
115 page. Refer to the HTTP protocol specifications for further details
116 (e.g. RFC-2617).
117
118 Case 3 (in SYNOPSIS) invokes "post_https()" to submit a HTML/CGI form
119 to a secure server. The first four arguments are equal to "get_https()"
120 (note that the empty string ('') is passed as header argument). The
121 fifth argument is the contents of the form formatted according to CGI
122 specification. Do not post UTF-8 data as content: use utf8::downgrade
123 first. In this case the helper function "make_https()" is used to do
124 the formatting, but you could pass any string. "post_https()"
125 automatically adds "Content-Type" and "Content-Length" headers to the
126 request.
127
128 Case 4 (in SYNOPSIS) shows the fundamental "sslcat()" function
129 (inspired in spirit by the "netcat" utility :-). It's your swiss army
130 knife that allows you to easily contact servers, send some data, and
131 then get the response. You are responsible for formatting the data and
132 parsing the response - "sslcat()" is just a transport.
133
134 Case 5 (in SYNOPSIS) is a full invocation of "sslcat()" which allows
135 the return of errors as well as the server (peer) certificate.
136
137 The $trace global variable can be used to control the verbosity of the
138 high level functions. Level 0 guarantees silence, level 1 (the default)
139 only emits error messages.
140
141 Alternate versions of high-level API
142
143 · get_https3
144
145 · post_https3
146
147 · put_https3
148
149 · get_https4
150
151 · post_https4
152
153 · put_https4
154
155 The above mentioned functions actually return the response headers as a
156 list, which only gets converted to hash upon assignment (this
157 assignment looses information if the same header occurs twice, as may
158 be the case with cookies). There are also other variants of the
159 functions that return unprocessed headers and that return a reference
160 to a hash.
161
162 ($page, $response, @headers) = get_https('www.bacus.pt', 443, '/');
163 for ($i = 0; $i < $#headers; $i+=2) {
164 print "$headers[$i] = " . $headers[$i+1] . "\n";
165 }
166
167 ($page, $response, $headers, $server_cert)
168 = get_https3('www.bacus.pt', 443, '/');
169 print "$headers\n";
170
171 ($page, $response, $headers_ref)
172 = get_https4('www.bacus.pt', 443, '/');
173 for $k (sort keys %{$headers_ref}) {
174 for $v (@{$$headers_ref{$k}}) {
175 print "$k = $v\n";
176 }
177 }
178
179 All of the above code fragments accomplish the same thing: display all
180 values of all headers. The API functions ending in "3" return the
181 headers simply as a scalar string and it is up to the application to
182 split them up. The functions ending in "4" return a reference to a hash
183 of arrays (see perlref and perllol if you are not familiar with complex
184 perl data structures). To access a single value of such a header hash
185 you would do something like
186
187 print $$headers_ref{COOKIE}[0];
188
189 Variants 3 and 4 also allow you to discover the server certificate in
190 case you would like to store or display it, e.g.
191
192 ($p, $resp, $hdrs, $server_cert) = get_https3('www.bacus.pt', 443, '/');
193 if (!defined($server_cert) || ($server_cert == 0)) {
194 warn "Subject Name: undefined, Issuer Name: undefined";
195 } else {
196 warn 'Subject Name: '
197 . Net::SSLeay::X509_NAME_oneline(
198 Net::SSLeay::X509_get_subject_name($server_cert))
199 . 'Issuer Name: '
200 . Net::SSLeay::X509_NAME_oneline(
201 Net::SSLeay::X509_get_issuer_name($server_cert));
202 }
203
204 Beware that this method only allows after the fact verification of the
205 certificate: by the time "get_https3()" has returned the https request
206 has already been sent to the server, whether you decide to trust it or
207 not. To do the verification correctly you must either employ the
208 OpenSSL certificate verification framework or use the lower level API
209 to first connect and verify the certificate and only then send the http
210 data. See the implementation of "ds_https3()" for guidance on how to do
211 this.
212
213 Using client certificates
214
215 Secure web communications are encrypted using symmetric crypto keys
216 exchanged using encryption based on the certificate of the server.
217 Therefore in all SSL connections the server must have a certificate.
218 This serves both to authenticate the server to the clients and to
219 perform the key exchange.
220
221 Sometimes it is necessary to authenticate the client as well. Two
222 options are available: HTTP basic authentication and a client side
223 certificate. The basic authentication over HTTPS is actually quite safe
224 because HTTPS guarantees that the password will not travel in the
225 clear. Never-the-less, problems like easily guessable passwords remain.
226 The client certificate method involves authentication of the client at
227 the SSL level using a certificate. For this to work, both the client
228 and the server have certificates (which typically are different) and
229 private keys.
230
231 The API functions outlined above accept additional arguments that allow
232 one to supply the client side certificate and key files. The format of
233 these files is the same as used for server certificates and the caveat
234 about encrypting private keys applies.
235
236 ($page, $result, %headers) = # 2c
237 = get_https('www.bacus.pt', 443, '/protected.html',
238 make_headers(Authorization =>
239 'Basic ' . MIME::Base64::encode("$user:$pass",'')),
240 '', $mime_type6, $path_to_crt7, $path_to_key8);
241
242 ($page, $response, %reply_headers)
243 = post_https('www.bacus.pt', 443, '/foo.cgi', # 3b
244 make_headers('Authorization' =>
245 'Basic ' . MIME::Base64::encode("$user:$pass",'')),
246 make_form(OK => '1', name => 'Sampo'),
247 $mime_type6, $path_to_crt7, $path_to_key8);
248
249 Case 2c (in SYNOPSIS) demonstrates getting a password protected page
250 that also requires a client certificate, i.e. it is possible to use
251 both authentication methods simultaneously.
252
253 Case 3b (in SYNOPSIS) is a full blown POST to a secure server that
254 requires both password authentication and a client certificate, just
255 like in case 2c.
256
257 Note: The client will not send a certificate unless the server requests
258 one. This is typically achieved by setting the verify mode to
259 "VERIFY_PEER" on the server:
260
261 Net::SSLeay::set_verify(ssl, Net::SSLeay::VERIFY_PEER, 0);
262
263 See "perldoc ~openssl/doc/ssl/SSL_CTX_set_verify.pod" for a full
264 description.
265
266 Working through a web proxy
267
268 · set_proxy
269
270 "Net::SSLeay" can use a web proxy to make its connections. You need to
271 first set the proxy host and port using "set_proxy()" and then just use
272 the normal API functions, e.g:
273
274 Net::SSLeay::set_proxy('gateway.myorg.com', 8080);
275 ($page) = get_https('www.bacus.pt', 443, '/');
276
277 If your proxy requires authentication, you can supply a username and
278 password as well
279
280 Net::SSLeay::set_proxy('gateway.myorg.com', 8080, 'joe', 'salainen');
281 ($page, $result, %headers) =
282 = get_https('www.bacus.pt', 443, '/protected.html',
283 make_headers(Authorization =>
284 'Basic ' . MIME::Base64::encode("susie:pass",''))
285 );
286
287 This example demonstrates the case where we authenticate to the proxy
288 as "joe" and to the final web server as "susie". Proxy authentication
289 requires the "MIME::Base64" module to work.
290
291 HTTP (without S) API
292
293 · get_http
294
295 · post_http
296
297 · tcpcat
298
299 · get_httpx
300
301 · post_httpx
302
303 · tcpxcat
304
305 Over the years it has become clear that it would be convenient to use
306 the light-weight flavour API of "Net::SSLeay" for normal HTTP as well
307 (see "LWP" for the heavy-weight object-oriented approach). In fact it
308 would be nice to be able to flip https on and off on the fly. Thus
309 regular HTTP support was evolved.
310
311 use Net::SSLeay qw(get_http post_http tcpcat
312 get_httpx post_httpx tcpxcat
313 make_headers make_form);
314
315 ($page, $result, %headers)
316 = get_http('www.bacus.pt', 443, '/protected.html',
317 make_headers(Authorization =>
318 'Basic ' . MIME::Base64::encode("$user:$pass",''))
319 );
320
321 ($page, $response, %reply_headers)
322 = post_http('www.bacus.pt', 443, '/foo.cgi', '',
323 make_form(OK => '1',
324 name => 'Sampo'
325 ));
326
327 ($reply, $err) = tcpcat($host, $port, $request);
328
329 ($page, $result, %headers)
330 = get_httpx($usessl, 'www.bacus.pt', 443, '/protected.html',
331 make_headers(Authorization =>
332 'Basic ' . MIME::Base64::encode("$user:$pass",''))
333 );
334
335 ($page, $response, %reply_headers)
336 = post_httpx($usessl, 'www.bacus.pt', 443, '/foo.cgi', '',
337 make_form(OK => '1', name => 'Sampo' ));
338
339 ($reply, $err, $server_cert) = tcpxcat($usessl, $host, $port, $request);
340
341 As can be seen, the "x" family of APIs takes as the first argument a
342 flag which indicates whether SSL is used or not.
343
344 Certificate verification and Certificate Revocation Lists (CRLs)
345 OpenSSL supports the ability to verify peer certificates. It can also
346 optionally check the peer certificate against a Certificate Revocation
347 List (CRL) from the certificates issuer. A CRL is a file, created by
348 the certificate issuer that lists all the certificates that it
349 previously signed, but which it now revokes. CRLs are in PEM format.
350
351 You can enable "Net::SSLeay CRL" checking like this:
352
353 &Net::SSLeay::X509_STORE_set_flags
354 (&Net::SSLeay::CTX_get_cert_store($ssl),
355 &Net::SSLeay::X509_V_FLAG_CRL_CHECK);
356
357 After setting this flag, if OpenSSL checks a peer's certificate, then
358 it will attempt to find a CRL for the issuer. It does this by looking
359 for a specially named file in the search directory specified by
360 CTX_load_verify_locations. CRL files are named with the hash of the
361 issuer's subject name, followed by ".r0", ".r1" etc. For example
362 "ab1331b2.r0", "ab1331b2.r1". It will read all the .r files for the
363 issuer, and then check for a revocation of the peer certificate in all
364 of them. (You can also force it to look in a specific named CRL file.,
365 see below). You can find out the hash of the issuer subject name in a
366 CRL with
367
368 openssl crl -in crl.pem -hash -noout
369
370 If the peer certificate does not pass the revocation list, or if no CRL
371 is found, then the handshaking fails with an error.
372
373 You can also force OpenSSL to look for CRLs in one or more arbitrarily
374 named files.
375
376 my $bio = Net::SSLeay::BIO_new_file($crlfilename, 'r');
377 my $crl = Net::SSLeay::PEM_read_bio_X509_CRL($bio);
378 if ($crl) {
379 Net::SSLeay::X509_STORE_add_crl(
380 Net::SSLeay::CTX_get_cert_store($ssl, $crl)
381 );
382 } else {
383 error reading CRL....
384 }
385
386 Usually the URLs where you can download the CRLs is contained in the
387 certificate itself and you can extract them with
388
389 my @url = Net::SSLeay::P_X509_get_crl_distribution_points($cert)
390
391 But there is no automatic downloading of the CRLs and often these CRLs
392 are too huge to just download them to verify a single certificate.
393 Also, these CRLs are often in DER format which you need to convert to
394 PEM before you can use it:
395
396 openssl crl -in crl.der -inform der -out crl.pem
397
398 So as an alternative for faster and timely revocation checks you better
399 use the Online Status Revocation Protocol (OCSP).
400
401 Certificate verification and Online Status Revocation Protocol (OCSP)
402 While checking for revoked certificates is possible and fast with
403 Certificate Revocation Lists, you need to download the complete and
404 often huge list before you can verify a single certificate.
405
406 A faster way is to ask the CA to check the revocation of just a single
407 or a few certificates using OCSP. Basically you generate for each
408 certificate an OCSP_CERTID based on the certificate itself and its
409 issuer, put the ids togetether into an OCSP_REQUEST and send the
410 request to the URL given in the certificate.
411
412 As a result you get back an OCSP_RESPONSE and need to check the status
413 of the response, check that it is valid (e.g. signed by the CA) and
414 finally extract the information about each OCSP_CERTID to find out if
415 the certificate is still valid or got revoked.
416
417 With Net::SSLeay this can be done like this:
418
419 # get id(s) for given certs, like from get_peer_certificate
420 # or get_peer_cert_chain. This will croak if
421 # - one tries to make an OCSP_CERTID for a self-signed certificate
422 # - the issuer of the certificate cannot be found in the SSL objects
423 # store, nor in the current certificate chain
424 my $cert = Net::SSLeay::get_peer_certificate($ssl);
425 my $id = eval { Net::SSLeay::OCSP_cert2ids($ssl,$cert) };
426 die "failed to make OCSP_CERTID: $@" if $@;
427
428 # create OCSP_REQUEST from id(s)
429 # Multiple can be put into the same request, if the same OCSP responder
430 # is responsible for them.
431 my $req = Net::SSLeay::OCSP_ids2req($id);
432
433 # determine URI of OCSP responder
434 my $uri = Net::SSLeay::P_X509_get_ocsp_uri($cert);
435
436 # Send stringified OCSP_REQUEST with POST to $uri.
437 # We can ignore certificate verification for https, because the OCSP
438 # response itself is signed.
439 my $ua = HTTP::Tiny->new(verify_SSL => 0);
440 my $res = $ua->request( 'POST',$uri, {
441 headers => { 'Content-type' => 'application/ocsp-request' },
442 content => Net::SSLeay::i2d_OCSP_REQUEST($req)
443 });
444 my $content = $res && $res->{success} && $res->{content}
445 or die "query failed";
446
447 # Extract OCSP_RESPONSE.
448 # this will croak if the string is not an OCSP_RESPONSE
449 my $resp = eval { Net::SSLeay::d2i_OCSP_RESPONSE($content) };
450
451 # Check status of response.
452 my $status = Net::SSLeay::OCSP_response_status($resp);
453 if ($status != Net::SSLeay::OCSP_RESPONSE_STATUS_SUCCESSFUL())
454 die "OCSP response failed: ".
455 Net::SSLeay::OCSP_response_status_str($status);
456 }
457
458 # Verify signature of response and if nonce matches request.
459 # This will croak if there is a nonce in the response, but it does not match
460 # the request. It will return false if the signature could not be verified,
461 # in which case details can be retrieved with Net::SSLeay::ERR_get_error.
462 # It will not complain if the response does not contain a nonce, which is
463 # usually the case with pre-signed responses.
464 if ( ! eval { Net::SSLeay::OCSP_response_verify($ssl,$resp,$req) }) {
465 die "OCSP response verification failed";
466 }
467
468 # Extract information from OCSP_RESPONSE for each of the ids.
469
470 # If called in scalar context it will return the time (as time_t), when the
471 # next update is due (minimum of all successful responses inside $resp). It
472 # will croak on the following problems:
473 # - response is expired or not yet valid
474 # - no response for given OCSP_CERTID
475 # - certificate status is not good (e.g. revoked or unknown)
476 if ( my $nextupd = eval { Net::SSLeay::OCSP_response_results($resp,$id) }) {
477 warn "certificate is valid, next update in ".
478 ($nextupd-time())." seconds\n";
479 } else {
480 die "certificate is not valid: $@";
481 }
482
483 # But in array context it will return detailed information about each given
484 # OCSP_CERTID instead croaking on errors:
485 # if no @ids are given it will return information about all single responses
486 # in the OCSP_RESPONSE
487 my @results = Net::SSLeay::OCSP_response_results($resp,@ids);
488 for my $r (@results) {
489 print Dumper($r);
490 # @results are in the same order as the @ids and contain:
491 # $r->[0] - OCSP_CERTID
492 # $r->[1] - undef if no error (certificate good) OR error message as string
493 # $r->[2] - hash with details:
494 # thisUpdate - time_t of this single response
495 # nextUpdate - time_t when update is expected
496 # statusType - integer:
497 # V_OCSP_CERTSTATUS_GOOD(0)
498 # V_OCSP_CERTSTATUS_REVOKED(1)
499 # V_OCSP_CERTSTATUS_UNKNOWN(2)
500 # revocationTime - time_t (only if revoked)
501 # revocationReason - integer (only if revoked)
502 # revocationReason_str - reason as string (only if revoked)
503 }
504
505 To further speed up certificate revocation checking one can use a TLS
506 extension to instruct the server to staple the OCSP response:
507
508 # set TLS extension before doing SSL_connect
509 Net::SSLeay::set_tlsext_status_type($ssl,
510 Net::SSLeay::TLSEXT_STATUSTYPE_ocsp());
511
512 # setup callback to verify OCSP response
513 my $cert_valid = undef;
514 Net::SSLeay::CTX_set_tlsext_status_cb($context,sub {
515 my ($ssl,$resp) = @_;
516 if (!$resp) {
517 # Lots of servers don't return an OCSP response.
518 # In this case we must check the OCSP status outside the SSL
519 # handshake.
520 warn "server did not return stapled OCSP response\n";
521 return 1;
522 }
523 # verify status
524 my $status = Net::SSLeay::OCSP_response_status($resp);
525 if ($status != Net::SSLeay::OCSP_RESPONSE_STATUS_SUCCESSFUL()) {
526 warn "OCSP response failure: $status\n";
527 return 1;
528 }
529 # verify signature - we have no OCSP_REQUEST here to check nonce
530 if (!eval { Net::SSLeay::OCSP_response_verify($ssl,$resp) }) {
531 warn "OCSP response verify failed\n";
532 return 1;
533 }
534 # check if the certificate is valid
535 # we should check here against the peer_certificate
536 my $cert = Net::SSLeay::get_peer_certificate();
537 my $certid = eval { Net::SSLeay::OCSP_cert2ids($ssl,$cert) } or do {
538 warn "cannot get certid from cert: $@";
539 $cert_valid = -1;
540 return 1;
541 };
542
543 if ( $nextupd = eval {
544 Net::SSLeay::OCSP_response_results($resp,$certid) }) {
545 warn "certificate not revoked\n";
546 $cert_valid = 1;
547 } else {
548 warn "certificate not valid: $@";
549 $cert_valid = 0;
550 }
551 });
552
553 # do SSL handshake here
554 ....
555 # check if certificate revocation was checked already
556 if ( ! defined $cert_valid) {
557 # check revocation outside of SSL handshake by asking OCSP responder
558 ...
559 } elsif ( ! $cert_valid ) {
560 die "certificate not valid - closing SSL connection";
561 } elsif ( $cert_valid<0 ) {
562 die "cannot verify certificate revocation - self-signed ?";
563 } else {
564 # everything fine
565 ...
566 }
567
568 Using Net::SSLeay in multi-threaded applications
569 IMPORTANT: versions 1.42 or earlier are not thread-safe!
570
571 Net::SSLeay module implements all necessary stuff to be ready for
572 multi-threaded environment - it requires openssl-0.9.7 or newer. The
573 implementation fully follows thread safety related requirements of
574 openssl library(see <http://www.openssl.org/docs/crypto/threads.html>).
575
576 If you are about to use Net::SSLeay (or any other module based on
577 Net::SSLeay) in multi-threaded perl application it is recommended to
578 follow this best-practice:
579
580 Initialization
581
582 Load and initialize Net::SSLeay module in the main thread:
583
584 use threads;
585 use Net::SSLeay;
586
587 Net::SSLeay::load_error_strings();
588 Net::SSLeay::SSLeay_add_ssl_algorithms();
589 Net::SSLeay::randomize();
590
591 sub do_master_job {
592 #... call whatever from Net::SSLeay
593 }
594
595 sub do_worker_job {
596 #... call whatever from Net::SSLeay
597 }
598
599 #start threads
600 my $master = threads->new(\&do_master_job, 'param1', 'param2');
601 my @workers = threads->new(\&do_worker_job, 'arg1', 'arg2') for (1..10);
602
603 #waiting for all threads to finish
604 $_->join() for (threads->list);
605
606 NOTE: Openssl's "int SSL_library_init(void)" function (which is also
607 aliased as "SSLeay_add_ssl_algorithms", "OpenSSL_add_ssl_algorithms"
608 and "add_ssl_algorithms") is not re-entrant and multiple calls can
609 cause a crash in threaded application. Net::SSLeay implements flags
610 preventing repeated calls to this function, therefore even multiple
611 initialization via Net::SSLeay::SSLeay_add_ssl_algorithms() should work
612 without trouble.
613
614 Using callbacks
615
616 Do not use callbacks across threads (the module blocks cross-thread
617 callback operations and throws a warning). Always do the callback
618 setup, callback use and callback destruction within the same thread.
619
620 Using openssl elements
621
622 All openssl elements (X509, SSL_CTX, ...) can be directly passed
623 between threads.
624
625 use threads;
626 use Net::SSLeay;
627
628 Net::SSLeay::load_error_strings();
629 Net::SSLeay::SSLeay_add_ssl_algorithms();
630 Net::SSLeay::randomize();
631
632 sub do_job {
633 my $context = shift;
634 Net::SSLeay::CTX_set_default_passwd_cb($context, sub { "secret" });
635 #...
636 }
637
638 my $c = Net::SSLeay::CTX_new();
639 threads->create(\&do_job, $c);
640
641 Or:
642
643 use threads;
644 use Net::SSLeay;
645
646 my $context; #does not need to be 'shared'
647
648 Net::SSLeay::load_error_strings();
649 Net::SSLeay::SSLeay_add_ssl_algorithms();
650 Net::SSLeay::randomize();
651
652 sub do_job {
653 Net::SSLeay::CTX_set_default_passwd_cb($context, sub { "secret" });
654 #...
655 }
656
657 $context = Net::SSLeay::CTX_new();
658 threads->create(\&do_job);
659
660 Using other perl modules based on Net::SSLeay
661
662 It should be fine to use any other module based on Net::SSLeay (like
663 IO::Socket::SSL) in multi-threaded applications. It is generally
664 recommended to do any global initialization of such a module in the
665 main thread before calling "threads->new(..)" or "threads->create(..)"
666 but it might differ module by module.
667
668 To be safe you can load and init Net::SSLeay explicitly in the main
669 thread:
670
671 use Net::SSLeay;
672 use Other::SSLeay::Based::Module;
673
674 Net::SSLeay::load_error_strings();
675 Net::SSLeay::SSLeay_add_ssl_algorithms();
676 Net::SSLeay::randomize();
677
678 Or even safer:
679
680 use Net::SSLeay;
681 use Other::SSLeay::Based::Module;
682
683 BEGIN {
684 Net::SSLeay::load_error_strings();
685 Net::SSLeay::SSLeay_add_ssl_algorithms();
686 Net::SSLeay::randomize();
687 }
688
689 Combining Net::SSLeay with other modules linked with openssl
690
691 BEWARE: This might be a big trouble! This is not guaranteed be thread-
692 safe!
693
694 There are many other (XS) modules linked directly to openssl library
695 (like Crypt::SSLeay).
696
697 As it is expected that also "another" module will call
698 "SSLeay_add_ssl_algorithms" at some point we have again a trouble with
699 multiple openssl initialization by Net::SSLeay and "another" module.
700
701 As you can expect Net::SSLeay is not able to avoid multiple
702 initialization of openssl library called by "another" module, thus you
703 have to handle this on your own (in some cases it might not be possible
704 at all to avoid this).
705
706 Threading with get_https and friends
707
708 The convenience functions get_https, post_https etc all initialize the
709 SSL library by calling Net::SSLeay::initialize which does the
710 conventional library initialization:
711
712 Net::SSLeay::load_error_strings();
713 Net::SSLeay::SSLeay_add_ssl_algorithms();
714 Net::SSLeay::randomize();
715
716 Net::SSLeay::initialize initializes the SSL library at most once. You
717 can override the Net::SSLeay::initialize function if you desire some
718 other type of initialization behaviour by get_https and friends. You
719 can call Net::SSLeay::initialize from your own code if you desire this
720 conventional library initialization.
721
722 Convenience routines
723 To be used with Low level API
724
725 Net::SSLeay::randomize($rn_seed_file,$additional_seed);
726 Net::SSLeay::set_cert_and_key($ctx, $cert_path, $key_path);
727 $cert = Net::SSLeay::dump_peer_certificate($ssl);
728 Net::SSLeay::ssl_write_all($ssl, $message) or die "ssl write failure";
729 $got = Net::SSLeay::ssl_read_all($ssl) or die "ssl read failure";
730
731 $got = Net::SSLeay::ssl_read_CRLF($ssl [, $max_length]);
732 $got = Net::SSLeay::ssl_read_until($ssl [, $delimit [, $max_length]]);
733 Net::SSLeay::ssl_write_CRLF($ssl, $message);
734
735 · randomize
736
737 seeds the openssl PRNG with "/dev/urandom" (see the top of
738 "SSLeay.pm" for how to change or configure this) and optionally
739 with user provided data. It is very important to properly seed your
740 random numbers, so do not forget to call this. The high level API
741 functions automatically call "randomize()" so it is not needed with
742 them. See also caveats.
743
744 · set_cert_and_key
745
746 takes two file names as arguments and sets the certificate and
747 private key to those. This can be used to set either server
748 certificates or client certificates.
749
750 · dump_peer_certificate
751
752 allows you to get a plaintext description of the certificate the
753 peer (usually the server) presented to us.
754
755 · ssl_read_all
756
757 see ssl_write_all (below)
758
759 · ssl_write_all
760
761 "ssl_read_all()" and "ssl_write_all()" provide true blocking
762 semantics for these operations (see limitation, below, for
763 explanation). These are much preferred to the low level API
764 equivalents (which implement BSD blocking semantics). The message
765 argument to "ssl_write_all()" can be a reference. This is helpful
766 to avoid unnecessary copying when writing something big, e.g:
767
768 $data = 'A' x 1000000000;
769 Net::SSLeay::ssl_write_all($ssl, \$data) or die "ssl write failed";
770
771 · ssl_read_CRLF
772
773 uses "ssl_read_all()" to read in a line terminated with a carriage
774 return followed by a linefeed (CRLF). The CRLF is included in the
775 returned scalar.
776
777 · ssl_read_until
778
779 uses "ssl_read_all()" to read from the SSL input stream until it
780 encounters a programmer specified delimiter. If the delimiter is
781 undefined, $/ is used. If $/ is undefined, "\n" is used. One can
782 optionally set a maximum length of bytes to read from the SSL input
783 stream.
784
785 · ssl_write_CRLF
786
787 writes $message and appends CRLF to the SSL output stream.
788
789 Initialization
790 In order to use the low level API you should start your programs with
791 the following incantation:
792
793 use Net::SSLeay qw(die_now die_if_ssl_error);
794 Net::SSLeay::load_error_strings();
795 Net::SSLeay::SSLeay_add_ssl_algorithms(); # Important!
796 Net::SSLeay::ENGINE_load_builtin_engines(); # If you want built-in engines
797 Net::SSLeay::ENGINE_register_all_complete(); # If you want built-in engines
798 Net::SSLeay::randomize();
799
800 Error handling functions
801 I can not emphasize the need to check for error enough. Use these
802 functions even in the most simple programs, they will reduce debugging
803 time greatly. Do not ask questions on the mailing list without having
804 first sprinkled these in your code.
805
806 · die_now
807
808 · die_if_ssl_error
809
810 "die_now()" and "die_if_ssl_error()" are used to conveniently print
811 the SSLeay error stack when something goes wrong:
812
813 Net::SSLeay::connect($ssl) or die_now("Failed SSL connect ($!)");
814
815
816 Net::SSLeay::write($ssl, "foo") or die_if_ssl_error("SSL write ($!)");
817
818 · print_errs
819
820 You can also use "Net::SSLeay::print_errs()" to dump the error
821 stack without exiting the program. As can be seen, your code
822 becomes much more readable if you import the error reporting
823 functions into your main name space.
824
825 Sockets
826 Perl uses file handles for all I/O. While SSLeay has a quite flexible
827 BIO mechanism and perl has an evolved PerlIO mechanism, this module
828 still sticks to using file descriptors. Thus to attach SSLeay to a
829 socket you should use "fileno()" to extract the underlying file
830 descriptor:
831
832 Net::SSLeay::set_fd($ssl, fileno(S)); # Must use fileno
833
834 You should also set $| to 1 to eliminate STDIO buffering so you do not
835 get confused if you use perl I/O functions to manipulate your socket
836 handle.
837
838 If you need to select(2) on the socket, go right ahead, but be warned
839 that OpenSSL does some internal buffering so SSL_read does not always
840 return data even if the socket selected for reading (just keep on
841 selecting and trying to read). "Net::SSLeay" is no different from the C
842 language OpenSSL in this respect.
843
844 Callbacks
845 You can establish a per-context verify callback function something like
846 this:
847
848 sub verify {
849 my ($ok, $x509_store_ctx) = @_;
850 print "Verifying certificate...\n";
851 ...
852 return $ok;
853 }
854
855 It is used like this:
856
857 Net::SSLeay::set_verify ($ssl, Net::SSLeay::VERIFY_PEER, \&verify);
858
859 Per-context callbacks for decrypting private keys are implemented.
860
861 Net::SSLeay::CTX_set_default_passwd_cb($ctx, sub { "top-secret" });
862 Net::SSLeay::CTX_use_PrivateKey_file($ctx, "key.pem",
863 Net::SSLeay::FILETYPE_PEM)
864 or die "Error reading private key";
865 Net::SSLeay::CTX_set_default_passwd_cb($ctx, undef);
866
867 If Hello Extensions are supported by your OpenSSL, a session secret
868 callback can be set up to be called when a session secret is set by
869 openssl.
870
871 Establish it like this:
872 Net::SSLeay::set_session_secret_cb($ssl, \&session_secret_cb,
873 $somedata);
874
875 It will be called like this:
876
877 sub session_secret_cb
878 {
879 my ($secret, \@cipherlist, \$preferredcipher, $somedata) = @_;
880 }
881
882 No other callbacks are implemented. You do not need to use any callback
883 for simple (i.e. normal) cases where the SSLeay built-in verify
884 mechanism satisfies your needs.
885
886 It is required to reset these callbacks to undef immediately after use
887 to prevent memory leaks, thread safety problems and crashes on exit
888 that can occur if different threads set different callbacks.
889
890 If you want to use callback stuff, see examples/callback.pl! It's the
891 only one I am able to make work reliably.
892
893 Low level API
894 In addition to the high level functions outlined above, this module
895 contains straight-forward access to CRYPTO and SSL parts of OpenSSL C
896 API.
897
898 See the "*.h" headers from OpenSSL C distribution for a list of low
899 level SSLeay functions to call (check SSLeay.xs to see if some function
900 has been implemented). The module strips the initial "SSL_" off of the
901 SSLeay names. Generally you should use "Net::SSLeay::" in its place.
902
903 Note that some functions are prefixed with "P_" - these are very close
904 to the original API however contain some kind of a wrapper making its
905 interface more perl friendly.
906
907 For example:
908
909 In C:
910
911 #include <ssl.h>
912
913 err = SSL_set_verify (ssl, SSL_VERIFY_CLIENT_ONCE,
914 &your_call_back_here);
915
916 In Perl:
917
918 use Net::SSLeay;
919
920 $err = Net::SSLeay::set_verify ($ssl,
921 Net::SSLeay::VERIFY_CLIENT_ONCE,
922 \&your_call_back_here);
923
924 If the function does not start with "SSL_" you should use the full
925 function name, e.g.:
926
927 $err = Net::SSLeay::ERR_get_error;
928
929 The following new functions behave in perlish way:
930
931 $got = Net::SSLeay::read($ssl);
932 # Performs SSL_read, but returns $got
933 # resized according to data received.
934 # Returns undef on failure.
935
936 Net::SSLeay::write($ssl, $foo) || die;
937 # Performs SSL_write, but automatically
938 # figures out the size of $foo
939
940 Low level API: Version related functions
941
942 · SSLeay
943
944 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
945
946 Gives version number (numeric) of underlaying openssl library.
947
948 my $ver_number = Net::SSLeay::SSLeay();
949 # returns: the number identifying the openssl release
950 #
951 # 0x00903100 => openssl-0.9.3
952 # 0x00904100 => openssl-0.9.4
953 # 0x00905100 => openssl-0.9.5
954 # 0x0090600f => openssl-0.9.6
955 # 0x0090601f => openssl-0.9.6a
956 # 0x0090602f => openssl-0.9.6b
957 # ...
958 # 0x009060df => openssl-0.9.6m
959 # 0x0090700f => openssl-0.9.7
960 # 0x0090701f => openssl-0.9.7a
961 # 0x0090702f => openssl-0.9.7b
962 # ...
963 # 0x009070df => openssl-0.9.7m
964 # 0x0090800f => openssl-0.9.8
965 # 0x0090801f => openssl-0.9.8a
966 # 0x0090802f => openssl-0.9.8b
967 # ...
968 # 0x0090814f => openssl-0.9.8t
969 # 0x1000000f => openssl-1.0.0
970 # 0x1000004f => openssl-1.0.0d
971 # 0x1000007f => openssl-1.0.0g
972
973 You can use it like this:
974
975 if (Net::SSLeay::SSLeay() < 0x0090800f) {
976 die "you need openssl-0.9.8 or higher";
977 }
978
979 · SSLeay_version
980
981 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
982
983 Gives version number (string) of underlaying openssl library.
984
985 my $ver_string = Net::SSLeay::SSLeay_version($type);
986 # $type
987 # SSLEAY_VERSION - e.g. 'OpenSSL 1.0.0d 8 Feb 2011'
988 # SSLEAY_CFLAGS - e.g. 'compiler: gcc -D_WINDLL -DOPENSSL_USE_APPLINK .....'
989 # SSLEAY_BUILT_ON - e.g. 'built on: Fri May 6 00:00:46 GMT 2011'
990 # SSLEAY_PLATFORM - e.g. 'platform: mingw'
991 # SSLEAY_DIR - e.g. 'OPENSSLDIR: "z:/...."'
992 #
993 # returns: string
994
995 Net::SSLeay::SSLeay_version();
996 #is equivalent to
997 Net::SSLeay::SSLeay_version(SSLEAY_VERSION);
998
999 Check openssl doc
1000 <https://www.openssl.org/docs/man1.0.2/crypto/SSLeay_version.html>
1001
1002 · OpenSSL_version_num
1003
1004 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
1005 requires at least OpenSSL 1.1.0
1006
1007 Gives version number (numeric) of underlaying openssl library. See
1008 "SSLeay" for interpreting the result.
1009
1010 my $ver_number = Net::SSLeay::OpenSSL_version_num();
1011 # returns: the number identifying the openssl release
1012
1013 · OpenSSL_version
1014
1015 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
1016 requires at least OpenSSL 1.1.0
1017
1018 Gives version number (string) of underlaying openssl library.
1019
1020 my $ver_string = Net::SSLeay::OpenSSL_version($t);
1021 # $t
1022 # OPENSSL_VERSION - e.g. 'OpenSSL 1.1.0g 2 Nov 2017'
1023 # OPENSSL_CFLAGS - e.g. 'compiler: cc -DDSO_DLFCN -DHAVE_DLFCN_H .....'
1024 # OPENSSL_BUILT_ON - e.g. 'built on: reproducible build, date unspecified'
1025 # OPENSSL_PLATFORM - e.g. 'platform: darwin64-x86_64-cc'
1026 # OPENSSL_DIR - e.g. 'OPENSSLDIR: "/opt/openssl-1.1.0g"'
1027 # OPENSSL_ENGINES_DIR - e.g. 'ENGINESDIR: "/opt/openssl-1.1.0g/lib/engines-1.1"'
1028 #
1029 # returns: string
1030
1031 Net::SSLeay::OpenSSL_version();
1032 #is equivalent to
1033 Net::SSLeay::OpenSSL_version(OPENSSL_VERSION);
1034
1035 Check openssl doc
1036 <https://www.openssl.org/docs/crypto/OpenSSL_version.html>
1037
1038 Low level API: Initialization related functions
1039
1040 · library_init
1041
1042 Initialize SSL library by registering algorithms.
1043
1044 my $rv = Net::SSLeay::library_init();
1045
1046 Check openssl doc
1047 <http://www.openssl.org/docs/ssl/SSL_library_init.html>
1048
1049 While the original function from OpenSSL always returns 1,
1050 Net::SSLeay adds a wrapper around it to make sure that the OpenSSL
1051 function is only called once. Thus the function will return 1 if
1052 initialization was done and 0 if not, i.e. if initialization was
1053 done already before.
1054
1055 · add_ssl_algorithms
1056
1057 The alias for "library_init"
1058
1059 Net::SSLeay::add_ssl_algorithms();
1060
1061 · OpenSSL_add_ssl_algorithms
1062
1063 The alias for "library_init"
1064
1065 Net::SSLeay::OpenSSL_add_ssl_algorithms();
1066
1067 · SSLeay_add_ssl_algorithms
1068
1069 The alias for "library_init"
1070
1071 Net::SSLeay::SSLeay_add_ssl_algorithms();
1072
1073 · load_error_strings
1074
1075 Registers the error strings for all libcrypto + libssl related
1076 functions.
1077
1078 Net::SSLeay::load_error_strings();
1079 #
1080 # returns: no return value
1081
1082 Check openssl doc
1083 <http://www.openssl.org/docs/crypto/ERR_load_crypto_strings.html>
1084
1085 · ERR_load_crypto_strings
1086
1087 Registers the error strings for all libcrypto functions. No need to
1088 call this function if you have already called "load_error_strings".
1089
1090 Net::SSLeay::ERR_load_crypto_strings();
1091 #
1092 # returns: no return value
1093
1094 Check openssl doc
1095 <http://www.openssl.org/docs/crypto/ERR_load_crypto_strings.html>
1096
1097 · ERR_load_RAND_strings
1098
1099 Registers the error strings for RAND related functions. No need to
1100 call this function if you have already called "load_error_strings".
1101
1102 Net::SSLeay::ERR_load_RAND_strings();
1103 #
1104 # returns: no return value
1105
1106 · ERR_load_SSL_strings
1107
1108 Registers the error strings for SSL related functions. No need to
1109 call this function if you have already called "load_error_strings".
1110
1111 Net::SSLeay::ERR_load_SSL_strings();
1112 #
1113 # returns: no return value
1114
1115 · OpenSSL_add_all_algorithms
1116
1117 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1118
1119 Add algorithms to internal table.
1120
1121 Net::SSLeay::OpenSSL_add_all_algorithms();
1122 #
1123 # returns: no return value
1124
1125 Check openssl doc
1126 <http://www.openssl.org/docs/crypto/OpenSSL_add_all_algorithms.html>
1127
1128 · OPENSSL_add_all_algorithms_conf
1129
1130 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1131
1132 Similar to "OpenSSL_add_all_algorithms" - will ALWAYS load the
1133 config file
1134
1135 Net::SSLeay::OPENSSL_add_all_algorithms_conf();
1136 #
1137 # returns: no return value
1138
1139 · OPENSSL_add_all_algorithms_noconf
1140
1141 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1142
1143 Similar to "OpenSSL_add_all_algorithms" - will NEVER load the
1144 config file
1145
1146 Net::SSLeay::OPENSSL_add_all_algorithms_noconf();
1147 #
1148 # returns: no return value
1149
1150 Low level API: ERR_* and SSL_alert_* related functions
1151
1152 NOTE: Please note that SSL_alert_* function have "SSL_" part stripped
1153 from their names.
1154
1155 · ERR_clear_error
1156
1157 Clear the error queue.
1158
1159 Net::SSLeay::ERR_clear_error();
1160 #
1161 # returns: no return value
1162
1163 Check openssl doc
1164 <http://www.openssl.org/docs/crypto/ERR_clear_error.html>
1165
1166 · ERR_error_string
1167
1168 Generates a human-readable string representing the error code
1169 $error.
1170
1171 my $rv = Net::SSLeay::ERR_error_string($error);
1172 # $error - (unsigned integer) error code
1173 #
1174 # returns: string
1175
1176 Check openssl doc
1177 <http://www.openssl.org/docs/crypto/ERR_error_string.html>
1178
1179 · ERR_get_error
1180
1181 Returns the earliest error code from the thread's error queue and
1182 removes the entry. This function can be called repeatedly until
1183 there are no more error codes to return.
1184
1185 my $rv = Net::SSLeay::ERR_get_error();
1186 #
1187 # returns: (unsigned integer) error code
1188
1189 Check openssl doc
1190 <http://www.openssl.org/docs/crypto/ERR_get_error.html>
1191
1192 · ERR_peek_error
1193
1194 Returns the earliest error code from the thread's error queue
1195 without modifying it.
1196
1197 my $rv = Net::SSLeay::ERR_peek_error();
1198 #
1199 # returns: (unsigned integer) error code
1200
1201 Check openssl doc
1202 <http://www.openssl.org/docs/crypto/ERR_get_error.html>
1203
1204 · ERR_put_error
1205
1206 Adds an error code to the thread's error queue. It signals that the
1207 error of $reason code reason occurred in function $func of library
1208 $lib, in line number $line of $file.
1209
1210 Net::SSLeay::ERR_put_error($lib, $func, $reason, $file, $line);
1211 # $lib - (integer) library id (check openssl/err.h for constants e.g. ERR_LIB_SSL)
1212 # $func - (integer) function id (check openssl/ssl.h for constants e.g. SSL_F_SSL23_READ)
1213 # $reason - (integer) reason id (check openssl/ssl.h for constants e.g. SSL_R_SSL_HANDSHAKE_FAILURE)
1214 # $file - (string) file name
1215 # $line - (integer) line number in $file
1216 #
1217 # returns: no return value
1218
1219 Check openssl doc
1220 <http://www.openssl.org/docs/crypto/ERR_put_error.html> and
1221 <http://www.openssl.org/docs/crypto/err.html>
1222
1223 · alert_desc_string
1224
1225 Returns a two letter string as a short form describing the reason
1226 of the alert specified by value.
1227
1228 my $rv = Net::SSLeay::alert_desc_string($value);
1229 # $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants)
1230 #
1231 # returns: description string (2 letters)
1232
1233 Check openssl doc
1234 <http://www.openssl.org/docs/ssl/SSL_alert_type_string.html>
1235
1236 · alert_desc_string_long
1237
1238 Returns a string describing the reason of the alert specified by
1239 value.
1240
1241 my $rv = Net::SSLeay::alert_desc_string_long($value);
1242 # $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants)
1243 #
1244 # returns: description string
1245
1246 Check openssl doc
1247 <http://www.openssl.org/docs/ssl/SSL_alert_type_string.html>
1248
1249 · alert_type_string
1250
1251 Returns a one letter string indicating the type of the alert
1252 specified by value.
1253
1254 my $rv = Net::SSLeay::alert_type_string($value);
1255 # $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants)
1256 #
1257 # returns: string (1 letter)
1258
1259 Check openssl doc
1260 <http://www.openssl.org/docs/ssl/SSL_alert_type_string.html>
1261
1262 · alert_type_string_long
1263
1264 Returns a string indicating the type of the alert specified by
1265 value.
1266
1267 my $rv = Net::SSLeay::alert_type_string_long($value);
1268 # $value - (integer) allert id (check openssl/ssl.h for SSL3_AD_* and TLS1_AD_* constants)
1269 #
1270 # returns: string
1271
1272 Check openssl doc
1273 <http://www.openssl.org/docs/ssl/SSL_alert_type_string.html>
1274
1275 Low level API: SSL_METHOD_* related functions
1276
1277 · SSLv23_method, SSLv23_server_method and SSLv23_client_method
1278
1279 COMPATIBILITY: not available in Net-SSLeay-1.82 and before.
1280
1281 Returns SSL_METHOD structure corresponding to general-purpose
1282 version-flexible TLS method, the return value can be later used as
1283 a param of "CTX_new_with_method".
1284
1285 NOTE: Consider using TLS_method, TLS_server_method or
1286 TLS_client_method with new code.
1287
1288 my $rv = Net::SSLeay::SSLv2_method();
1289 #
1290 # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
1291
1292 · SSLv2_method
1293
1294 Returns SSL_METHOD structure corresponding to SSLv2 method, the
1295 return value can be later used as a param of "CTX_new_with_method".
1296 Only available where supported by the underlying openssl.
1297
1298 my $rv = Net::SSLeay::SSLv2_method();
1299 #
1300 # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
1301
1302 · SSLv3_method
1303
1304 Returns SSL_METHOD structure corresponding to SSLv3 method, the
1305 return value can be later used as a param of "CTX_new_with_method".
1306
1307 my $rv = Net::SSLeay::SSLv3_method();
1308 #
1309 # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
1310
1311 Check openssl doc
1312 <http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
1313
1314 · TLSv1_method, TLSv1_server_method and TLSv1_client_method
1315
1316 COMPATIBILITY: Server and client methods not available in
1317 Net-SSLeay-1.82 and before.
1318
1319 Returns SSL_METHOD structure corresponding to TLSv1 method, the
1320 return value can be later used as a param of "CTX_new_with_method".
1321
1322 my $rv = Net::SSLeay::TLSv1_method();
1323 #
1324 # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
1325
1326 Check openssl doc
1327 <http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
1328
1329 · TLSv1_1_method, TLSv1_1_server_method and TLSv1_1_client_method
1330
1331 COMPATIBILITY: Server and client methods not available in
1332 Net-SSLeay-1.82 and before.
1333
1334 Returns SSL_METHOD structure corresponding to TLSv1_1 method, the
1335 return value can be later used as a param of "CTX_new_with_method".
1336 Only available where supported by the underlying openssl.
1337
1338 my $rv = Net::SSLeay::TLSv1_1_method();
1339 #
1340 # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
1341
1342 Check openssl doc
1343 <http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
1344
1345 · TLSv1_2_method, TLSv1_2_server_method and TLSv1_2_client_method
1346
1347 COMPATIBILITY: Server and client methods not available in
1348 Net-SSLeay-1.82 and before.
1349
1350 Returns SSL_METHOD structure corresponding to TLSv1_2 method, the
1351 return value can be later used as a param of "CTX_new_with_method".
1352 Only available where supported by the underlying openssl.
1353
1354 my $rv = Net::SSLeay::TLSv1_2_method();
1355 #
1356 # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
1357
1358 Check openssl doc
1359 <http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
1360
1361 · TLS_method, TLS_server_method and TLS_client_method
1362
1363 COMPATIBILITY: Not available in Net-SSLeay-1.82 and before.
1364
1365 Returns SSL_METHOD structure corresponding to general-purpose
1366 version-flexible TLS method, the return value can be later used as
1367 a param of "CTX_new_with_method". Only available where supported by
1368 the underlying openssl.
1369
1370 my $rv = Net::SSLeay::TLS_method();
1371 #
1372 # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
1373
1374 Check openssl doc
1375 <http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
1376
1377 Low level API: ENGINE_* related functions
1378
1379 · ENGINE_load_builtin_engines
1380
1381 Load all bundled ENGINEs into memory and make them visible.
1382
1383 Net::SSLeay::ENGINE_load_builtin_engines();
1384 #
1385 # returns: no return value
1386
1387 Check openssl doc <http://www.openssl.org/docs/crypto/engine.html>
1388
1389 · ENGINE_register_all_complete
1390
1391 Register all loaded ENGINEs for every algorithm they collectively
1392 implement.
1393
1394 Net::SSLeay::ENGINE_register_all_complete();
1395 #
1396 # returns: no return value
1397
1398 Check openssl doc <http://www.openssl.org/docs/crypto/engine.html>
1399
1400 · ENGINE_set_default
1401
1402 Set default engine to $e + set its flags to $flags.
1403
1404 my $rv = Net::SSLeay::ENGINE_set_default($e, $flags);
1405 # $e - value corresponding to openssl's ENGINE structure
1406 # $flags - (integer) engine flags
1407 # flags value can be made by bitwise "OR"ing:
1408 # 0x0001 - ENGINE_METHOD_RSA
1409 # 0x0002 - ENGINE_METHOD_DSA
1410 # 0x0004 - ENGINE_METHOD_DH
1411 # 0x0008 - ENGINE_METHOD_RAND
1412 # 0x0010 - ENGINE_METHOD_ECDH
1413 # 0x0020 - ENGINE_METHOD_ECDSA
1414 # 0x0040 - ENGINE_METHOD_CIPHERS
1415 # 0x0080 - ENGINE_METHOD_DIGESTS
1416 # 0x0100 - ENGINE_METHOD_STORE
1417 # 0x0200 - ENGINE_METHOD_PKEY_METHS
1418 # 0x0400 - ENGINE_METHOD_PKEY_ASN1_METHS
1419 # Obvious all-or-nothing cases:
1420 # 0xFFFF - ENGINE_METHOD_ALL
1421 # 0x0000 - ENGINE_METHOD_NONE
1422 #
1423 # returns: 1 on success, 0 on failure
1424
1425 Check openssl doc <http://www.openssl.org/docs/crypto/engine.html>
1426
1427 · ENGINE_by_id
1428
1429 Get ENGINE by its identification $id.
1430
1431 my $rv = Net::SSLeay::ENGINE_by_id($id);
1432 # $id - (string) engine identification e.g. "dynamic"
1433 #
1434 # returns: value corresponding to openssl's ENGINE structure (0 on failure)
1435
1436 Check openssl doc <http://www.openssl.org/docs/crypto/engine.html>
1437
1438 Low level API: EVP_PKEY_* related functions
1439
1440 · EVP_PKEY_copy_parameters
1441
1442 Copies the parameters from key $from to key $to.
1443
1444 my $rv = Net::SSLeay::EVP_PKEY_copy_parameters($to, $from);
1445 # $to - value corresponding to openssl's EVP_PKEY structure
1446 # $from - value corresponding to openssl's EVP_PKEY structure
1447 #
1448 # returns: 1 on success, 0 on failure
1449
1450 Check openssl doc
1451 <http://www.openssl.org/docs/crypto/EVP_PKEY_cmp.html>
1452
1453 · EVP_PKEY_new
1454
1455 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1456
1457 Creates a new EVP_PKEY structure.
1458
1459 my $rv = Net::SSLeay::EVP_PKEY_new();
1460 #
1461 # returns: value corresponding to openssl's EVP_PKEY structure (0 on failure)
1462
1463 Check openssl doc
1464 <http://www.openssl.org/docs/crypto/EVP_PKEY_new.html>
1465
1466 · EVP_PKEY_free
1467
1468 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1469
1470 Free an allocated EVP_PKEY structure.
1471
1472 Net::SSLeay::EVP_PKEY_free($pkey);
1473 # $pkey - value corresponding to openssl's EVP_PKEY structure
1474 #
1475 # returns: no return value
1476
1477 Check openssl doc
1478 <http://www.openssl.org/docs/crypto/EVP_PKEY_new.html>
1479
1480 · EVP_PKEY_assign_RSA
1481
1482 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1483
1484 Set the key referenced by $pkey to $key
1485
1486 NOTE: No reference counter will be increased, i.e. $key will be
1487 freed if $pkey is freed.
1488
1489 my $rv = Net::SSLeay::EVP_PKEY_assign_RSA($pkey, $key);
1490 # $pkey - value corresponding to openssl's EVP_PKEY structure
1491 # $key - value corresponding to openssl's RSA structure
1492 #
1493 # returns: 1 on success, 0 on failure
1494
1495 Check openssl doc
1496 <http://www.openssl.org/docs/crypto/EVP_PKEY_assign_RSA.html>
1497
1498 · EVP_PKEY_assign_EC_KEY
1499
1500 COMPATIBILITY: not available in Net-SSLeay-1.74 and before
1501
1502 Set the key referenced by $pkey to $key
1503
1504 NOTE: No reference counter will be increased, i.e. $key will be
1505 freed if $pkey is freed.
1506
1507 my $rv = Net::SSLeay::EVP_PKEY_assign_EC_KEY($pkey, $key);
1508 # $pkey - value corresponding to openssl's EVP_PKEY structure
1509 # $key - value corresponding to openssl's EC_KEY structure
1510 #
1511 # returns: 1 on success, 0 on failure
1512
1513 Check openssl doc
1514 <http://www.openssl.org/docs/crypto/EVP_PKEY_assign_EC_KEY.html>
1515
1516 · EVP_PKEY_bits
1517
1518 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1519
1520 Returns the size of the key $pkey in bits.
1521
1522 my $rv = Net::SSLeay::EVP_PKEY_bits($pkey);
1523 # $pkey - value corresponding to openssl's EVP_PKEY structure
1524 #
1525 # returns: size in bits
1526
1527 · EVP_PKEY_size
1528
1529 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1530
1531 Returns the maximum size of a signature in bytes. The actual
1532 signature may be smaller.
1533
1534 my $rv = Net::SSLeay::EVP_PKEY_size($pkey);
1535 # $pkey - value corresponding to openssl's EVP_PKEY structure
1536 #
1537 # returns: the maximum size in bytes
1538
1539 Check openssl doc
1540 <http://www.openssl.org/docs/crypto/EVP_SignInit.html>
1541
1542 · EVP_PKEY_id
1543
1544 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
1545 requires at least openssl-1.0.0
1546
1547 Returns $pkey type (integer value of corresponding NID).
1548
1549 my $rv = Net::SSLeay::EVP_PKEY_id($pkey);
1550 # $pkey - value corresponding to openssl's EVP_PKEY structure
1551 #
1552 # returns: (integer) key type
1553
1554 Example:
1555
1556 my $pubkey = Net::SSLeay::X509_get_pubkey($x509);
1557 my $type = Net::SSLeay::EVP_PKEY_id($pubkey);
1558 print Net::SSLeay::OBJ_nid2sn($type); #prints e.g. 'rsaEncryption'
1559
1560 Low level API: PEM_* related functions
1561
1562 Check openssl doc <http://www.openssl.org/docs/crypto/pem.html>
1563
1564 · PEM_read_bio_X509
1565
1566 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1567
1568 Loads PEM formatted X509 certificate via given BIO structure.
1569
1570 my $rv = Net::SSLeay::PEM_read_bio_X509($bio);
1571 # $bio - value corresponding to openssl's BIO structure
1572 #
1573 # returns: value corresponding to openssl's X509 structure (0 on failure)
1574
1575 Example:
1576
1577 my $bio = Net::SSLeay::BIO_new_file($filename, 'r');
1578 my $x509 = Net::SSLeay::PEM_read_bio_X509($bio);
1579 Net::SSLeay::BIO_free($bio);
1580
1581 · PEM_read_bio_X509_REQ
1582
1583 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1584
1585 Loads PEM formatted X509_REQ object via given BIO structure.
1586
1587 my $rv = Net::SSLeay::PEM_read_bio_X509_REQ($bio, $x=NULL, $cb=NULL, $u=NULL);
1588 # $bio - value corresponding to openssl's BIO structure
1589 #
1590 # returns: value corresponding to openssl's X509_REQ structure (0 on failure)
1591
1592 Example:
1593
1594 my $bio = Net::SSLeay::BIO_new_file($filename, 'r');
1595 my $x509_req = Net::SSLeay::PEM_read_bio_X509_REQ($bio);
1596 Net::SSLeay::BIO_free($bio);
1597
1598 · PEM_read_bio_DHparams
1599
1600 Reads DH structure from BIO.
1601
1602 my $rv = Net::SSLeay::PEM_read_bio_DHparams($bio);
1603 # $bio - value corresponding to openssl's BIO structure
1604 #
1605 # returns: value corresponding to openssl's DH structure (0 on failure)
1606
1607 · PEM_read_bio_X509_CRL
1608
1609 Reads X509_CRL structure from BIO.
1610
1611 my $rv = Net::SSLeay::PEM_read_bio_X509_CRL($bio);
1612 # $bio - value corresponding to openssl's BIO structure
1613 #
1614 # returns: value corresponding to openssl's X509_CRL structure (0 on failure)
1615
1616 · PEM_read_bio_PrivateKey
1617
1618 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1619
1620 Loads PEM formatted private key via given BIO structure.
1621
1622 my $rv = Net::SSLeay::PEM_read_bio_PrivateKey($bio, $cb, $data);
1623 # $bio - value corresponding to openssl's BIO structure
1624 # $cb - reference to perl callback function
1625 # $data - data that will be passed to callback function (see examples below)
1626 #
1627 # returns: value corresponding to openssl's EVP_PKEY structure (0 on failure)
1628
1629 Example:
1630
1631 my $bio = Net::SSLeay::BIO_new_file($filename, 'r');
1632 my $privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio); #ask for password if needed
1633 Net::SSLeay::BIO_free($bio);
1634
1635 To use password you have the following options:
1636
1637 $privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, \&callback_func); # use callback func for getting password
1638 $privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, \&callback_func, $data); # use callback_func + pass $data to callback_func
1639 $privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, undef, "secret"); # use password "secret"
1640 $privkey = Net::SSLeay::PEM_read_bio_PrivateKey($bio, undef, ""); # use empty password
1641
1642 Callback function signature:
1643
1644 sub callback_func {
1645 my ($max_passwd_size, $rwflag, $data) = @_;
1646 # $max_passwd_size - maximum size of returned password (longer values will be discarded)
1647 # $rwflag - indicates whether we are loading (0) or storing (1) - for PEM_read_bio_PrivateKey always 0
1648 # $data - the data passed to PEM_read_bio_PrivateKey as 3rd parameter
1649
1650 return "secret";
1651 }
1652
1653 · PEM_get_string_X509
1654
1655 NOTE: Does not exactly correspond to any low level API function
1656
1657 Converts/exports X509 certificate to string (PEM format).
1658
1659 Net::SSLeay::PEM_get_string_X509($x509);
1660 # $x509 - value corresponding to openssl's X509 structure
1661 #
1662 # returns: string with $x509 in PEM format
1663
1664 · PEM_get_string_PrivateKey
1665
1666 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1667
1668 Converts public key $pk into PEM formatted string (optionally
1669 protected with password).
1670
1671 my $rv = Net::SSLeay::PEM_get_string_PrivateKey($pk, $passwd, $enc_alg);
1672 # $pk - value corresponding to openssl's EVP_PKEY structure
1673 # $passwd - [optional] (string) password to use for key encryption
1674 # $enc_alg - [optional] algorithm to use for key encryption (default: DES_CBC) - value corresponding to openssl's EVP_CIPHER structure
1675 #
1676 # returns: PEM formatted string
1677
1678 Examples:
1679
1680 $pem_privkey = Net::SSLeay::PEM_get_string_PrivateKey($pk);
1681 $pem_privkey = Net::SSLeay::PEM_get_string_PrivateKey($pk, "secret");
1682 $pem_privkey = Net::SSLeay::PEM_get_string_PrivateKey($pk, "secret", Net::SSLeay::EVP_get_cipherbyname("DES-EDE3-CBC"));
1683
1684 · PEM_get_string_X509_CRL
1685
1686 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1687
1688 Converts X509_CRL object $x509_crl into PEM formatted string.
1689
1690 Net::SSLeay::PEM_get_string_X509_CRL($x509_crl);
1691 # $x509_crl - value corresponding to openssl's X509_CRL structure
1692 #
1693 # returns: no return value
1694
1695 · PEM_get_string_X509_REQ
1696
1697 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1698
1699 Converts X509_REQ object $x509_crl into PEM formatted string.
1700
1701 Net::SSLeay::PEM_get_string_X509_REQ($x509_req);
1702 # $x509_req - value corresponding to openssl's X509_REQ structure
1703 #
1704 # returns: no return value
1705
1706 Low level API: d2i_* (DER format) related functions
1707
1708 · d2i_X509_bio
1709
1710 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1711
1712 Loads DER formatted X509 certificate via given BIO structure.
1713
1714 my $rv = Net::SSLeay::d2i_X509_bio($bp);
1715 # $bp - value corresponding to openssl's BIO structure
1716 #
1717 # returns: value corresponding to openssl's X509 structure (0 on failure)
1718
1719 Example:
1720
1721 my $bio = Net::SSLeay::BIO_new_file($filename, 'rb');
1722 my $x509 = Net::SSLeay::d2i_X509_bio($bio);
1723 Net::SSLeay::BIO_free($bio);
1724
1725 Check openssl doc
1726 <http://www.openssl.org/docs/crypto/d2i_X509.html>
1727
1728 · d2i_X509_CRL_bio
1729
1730 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1731
1732 Loads DER formatted X509_CRL object via given BIO structure.
1733
1734 my $rv = Net::SSLeay::d2i_X509_CRL_bio($bp);
1735 # $bp - value corresponding to openssl's BIO structure
1736 #
1737 # returns: value corresponding to openssl's X509_CRL structure (0 on failure)
1738
1739 Example:
1740
1741 my $bio = Net::SSLeay::BIO_new_file($filename, 'rb');
1742 my $x509_crl = Net::SSLeay::d2i_X509_CRL_bio($bio);
1743 Net::SSLeay::BIO_free($bio);
1744
1745 · d2i_X509_REQ_bio
1746
1747 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1748
1749 Loads DER formatted X509_REQ object via given BIO structure.
1750
1751 my $rv = Net::SSLeay::d2i_X509_REQ_bio($bp);
1752 # $bp - value corresponding to openssl's BIO structure
1753 #
1754 # returns: value corresponding to openssl's X509_REQ structure (0 on failure)
1755
1756 Example:
1757
1758 my $bio = Net::SSLeay::BIO_new_file($filename, 'rb');
1759 my $x509_req = Net::SSLeay::d2i_X509_REQ_bio($bio);
1760 Net::SSLeay::BIO_free($bio);
1761
1762 Low level API: PKCS12 related functions
1763
1764 · P_PKCS12_load_file
1765
1766 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
1767
1768 Loads X509 certificate + private key + certificates of CA chain (if
1769 present in PKCS12 file).
1770
1771 my ($privkey, $cert, @cachain) = Net::SSLeay::P_PKCS12_load_file($filename, $load_chain, $password);
1772 # $filename - name of PKCS12 file
1773 # $load_chain - [optional] whether load (1) or not(0) CA chain (default: 0)
1774 # $password - [optional] password for private key
1775 #
1776 # returns: triplet ($privkey, $cert, @cachain)
1777 # $privkey - value corresponding to openssl's EVP_PKEY structure
1778 # $cert - value corresponding to openssl's X509 structure
1779 # @cachain - array of values corresponding to openssl's X509 structure (empty if no CA chain in PKCS12)
1780
1781 IMPORTANT NOTE: after you do the job you need to call X509_free()
1782 on $privkey + all members of @cachain and EVP_PKEY_free() on
1783 $privkey.
1784
1785 Examples:
1786
1787 my ($privkey, $cert) = Net::SSLeay::P_PKCS12_load_file($filename);
1788 #or
1789 my ($privkey, $cert) = Net::SSLeay::P_PKCS12_load_file($filename, 0, $password);
1790 #or
1791 my ($privkey, $cert, @cachain) = Net::SSLeay::P_PKCS12_load_file($filename, 1);
1792 #or
1793 my ($privkey, $cert, @cachain) = Net::SSLeay::P_PKCS12_load_file($filename, 1, $password);
1794
1795 #BEWARE: THIS IS WRONG - MEMORY LEAKS! (you cannot free @cachain items)
1796 my ($privkey, $cert) = Net::SSLeay::P_PKCS12_load_file($filename, 1, $password);
1797
1798 NOTE With some combinations of Windows, perl, compiler and compiler
1799 options, you may see a runtime error "no OPENSSL_Applink", when
1800 calling Net::SSLeay::P_PKCS12_load_file. See README.Win32 for more
1801 details.
1802
1803 Low level API: SESSION_* related functions
1804
1805 · d2i_SSL_SESSION
1806
1807 Transforms the external ASN1 representation of an SSL/TLS session,
1808 stored as binary data at location pp with length of $length, into
1809 an SSL_SESSION object.
1810
1811 ??? (does this function really work?)
1812
1813 my $rv = Net::SSLeay::d2i_SSL_SESSION($a, $pp, $length);
1814 # $a - value corresponding to openssl's SSL_SESSION structure
1815 # $pp - pointer/buffer ???
1816 # $length - ???
1817 #
1818 # returns: ???
1819
1820 Check openssl doc
1821 <http://www.openssl.org/docs/ssl/d2i_SSL_SESSION.html>
1822
1823 · i2d_SSL_SESSION
1824
1825 Transforms the SSL_SESSION object in into the ASN1 representation
1826 and stores it into the memory location pointed to by pp. The length
1827 of the resulting ASN1 representation is returned.
1828
1829 ??? (does this function really work?)
1830
1831 my $rv = Net::SSLeay::i2d_SSL_SESSION($in, $pp);
1832 # $in - value corresponding to openssl's SSL_SESSION structure
1833 # $pp - pointer/data ???
1834 #
1835 # returns: 1 on success, 0
1836
1837 Check openssl doc
1838 <http://www.openssl.org/docs/ssl/d2i_SSL_SESSION.html>
1839
1840 · SESSION_new
1841
1842 Creates a new SSL_SESSION structure.
1843
1844 my $rv = Net::SSLeay::SESSION_new();
1845 #
1846 # returns: value corresponding to openssl's SSL_SESSION structure (0 on failure)
1847
1848 · SESSION_free
1849
1850 Free an allocated SSL_SESSION structure.
1851
1852 Net::SSLeay::SESSION_free($ses);
1853 # $ses - value corresponding to openssl's SSL_SESSION structure
1854 #
1855 # returns: no return value
1856
1857 Check openssl doc
1858 <http://www.openssl.org/docs/ssl/SSL_SESSION_free.html>
1859
1860 · SESSION_cmp
1861
1862 Compare two SSL_SESSION structures.
1863
1864 my $rv = Net::SSLeay::SESSION_cmp($sesa, $sesb);
1865 # $sesa - value corresponding to openssl's SSL_SESSION structure
1866 # $sesb - value corresponding to openssl's SSL_SESSION structure
1867 #
1868 # returns: 0 if the two structures are the same
1869
1870 NOTE: Not available in openssl 1.0 or later
1871
1872 · SESSION_get_app_data
1873
1874 Can be used to get application defined value/data.
1875
1876 my $rv = Net::SSLeay::SESSION_get_app_data($ses);
1877 # $ses - value corresponding to openssl's SSL_SESSION structure
1878 #
1879 # returns: string/buffer/pointer ???
1880
1881 · SESSION_set_app_data
1882
1883 Can be used to set some application defined value/data.
1884
1885 my $rv = Net::SSLeay::SESSION_set_app_data($s, $a);
1886 # $s - value corresponding to openssl's SSL_SESSION structure
1887 # $a - (string/buffer/pointer ???) data
1888 #
1889 # returns: ???
1890
1891 · SESSION_get_ex_data
1892
1893 Is used to retrieve the information for $idx from session $ses.
1894
1895 my $rv = Net::SSLeay::SESSION_get_ex_data($ses, $idx);
1896 # $ses - value corresponding to openssl's SSL_SESSION structure
1897 # $idx - (integer) index for application specific data
1898 #
1899 # returns: pointer to ???
1900
1901 Check openssl doc
1902 <http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html>
1903
1904 · SESSION_set_ex_data
1905
1906 Is used to store application data at arg for idx into the session
1907 object.
1908
1909 my $rv = Net::SSLeay::SESSION_set_ex_data($ss, $idx, $data);
1910 # $ss - value corresponding to openssl's SSL_SESSION structure
1911 # $idx - (integer) ???
1912 # $data - (pointer) ???
1913 #
1914 # returns: 1 on success, 0 on failure
1915
1916 Check openssl doc
1917 <http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html>
1918
1919 · SESSION_get_ex_new_index
1920
1921 Is used to register a new index for application specific data.
1922
1923 my $rv = Net::SSLeay::SESSION_get_ex_new_index($argl, $argp, $new_func, $dup_func, $free_func);
1924 # $argl - (long) ???
1925 # $argp - (pointer) ???
1926 # $new_func - function pointer ??? (CRYPTO_EX_new *)
1927 # $dup_func - function pointer ??? (CRYPTO_EX_dup *)
1928 # $free_func - function pointer ??? (CRYPTO_EX_free *)
1929 #
1930 # returns: (integer) ???
1931
1932 Check openssl doc
1933 <http://www.openssl.org/docs/ssl/SSL_SESSION_get_ex_new_index.html>
1934
1935 · SESSION_get_master_key
1936
1937 NOTE: Does not exactly correspond to any low level API function
1938
1939 Returns 'master_key' value from SSL_SESSION structure $s
1940
1941 Net::SSLeay::SESSION_get_master_key($s);
1942 # $s - value corresponding to openssl's SSL_SESSION structure
1943 #
1944 # returns: master key (binary data)
1945
1946 · SESSION_set_master_key
1947
1948 Sets 'master_key' value for SSL_SESSION structure $s
1949
1950 Net::SSLeay::SESSION_set_master_key($s, $key);
1951 # $s - value corresponding to openssl's SSL_SESSION structure
1952 # $key - master key (binary data)
1953 #
1954 # returns: no return value
1955
1956 Not available with OpenSSL 1.1 and later. Code that previously
1957 used
1958 SESSION_set_master_key must now set $secret in the
1959 session_secret
1960 callback set with SSL_set_session_secret_cb.
1961
1962 · SESSION_get_time
1963
1964 Returns the time at which the session s was established. The time
1965 is given in seconds since 1.1.1970.
1966
1967 my $rv = Net::SSLeay::SESSION_get_time($s);
1968 # $s - value corresponding to openssl's SSL_SESSION structure
1969 #
1970 # returns: timestamp (seconds since 1.1.1970)
1971
1972 Check openssl doc
1973 <http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html>
1974
1975 · get_time
1976
1977 Technically the same functionality as "SESSION_get_time".
1978
1979 my $rv = Net::SSLeay::get_time($s);
1980
1981 · SESSION_get_timeout
1982
1983 Returns the timeout value set for session $s in seconds.
1984
1985 my $rv = Net::SSLeay::SESSION_get_timeout($s);
1986 # $s - value corresponding to openssl's SSL_SESSION structure
1987 #
1988 # returns: timeout (in seconds)
1989
1990 Check openssl doc
1991 <http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html>
1992
1993 · get_timeout
1994
1995 Technically the same functionality as "SESSION_get_timeout".
1996
1997 my $rv = Net::SSLeay::get_timeout($s);
1998
1999 · SESSION_print
2000
2001 NOTE: Does not exactly correspond to any low level API function
2002
2003 Prints session details (e.g. protocol version, cipher, session-id
2004 ...) to BIO.
2005
2006 my $rv = Net::SSLeay::SESSION_print($fp, $ses);
2007 # $fp - value corresponding to openssl's BIO structure
2008 # $ses - value corresponding to openssl's SSL_SESSION structure
2009 #
2010 # returns: 1 on success, 0 on failure
2011
2012 You have to use necessary BIO functions like this:
2013
2014 # let us have $ssl corresponding to openssl's SSL structure
2015 my $ses = Net::SSLeay::get_session($ssl);
2016 my $bio = Net::SSLeay::BIO_new(&Net::SSLeay::BIO_s_mem);
2017 Net::SSLeay::SESSION_print($bio, $ses);
2018 print Net::SSLeay::BIO_read($bio);
2019
2020 · SESSION_print_fp
2021
2022 Prints session details (e.g. protocol version, cipher, session-id
2023 ...) to file handle.
2024
2025 my $rv = Net::SSLeay::SESSION_print_fp($fp, $ses);
2026 # $fp - perl file handle
2027 # $ses - value corresponding to openssl's SSL_SESSION structure
2028 #
2029 # returns: 1 on success, 0 on failure
2030
2031 Example:
2032
2033 # let us have $ssl corresponding to openssl's SSL structure
2034 my $ses = Net::SSLeay::get_session($ssl);
2035 open my $fh, ">", "output.txt";
2036 Net::SSLeay::SESSION_print_fp($fh,$ses);
2037
2038 · SESSION_set_time
2039
2040 Replaces the creation time of the session s with the chosen value
2041 $t (seconds since 1.1.1970).
2042
2043 my $rv = Net::SSLeay::SESSION_set_time($ses, $t);
2044 # $ses - value corresponding to openssl's SSL_SESSION structure
2045 # $t - time value
2046 #
2047 # returns: 1 on success
2048
2049 Check openssl doc
2050 <http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html>
2051
2052 · set_time
2053
2054 Technically the same functionality as "SESSION_set_time".
2055
2056 my $rv = Net::SSLeay::set_time($ses, $t);
2057
2058 · SESSION_set_timeout
2059
2060 Sets the timeout value for session s in seconds to $t.
2061
2062 my $rv = Net::SSLeay::SESSION_set_timeout($s, $t);
2063 # $s - value corresponding to openssl's SSL_SESSION structure
2064 # $t - timeout (in seconds)
2065 #
2066 # returns: 1 on success
2067
2068 Check openssl doc
2069 <http://www.openssl.org/docs/ssl/SSL_SESSION_get_time.html>
2070
2071 · set_timeout
2072
2073 Technically the same functionality as "SESSION_set_timeout".
2074
2075 my $rv = Net::SSLeay::set_timeout($ses, $t);
2076
2077 Low level API: SSL_CTX_* related functions
2078
2079 NOTE: Please note that the function described in this chapter have
2080 "SSL_" part stripped from their original openssl names.
2081
2082 · CTX_add_client_CA
2083
2084 Adds the CA name extracted from $cacert to the list of CAs sent to
2085 the client when requesting a client certificate for $ctx.
2086
2087 my $rv = Net::SSLeay::CTX_add_client_CA($ctx, $cacert);
2088 # $ctx - value corresponding to openssl's SSL_CTX structure
2089 # $cacert - value corresponding to openssl's X509 structure
2090 #
2091 # returns: 1 on success, 0 on failure
2092
2093 Check openssl doc
2094 <http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html>
2095
2096 · CTX_add_extra_chain_cert
2097
2098 Adds the certificate $x509 to the certificate chain presented
2099 together with the certificate. Several certificates can be added
2100 one after the other.
2101
2102 my $rv = Net::SSLeay::CTX_add_extra_chain_cert($ctx, $x509);
2103 # $ctx - value corresponding to openssl's SSL_CTX structure
2104 # $x509 - value corresponding to openssl's X509 structure
2105 #
2106 # returns: 1 on success, check out the error stack to find out the reason for failure otherwise
2107
2108 Check openssl doc
2109 <http://www.openssl.org/docs/ssl/SSL_CTX_add_extra_chain_cert.html>
2110
2111 · CTX_add_session
2112
2113 Adds the session $ses to the context $ctx.
2114
2115 my $rv = Net::SSLeay::CTX_add_session($ctx, $ses);
2116 # $ctx - value corresponding to openssl's SSL_CTX structure
2117 # $ses - value corresponding to openssl's SSL_SESSION structure
2118 #
2119 # returns: 1 on success, 0 on failure
2120
2121 Check openssl doc
2122 <http://www.openssl.org/docs/ssl/SSL_CTX_add_session.html>
2123
2124 · CTX_callback_ctrl
2125
2126 ??? (more info needed)
2127
2128 my $rv = Net::SSLeay::CTX_callback_ctrl($ctx, $cmd, $fp);
2129 # $ctx - value corresponding to openssl's SSL_CTX structure
2130 # $cmd - (integer) command id
2131 # $fp - (function pointer) ???
2132 #
2133 # returns: ???
2134
2135 Check openssl doc
2136 <http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html>
2137
2138 · CTX_check_private_key
2139
2140 Checks the consistency of a private key with the corresponding
2141 certificate loaded into $ctx.
2142
2143 my $rv = Net::SSLeay::CTX_check_private_key($ctx);
2144 # $ctx - value corresponding to openssl's SSL_CTX structure
2145 #
2146 # returns: 1 on success, otherwise check out the error stack to find out the reason
2147
2148 Check openssl doc
2149 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
2150
2151 · CTX_ctrl
2152
2153 Internal handling function for SSL_CTX objects.
2154
2155 BEWARE: openssl doc says: This function should never be called
2156 directly!
2157
2158 my $rv = Net::SSLeay::CTX_ctrl($ctx, $cmd, $larg, $parg);
2159 # $ctx - value corresponding to openssl's SSL_CTX structure
2160 # $cmd - (integer) command id
2161 # $larg - (integer) long ???
2162 # $parg - (string/pointer) ???
2163 #
2164 # returns: (long) result of given command ???
2165
2166 #valid $cmd values
2167 1 - SSL_CTRL_NEED_TMP_RSA
2168 2 - SSL_CTRL_SET_TMP_RSA
2169 3 - SSL_CTRL_SET_TMP_DH
2170 4 - SSL_CTRL_SET_TMP_ECDH
2171 5 - SSL_CTRL_SET_TMP_RSA_CB
2172 6 - SSL_CTRL_SET_TMP_DH_CB
2173 7 - SSL_CTRL_SET_TMP_ECDH_CB
2174 8 - SSL_CTRL_GET_SESSION_REUSED
2175 9 - SSL_CTRL_GET_CLIENT_CERT_REQUEST
2176 10 - SSL_CTRL_GET_NUM_RENEGOTIATIONS
2177 11 - SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS
2178 12 - SSL_CTRL_GET_TOTAL_RENEGOTIATIONS
2179 13 - SSL_CTRL_GET_FLAGS
2180 14 - SSL_CTRL_EXTRA_CHAIN_CERT
2181 15 - SSL_CTRL_SET_MSG_CALLBACK
2182 16 - SSL_CTRL_SET_MSG_CALLBACK_ARG
2183 17 - SSL_CTRL_SET_MTU
2184 20 - SSL_CTRL_SESS_NUMBER
2185 21 - SSL_CTRL_SESS_CONNECT
2186 22 - SSL_CTRL_SESS_CONNECT_GOOD
2187 23 - SSL_CTRL_SESS_CONNECT_RENEGOTIATE
2188 24 - SSL_CTRL_SESS_ACCEPT
2189 25 - SSL_CTRL_SESS_ACCEPT_GOOD
2190 26 - SSL_CTRL_SESS_ACCEPT_RENEGOTIATE
2191 27 - SSL_CTRL_SESS_HIT
2192 28 - SSL_CTRL_SESS_CB_HIT
2193 29 - SSL_CTRL_SESS_MISSES
2194 30 - SSL_CTRL_SESS_TIMEOUTS
2195 31 - SSL_CTRL_SESS_CACHE_FULL
2196 32 - SSL_CTRL_OPTIONS
2197 33 - SSL_CTRL_MODE
2198 40 - SSL_CTRL_GET_READ_AHEAD
2199 41 - SSL_CTRL_SET_READ_AHEAD
2200 42 - SSL_CTRL_SET_SESS_CACHE_SIZE
2201 43 - SSL_CTRL_GET_SESS_CACHE_SIZE
2202 44 - SSL_CTRL_SET_SESS_CACHE_MODE
2203 45 - SSL_CTRL_GET_SESS_CACHE_MODE
2204 50 - SSL_CTRL_GET_MAX_CERT_LIST
2205 51 - SSL_CTRL_SET_MAX_CERT_LIST
2206 52 - SSL_CTRL_SET_MAX_SEND_FRAGMENT
2207 53 - SSL_CTRL_SET_TLSEXT_SERVERNAME_CB
2208 54 - SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG
2209 55 - SSL_CTRL_SET_TLSEXT_HOSTNAME
2210 56 - SSL_CTRL_SET_TLSEXT_DEBUG_CB
2211 57 - SSL_CTRL_SET_TLSEXT_DEBUG_ARG
2212 58 - SSL_CTRL_GET_TLSEXT_TICKET_KEYS
2213 59 - SSL_CTRL_SET_TLSEXT_TICKET_KEYS
2214 60 - SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT
2215 61 - SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB
2216 62 - SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG
2217 63 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB
2218 64 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG
2219 65 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE
2220 66 - SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS
2221 67 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS
2222 68 - SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS
2223 69 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS
2224 70 - SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP
2225 71 - SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP
2226 72 - SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB
2227 73 - DTLS_CTRL_GET_TIMEOUT
2228 74 - DTLS_CTRL_HANDLE_TIMEOUT
2229 75 - DTLS_CTRL_LISTEN
2230 76 - SSL_CTRL_GET_RI_SUPPORT
2231 77 - SSL_CTRL_CLEAR_OPTIONS
2232 78 - SSL_CTRL_CLEAR_MODE
2233
2234 82 - SSL_CTRL_GET_EXTRA_CHAIN_CERTS
2235 83 - SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS
2236
2237 88 - SSL_CTRL_CHAIN
2238 89 - SSL_CTRL_CHAIN_CERT
2239
2240 90 - SSL_CTRL_GET_CURVES
2241 91 - SSL_CTRL_SET_CURVES
2242 92 - SSL_CTRL_SET_CURVES_LIST
2243 93 - SSL_CTRL_GET_SHARED_CURVE
2244 94 - SSL_CTRL_SET_ECDH_AUTO
2245 97 - SSL_CTRL_SET_SIGALGS
2246 98 - SSL_CTRL_SET_SIGALGS_LIST
2247 99 - SSL_CTRL_CERT_FLAGS
2248 100 - SSL_CTRL_CLEAR_CERT_FLAGS
2249 101 - SSL_CTRL_SET_CLIENT_SIGALGS
2250 102 - SSL_CTRL_SET_CLIENT_SIGALGS_LIST
2251 103 - SSL_CTRL_GET_CLIENT_CERT_TYPES
2252 104 - SSL_CTRL_SET_CLIENT_CERT_TYPES
2253 105 - SSL_CTRL_BUILD_CERT_CHAIN
2254 106 - SSL_CTRL_SET_VERIFY_CERT_STORE
2255 107 - SSL_CTRL_SET_CHAIN_CERT_STORE
2256 108 - SSL_CTRL_GET_PEER_SIGNATURE_NID
2257 109 - SSL_CTRL_GET_SERVER_TMP_KEY
2258 110 - SSL_CTRL_GET_RAW_CIPHERLIST
2259 111 - SSL_CTRL_GET_EC_POINT_FORMATS
2260 112 - SSL_CTRL_GET_TLSA_RECORD
2261 113 - SSL_CTRL_SET_TLSA_RECORD
2262 114 - SSL_CTRL_PULL_TLSA_RECORD
2263
2264 Check openssl doc
2265 <http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html>
2266
2267 · CTX_flush_sessions
2268
2269 Causes a run through the session cache of $ctx to remove sessions
2270 expired at time $tm.
2271
2272 Net::SSLeay::CTX_flush_sessions($ctx, $tm);
2273 # $ctx - value corresponding to openssl's SSL_CTX structure
2274 # $tm - specifies the time which should be used for the expiration test (seconds since 1.1.1970)
2275 #
2276 # returns: no return value
2277
2278 Check openssl doc
2279 <http://www.openssl.org/docs/ssl/SSL_CTX_flush_sessions.html>
2280
2281 · CTX_free
2282
2283 Free an allocated SSL_CTX object.
2284
2285 Net::SSLeay::CTX_free($ctx);
2286 # $ctx - value corresponding to openssl's SSL_CTX structure
2287 #
2288 # returns: no return value
2289
2290 Check openssl doc
2291 <http://www.openssl.org/docs/ssl/SSL_CTX_free.html>
2292
2293 · CTX_get_app_data
2294
2295 Can be used to get application defined value/data.
2296
2297 my $rv = Net::SSLeay::CTX_get_app_data($ctx);
2298 # $ctx - value corresponding to openssl's SSL_CTX structure
2299 #
2300 # returns: string/buffer/pointer ???
2301
2302 · CTX_set_app_data
2303
2304 Can be used to set some application defined value/data.
2305
2306 my $rv = Net::SSLeay::CTX_set_app_data($ctx, $arg);
2307 # $ctx - value corresponding to openssl's SSL_CTX structure
2308 # $arg - (string/buffer/pointer ???) data
2309 #
2310 # returns: ???
2311
2312 · CTX_get0_param
2313
2314 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
2315 requires at least OpenSSL 1.0.2
2316
2317 Returns the current verification parameters.
2318
2319 my $vpm = Net::SSLeay::CTX_get0_param($ctx);
2320 # $ctx - value corresponding to openssl's SSL_CTX structure
2321 #
2322 # returns: value corresponding to openssl's X509_VERIFY_PARAM structure
2323
2324 Check openssl doc
2325 <https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html>
2326
2327 · CTX_get_cert_store
2328
2329 Returns the current certificate verification storage.
2330
2331 my $rv = Net::SSLeay::CTX_get_cert_store($ctx);
2332 # $ctx - value corresponding to openssl's SSL_CTX structure
2333 #
2334 # returns: value corresponding to openssl's X509_STORE structure (0 on failure)
2335
2336 Check openssl doc
2337 <http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_store.html>
2338
2339 · CTX_get_client_CA_list
2340
2341 Returns the list of client CAs explicitly set for $ctx using
2342 "CTX_set_client_CA_list".
2343
2344 my $rv = Net::SSLeay::CTX_get_client_CA_list($ctx);
2345 # $ctx - value corresponding to openssl's SSL_CTX structure
2346 #
2347 # returns: value corresponding to openssl's X509_NAME_STACK structure (0 on failure)
2348
2349 Check openssl doc
2350 <http://www.openssl.org/docs/ssl/SSL_get_client_CA_list.html>
2351
2352 · CTX_get_ex_data
2353
2354 Is used to retrieve the information for index $idx from $ctx.
2355
2356 my $rv = Net::SSLeay::CTX_get_ex_data($ssl, $idx);
2357 # $ssl - value corresponding to openssl's SSL_CTX structure
2358 # $idx - (integer) index for application specific data
2359 #
2360 # returns: pointer to ???
2361
2362 Check openssl doc
2363 <http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html>
2364
2365 · CTX_get_ex_new_index
2366
2367 Is used to register a new index for application specific data.
2368
2369 my $rv = Net::SSLeay::CTX_get_ex_new_index($argl, $argp, $new_func, $dup_func, $free_func);
2370 # $argl - (long) ???
2371 # $argp - (pointer) ???
2372 # $new_func - function pointer ??? (CRYPTO_EX_new *)
2373 # $dup_func - function pointer ??? (CRYPTO_EX_dup *)
2374 # $free_func - function pointer ??? (CRYPTO_EX_free *)
2375 #
2376 # returns: (integer) ???
2377
2378 Check openssl doc
2379 <http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html>
2380
2381 · CTX_get_mode
2382
2383 Returns the mode set for ctx.
2384
2385 my $rv = Net::SSLeay::CTX_get_mode($ctx);
2386 # $ctx - value corresponding to openssl's SSL_CTX structure
2387 #
2388 # returns: mode (bitmask)
2389
2390 #to decode the return value (bitmask) use:
2391 0x00000001 corresponds to SSL_MODE_ENABLE_PARTIAL_WRITE
2392 0x00000002 corresponds to SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER
2393 0x00000004 corresponds to SSL_MODE_AUTO_RETRY
2394 0x00000008 corresponds to SSL_MODE_NO_AUTO_CHAIN
2395 0x00000010 corresponds to SSL_MODE_RELEASE_BUFFERS
2396 (note: some of the bits might not be supported by older openssl versions)
2397
2398 Check openssl doc
2399 <http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html>
2400
2401 · CTX_set_mode
2402
2403 Adds the mode set via bitmask in $mode to $ctx. Options already set
2404 before are not cleared.
2405
2406 my $rv = Net::SSLeay::CTX_set_mode($ctx, $mode);
2407 # $ctx - value corresponding to openssl's SSL_CTX structure
2408 # $mode - mode bitmask
2409 #
2410 # returns: the new mode bitmask after adding $mode
2411
2412 For bitmask details see "CTX_get_mode" (above).
2413
2414 Check openssl doc
2415 <http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html>
2416
2417 · CTX_get_options
2418
2419 Returns the options (bitmask) set for $ctx.
2420
2421 my $rv = Net::SSLeay::CTX_get_options($ctx);
2422 # $ctx - value corresponding to openssl's SSL_CTX structure
2423 #
2424 # returns: options (bitmask)
2425
2426 BEWARE: The available constants and their values in bitmask depend
2427 on the TLS library. For example, SSL_OP_NO_TLSv1_3 became available
2428 much later than SSL_OP_NO_COMPRESS which is already deprecated by
2429 some libraries. Also, some previously used option values have been
2430 recycled and are now used for newer options. See the list of
2431 constants in this document for options Net::SSLeay currently
2432 supports.
2433
2434 You are strongly encouraged to check your TLS library if you need
2435 to use numeric values directly. The following is a sample of
2436 historic values. It may not be correct anymore.
2437
2438 #to decode the return value (bitmask) use:
2439 0x00000004 corresponds to SSL_OP_LEGACY_SERVER_CONNECT
2440 0x00000800 corresponds to SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
2441 0x00004000 corresponds to SSL_OP_NO_TICKET
2442 0x00010000 corresponds to SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
2443 0x00400000 corresponds to SSL_OP_CIPHER_SERVER_PREFERENCE
2444 0x04000000 corresponds to SSL_OP_NO_TLSv1
2445
2446 Check openssl doc
2447 <https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html>
2448
2449 · CTX_set_options
2450
2451 Adds the options set via bitmask in $options to ctx. Options
2452 already set before are not cleared.
2453
2454 Net::SSLeay::CTX_set_options($ctx, $options);
2455 # $ctx - value corresponding to openssl's SSL_CTX structure
2456 # $options - options bitmask
2457 #
2458 # returns: the new options bitmask after adding $options
2459
2460 For bitmask details see "CTX_get_options" (above).
2461
2462 Check openssl doc
2463 <https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html>
2464
2465 · CTX_get_quiet_shutdown
2466
2467 Returns the 'quiet shutdown' setting of $ctx.
2468
2469 my $rv = Net::SSLeay::CTX_get_quiet_shutdown($ctx);
2470 # $ctx - value corresponding to openssl's SSL_CTX structure
2471 #
2472 # returns: (integer) the current setting
2473
2474 Check openssl doc
2475 <http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html>
2476
2477 · CTX_get_read_ahead
2478
2479 my $rv = Net::SSLeay::CTX_get_read_ahead($ctx);
2480 # $ctx - value corresponding to openssl's SSL_CTX structure
2481 #
2482 # returns: (integer) read_ahead value
2483
2484 · CTX_get_session_cache_mode
2485
2486 Returns the currently used cache mode (bitmask).
2487
2488 my $rv = Net::SSLeay::CTX_get_session_cache_mode($ctx);
2489 # $ctx - value corresponding to openssl's SSL_CTX structure
2490 #
2491 # returns: mode (bitmask)
2492
2493 BEWARE: SESS_CACHE_OFF and other constants are not available in
2494 Net-SSLeay-1.82 and before. If the constants are not available,
2495 the following values have historically been correct. You are
2496 strongly encouraged to check your TLS library for the current
2497 values.
2498
2499 #to decode the return value (bitmask) use:
2500 0x0000 corresponds to SSL_SESS_CACHE_OFF
2501 0x0001 corresponds to SSL_SESS_CACHE_CLIENT
2502 0x0002 corresponds to SSL_SESS_CACHE_SERVER
2503 0x0080 corresponds to SSL_SESS_CACHE_NO_AUTO_CLEAR
2504 0x0100 corresponds to SSL_SESS_CACHE_NO_INTERNAL_LOOKUP
2505 0x0200 corresponds to SSL_SESS_CACHE_NO_INTERNAL_STORE
2506 (note: some of the bits might not be supported by older openssl versions)
2507
2508 Check openssl doc
2509 <http://www.openssl.org/docs/ssl/SSL_CTX_set_session_cache_mode.html>
2510
2511 · CTX_set_session_cache_mode
2512
2513 Enables/disables session caching by setting the operational mode
2514 for $ctx to $mode.
2515
2516 my $rv = Net::SSLeay::CTX_set_session_cache_mode($ctx, $mode);
2517 # $ctx - value corresponding to openssl's SSL_CTX structure
2518 # $mode - mode (bitmask)
2519 #
2520 # returns: previously set cache mode
2521
2522 For bitmask details see "CTX_get_session_cache_mode" (above).
2523
2524 Check openssl doc
2525 <http://www.openssl.org/docs/ssl/SSL_CTX_set_session_cache_mode.html>
2526
2527 · CTX_get_timeout
2528
2529 Returns the currently set timeout value for $ctx.
2530
2531 my $rv = Net::SSLeay::CTX_get_timeout($ctx);
2532 # $ctx - value corresponding to openssl's SSL_CTX structure
2533 #
2534 # returns: timeout in seconds
2535
2536 Check openssl doc
2537 <http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html>
2538
2539 · CTX_get_verify_depth
2540
2541 Returns the verification depth limit currently set in $ctx. If no
2542 limit has been explicitly set, -1 is returned and the default value
2543 will be used.",
2544
2545 my $rv = Net::SSLeay::CTX_get_verify_depth($ctx);
2546 # $ctx - value corresponding to openssl's SSL_CTX structure
2547 #
2548 # returns: depth limit currently set in $ctx, -1 if no limit has been explicitly set
2549
2550 Check openssl doc
2551 <http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html>
2552
2553 · CTX_get_verify_mode
2554
2555 Returns the verification mode (bitmask) currently set in $ctx.
2556
2557 my $rv = Net::SSLeay::CTX_get_verify_mode($ctx);
2558 # $ctx - value corresponding to openssl's SSL_CTX structure
2559 #
2560 # returns: mode (bitmask)
2561
2562 #to decode the return value (bitmask) use:
2563 0x00 corresponds to SSL_VERIFY_NONE
2564 0x01 corresponds to SSL_VERIFY_PEER
2565 0x02 corresponds to SSL_VERIFY_FAIL_IF_NO_PEER_CERT
2566 0x04 corresponds to SSL_VERIFY_CLIENT_ONCE
2567 (note: some of the bits might not be supported by older openssl versions)
2568
2569 Check openssl doc
2570 <http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html>
2571
2572 · CTX_set_verify
2573
2574 Sets the verification flags for $ctx to be $mode and specifies the
2575 verify_callback function to be used.
2576
2577 Net::SSLeay::CTX_set_verify($ctx, $mode, $callback);
2578 # $ctx - value corresponding to openssl's SSL_CTX structure
2579 # $mode - mode (bitmask)
2580 # $callback - [optional] reference to perl callback function
2581 #
2582 # returns: no return value
2583
2584 For bitmask details see "CTX_get_verify_mode" (above).
2585
2586 Check openssl doc
2587 <http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html>
2588
2589 · CTX_load_verify_locations
2590
2591 Specifies the locations for $ctx, at which CA certificates for
2592 verification purposes are located. The certificates available via
2593 $CAfile and $CApath are trusted.
2594
2595 my $rv = Net::SSLeay::CTX_load_verify_locations($ctx, $CAfile, $CApath);
2596 # $ctx - value corresponding to openssl's SSL_CTX structure
2597 # $CAfile - (string) file of CA certificates in PEM format, the file can contain several CA certificates (or '')
2598 # $CApath - (string) directory containing CA certificates in PEM format (or '')
2599 #
2600 # returns: 1 on success, 0 on failure (check the error stack to find out the reason)
2601
2602 Check openssl doc
2603 <http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html>
2604
2605 · CTX_need_tmp_RSA
2606
2607 Return the result of
2608 "SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL)"
2609
2610 my $rv = Net::SSLeay::CTX_need_tmp_RSA($ctx);
2611 # $ctx - value corresponding to openssl's SSL_CTX structure
2612 #
2613 # returns: result of SSL_CTRL_NEED_TMP_RSA command
2614
2615 Not available with OpenSSL 1.1 and later.
2616
2617 · CTX_new
2618
2619 The same as "CTX_v23_new"
2620
2621 my $rv = Net::SSLeay::CTX_new();
2622 #
2623 # returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
2624
2625 Check openssl doc
2626 <http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
2627
2628 Not available with OpenSSL 1.1 and later.
2629
2630 · CTX_v2_new
2631
2632 Creates a new SSL_CTX object - based on SSLv2_method() - as
2633 framework to establish TLS/SSL enabled connections.
2634
2635 my $rv = Net::SSLeay::CTX_v2_new();
2636 #
2637 # returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
2638
2639 · CTX_v23_new
2640
2641 Creates a new SSL_CTX object - based on SSLv23_method() - as
2642 framework to establish TLS/SSL enabled connections.
2643
2644 my $rv = Net::SSLeay::CTX_v23_new();
2645 #
2646 # returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
2647
2648 · CTX_v3_new
2649
2650 Creates a new SSL_CTX object - based on SSLv3_method() - as
2651 framework to establish TLS/SSL enabled connections.
2652
2653 my $rv = Net::SSLeay::CTX_v3_new();
2654 #
2655 # returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
2656
2657 · CTX_tlsv1_new
2658
2659 Creates a new SSL_CTX object - based on TLSv1_method() - as
2660 framework to establish TLS/SSL enabled connections.
2661
2662 my $rv = Net::SSLeay::CTX_tlsv1_new();
2663 #
2664 # returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
2665
2666 · CTX_tlsv1_1_new
2667
2668 Creates a new SSL_CTX object - based on TLSv1_1_method() - as
2669 framework to establish TLS/SSL enabled connections. Only available
2670 where supported by the underlying openssl.
2671
2672 my $rv = Net::SSLeay::CTX_tlsv1_1_new();
2673 #
2674 # returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
2675
2676 · CTX_tlsv1_2_new
2677
2678 Creates a new SSL_CTX object - based on TLSv1_2_method() - as
2679 framework to establish TLS/SSL enabled connections. Only available
2680 where supported by the underlying openssl.
2681
2682 my $rv = Net::SSLeay::CTX_tlsv1_2_new();
2683 #
2684 # returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
2685
2686 · CTX_new_with_method
2687
2688 Creates a new SSL_CTX object based on $meth method
2689
2690 my $rv = Net::SSLeay::CTX_new_with_method($meth);
2691 # $meth - value corresponding to openssl's SSL_METHOD structure
2692 #
2693 # returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
2694
2695 #example
2696 my $ctx = Net::SSLeay::CTX_new_with_method(&Net::SSLeay::TLSv1_method);
2697
2698 Check openssl doc
2699 <http://www.openssl.org/docs/ssl/SSL_CTX_new.html>
2700
2701 · CTX_set_min_proto_version, CTX_set_max_proto_version,
2702 set_min_proto_version and set_max_proto_version,
2703
2704 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
2705 requires at least OpenSSL 1.1.0 or LibreSSL 2.6.0
2706
2707 Set the minimum and maximum supported protocol for $ctx or $ssl.
2708
2709 my $rv = Net::SSLeay::CTX_set_min_proto_version($ctx, $version)
2710 # $ctx - value corresponding to openssl's SSL_CTX structure
2711 # $version - (integer) constat version value or 0 for automatic lowest or highest value
2712 #
2713 # returns: 1 on success, 0 on failure
2714
2715 #example: allow only TLS 1.2 for a SSL_CTX
2716 my $rv_min = Net::SSLeay::CTX_set_min_proto_version($ctx, Net::SSLeay::TLS1_2_VERSION());
2717 my $rv_max = Net::SSLeay::CTX_set_max_proto_version($ctx, Net::SSLeay::TLS1_2_VERSION());
2718
2719 #example: allow only TLS 1.1 for a SSL
2720 my $rv_min = Net::SSLeay::set_min_proto_version($ssl, Net::SSLeay::TLS1_1_VERSION());
2721 my $rv_max = Net::SSLeay::set_max_proto_version($ssl, Net::SSLeay::TLS1_1_VERSION());
2722
2723 Check openssl doc
2724 <https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html>
2725
2726 · CTX_get_min_proto_version, CTX_get_max_proto_version,
2727 get_min_proto_version and get_max_proto_version,
2728
2729 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
2730 requires at least OpenSSL 1.1.0g
2731
2732 Get the minimum and maximum supported protocol for $ctx or $ssl.
2733
2734 my $version = Net::SSLeay::CTX_get_min_proto_version($ctx)
2735 # $ctx - value corresponding to openssl's SSL_CTX structure
2736 #
2737 # returns: 0 automatic lowest or highest value, configured value otherwise
2738
2739 Check openssl doc
2740 <https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html>
2741
2742 · CTX_remove_session
2743
2744 Removes the session $ses from the context $ctx.
2745
2746 my $rv = Net::SSLeay::CTX_remove_session($ctx, $ses);
2747 # $ctx - value corresponding to openssl's SSL_CTX structure
2748 # $ses - value corresponding to openssl's SSL_SESSION structure
2749 #
2750 # returns: 1 on success, 0 on failure
2751
2752 Check openssl doc
2753 <http://www.openssl.org/docs/ssl/SSL_CTX_add_session.html>
2754
2755 · CTX_sess_accept
2756
2757 my $rv = Net::SSLeay::CTX_sess_accept($ctx);
2758 # $ctx - value corresponding to openssl's SSL_CTX structure
2759 #
2760 # returns: number of started SSL/TLS handshakes in server mode
2761
2762 Check openssl doc
2763 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2764
2765 · CTX_sess_accept_good
2766
2767 my $rv = Net::SSLeay::CTX_sess_accept_good($ctx);
2768 # $ctx - value corresponding to openssl's SSL_CTX structure
2769 #
2770 # returns: number of successfully established SSL/TLS sessions in server mode
2771
2772 Check openssl doc
2773 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2774
2775 · CTX_sess_accept_renegotiate
2776
2777 my $rv = Net::SSLeay::CTX_sess_accept_renegotiate($ctx);
2778 # $ctx - value corresponding to openssl's SSL_CTX structure
2779 #
2780 # returns: number of start renegotiations in server mode
2781
2782 Check openssl doc
2783 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2784
2785 · CTX_sess_cache_full
2786
2787 my $rv = Net::SSLeay::CTX_sess_cache_full($ctx);
2788 # $ctx - value corresponding to openssl's SSL_CTX structure
2789 #
2790 # returns: number of sessions that were removed because the maximum session cache size was exceeded
2791
2792 Check openssl doc
2793 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2794
2795 · CTX_sess_cb_hits
2796
2797 my $rv = Net::SSLeay::CTX_sess_cb_hits($ctx);
2798 # $ctx - value corresponding to openssl's SSL_CTX structure
2799 #
2800 # returns: number of successfully retrieved sessions from the external session cache in server mode
2801
2802 Check openssl doc
2803 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2804
2805 · CTX_sess_connect
2806
2807 my $rv = Net::SSLeay::CTX_sess_connect($ctx);
2808 # $ctx - value corresponding to openssl's SSL_CTX structure
2809 #
2810 # returns: number of started SSL/TLS handshakes in client mode
2811
2812 Check openssl doc
2813 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2814
2815 · CTX_sess_connect_good
2816
2817 my $rv = Net::SSLeay::CTX_sess_connect_good($ctx);
2818 # $ctx - value corresponding to openssl's SSL_CTX structure
2819 #
2820 # returns: number of successfully established SSL/TLS sessions in client mode
2821
2822 Check openssl doc
2823 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2824
2825 · CTX_sess_connect_renegotiate
2826
2827 my $rv = Net::SSLeay::CTX_sess_connect_renegotiate($ctx);
2828 # $ctx - value corresponding to openssl's SSL_CTX structure
2829 #
2830 # returns: number of start renegotiations in client mode
2831
2832 Check openssl doc
2833 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2834
2835 · CTX_sess_get_cache_size
2836
2837 Returns the currently valid session cache size.
2838
2839 my $rv = Net::SSLeay::CTX_sess_get_cache_size($ctx);
2840 # $ctx - value corresponding to openssl's SSL_CTX structure
2841 #
2842 # returns: current size
2843
2844 Check openssl doc
2845 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html>
2846
2847 · CTX_sess_hits
2848
2849 my $rv = Net::SSLeay::CTX_sess_hits($ctx);
2850 # $ctx - value corresponding to openssl's SSL_CTX structure
2851 #
2852 # returns: number of successfully reused sessions
2853
2854 Check openssl doc
2855 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2856
2857 · CTX_sess_misses
2858
2859 my $rv = Net::SSLeay::CTX_sess_misses($ctx);
2860 # $ctx - value corresponding to openssl's SSL_CTX structure
2861 #
2862 # returns: number of sessions proposed by clients that were not found in the internal session cache in server mode
2863
2864 Check openssl doc
2865 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2866
2867 · CTX_sess_number
2868
2869 my $rv = Net::SSLeay::CTX_sess_number($ctx);
2870 # $ctx - value corresponding to openssl's SSL_CTX structure
2871 #
2872 # returns: current number of sessions in the internal session cache
2873
2874 Check openssl doc
2875 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2876
2877 · CTX_sess_set_cache_size
2878
2879 Sets the size of the internal session cache of context $ctx to
2880 $size.
2881
2882 Net::SSLeay::CTX_sess_set_cache_size($ctx, $size);
2883 # $ctx - value corresponding to openssl's SSL_CTX structure
2884 # $size - cache size (0 = unlimited)
2885 #
2886 # returns: previously valid size
2887
2888 Check openssl doc
2889 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html>
2890
2891 · CTX_sess_timeouts
2892
2893 Returns the number of sessions proposed by clients and either found
2894 in the internal or external session cache in server mode, but that
2895 were invalid due to timeout. These sessions are not included in the
2896 SSL_CTX_sess_hits count.
2897
2898 my $rv = Net::SSLeay::CTX_sess_timeouts($ctx);
2899 # $ctx - value corresponding to openssl's SSL_CTX structure
2900 #
2901 # returns: number of sessions
2902
2903 Check openssl doc
2904 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>
2905
2906 · CTX_sessions
2907
2908 Returns a pointer to the lhash databases containing the internal
2909 session cache for ctx.
2910
2911 my $rv = Net::SSLeay::CTX_sessions($ctx);
2912 # $ctx - value corresponding to openssl's SSL_CTX structure
2913 #
2914 # returns: value corresponding to openssl's LHASH structure (0 on failure)
2915
2916 Check openssl doc
2917 <http://www.openssl.org/docs/ssl/SSL_CTX_sessions.html>
2918
2919 · CTX_set1_param
2920
2921 Applies X509 verification parameters $vpm on $ctx
2922
2923 my $rv = Net::SSLeay::CTX_set1_param($ctx, $vpm);
2924 # $ctx - value corresponding to openssl's SSL_CTX structure
2925 # $vpm - value corresponding to openssl's X509_VERIFY_PARAM structure
2926 #
2927 # returns: 1 on success, 0 on failure
2928
2929 Check openssl doc
2930 <https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html>
2931
2932 · CTX_set_cert_store
2933
2934 Sets/replaces the certificate verification storage of $ctx to/with
2935 $store.
2936
2937 Net::SSLeay::CTX_set_cert_store($ctx, $store);
2938 # $ctx - value corresponding to openssl's SSL_CTX structure
2939 # $store - value corresponding to openssl's X509_STORE structure
2940 #
2941 # returns: no return value
2942
2943 Check openssl doc
2944 <http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_store.html>
2945
2946 · CTX_set_cert_verify_callback
2947
2948 Sets the verification callback function for $ctx. SSL objects that
2949 are created from $ctx inherit the setting valid at the time when
2950 "Net::SSLeay::new($ctx)" is called.
2951
2952 Net::SSLeay::CTX_set_cert_verify_callback($ctx, $func, $data);
2953 # $ctx - value corresponding to openssl's SSL_CTX structure
2954 # $func - perl reference to callback function
2955 # $data - [optional] data that will be passed to callback function when invoked
2956 #
2957 # returns: no return value
2958
2959 Check openssl doc
2960 <http://www.openssl.org/docs/ssl/SSL_CTX_set_cert_verify_callback.html>
2961
2962 · CTX_set_cipher_list
2963
2964 Sets the list of available ciphers for $ctx using the control
2965 string $str. The list of ciphers is inherited by all ssl objects
2966 created from $ctx.
2967
2968 my $rv = Net::SSLeay::CTX_set_cipher_list($s, $str);
2969 # $s - value corresponding to openssl's SSL_CTX structure
2970 # $str - (string) cipher list e.g. '3DES:+RSA'
2971 #
2972 # returns: 1 if any cipher could be selected and 0 on complete failure
2973
2974 The format of $str is described in
2975 <http://www.openssl.org/docs/apps/ciphers.html>
2976
2977 Check openssl doc
2978 <http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html>
2979
2980 · CTX_set_client_CA_list
2981
2982 Sets the list of CAs sent to the client when requesting a client
2983 certificate for $ctx.
2984
2985 Net::SSLeay::CTX_set_client_CA_list($ctx, $list);
2986 # $ctx - value corresponding to openssl's SSL_CTX structure
2987 # $list - value corresponding to openssl's X509_NAME_STACK structure
2988 #
2989 # returns: no return value
2990
2991 Check openssl doc
2992 <http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html>
2993
2994 · CTX_set_default_passwd_cb
2995
2996 Sets the default password callback called when loading/storing a
2997 PEM certificate with encryption.
2998
2999 Net::SSLeay::CTX_set_default_passwd_cb($ctx, $func);
3000 # $ctx - value corresponding to openssl's SSL_CTX structure
3001 # $func - perl reference to callback function
3002 #
3003 # returns: no return value
3004
3005 Check openssl doc
3006 <http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html>
3007
3008 · CTX_set_default_passwd_cb_userdata
3009
3010 Sets a pointer to userdata which will be provided to the password
3011 callback on invocation.
3012
3013 Net::SSLeay::CTX_set_default_passwd_cb_userdata($ctx, $userdata);
3014 # $ctx - value corresponding to openssl's SSL_CTX structure
3015 # $userdata - data that will be passed to callback function when invoked
3016 #
3017 # returns: no return value
3018
3019 Check openssl doc
3020 <http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html>
3021
3022 · CTX_set_default_verify_paths
3023
3024 ??? (more info needed)
3025
3026 my $rv = Net::SSLeay::CTX_set_default_verify_paths($ctx);
3027 # $ctx - value corresponding to openssl's SSL_CTX structure
3028 #
3029 # returns: 1 on success, 0 on failure
3030
3031 · CTX_set_ex_data
3032
3033 Is used to store application data at $data for $idx into the $ctx
3034 object.
3035
3036 my $rv = Net::SSLeay::CTX_set_ex_data($ssl, $idx, $data);
3037 # $ssl - value corresponding to openssl's SSL_CTX structure
3038 # $idx - (integer) ???
3039 # $data - (pointer) ???
3040 #
3041 # returns: 1 on success, 0 on failure
3042
3043 Check openssl doc
3044 <http://www.openssl.org/docs/ssl/SSL_CTX_get_ex_new_index.html>
3045
3046 · CTX_set_purpose
3047
3048 my $rv = Net::SSLeay::CTX_set_purpose($s, $purpose);
3049 # $s - value corresponding to openssl's SSL_CTX structure
3050 # $purpose - (integer) purpose identifier
3051 #
3052 # returns: 1 on success, 0 on failure
3053
3054 #avainable purpose identifier
3055 1 - X509_PURPOSE_SSL_CLIENT
3056 2 - X509_PURPOSE_SSL_SERVER
3057 3 - X509_PURPOSE_NS_SSL_SERVER
3058 4 - X509_PURPOSE_SMIME_SIGN
3059 5 - X509_PURPOSE_SMIME_ENCRYPT
3060 6 - X509_PURPOSE_CRL_SIGN
3061 7 - X509_PURPOSE_ANY
3062 8 - X509_PURPOSE_OCSP_HELPER
3063 9 - X509_PURPOSE_TIMESTAMP_SIGN
3064
3065 #or use corresponding constants
3066 $purpose = &Net::SSLeay::X509_PURPOSE_SSL_CLIENT;
3067 ...
3068 $purpose = &Net::SSLeay::X509_PURPOSE_TIMESTAMP_SIGN;
3069
3070 · CTX_set_quiet_shutdown
3071
3072 Sets the 'quiet shutdown' flag for $ctx to be mode. SSL objects
3073 created from $ctx inherit the mode valid at the time
3074 "Net::SSLeay::new($ctx)" is called.
3075
3076 Net::SSLeay::CTX_set_quiet_shutdown($ctx, $mode);
3077 # $ctx - value corresponding to openssl's SSL_CTX structure
3078 # $mode - 0 or 1
3079 #
3080 # returns: no return value
3081
3082 Check openssl doc
3083 <http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html>
3084
3085 · CTX_set_read_ahead
3086
3087 my $rv = Net::SSLeay::CTX_set_read_ahead($ctx, $val);
3088 # $ctx - value corresponding to openssl's SSL_CTX structure
3089 # $val - read_ahead value to be set
3090 #
3091 # returns: the original read_ahead value
3092
3093 · CTX_set_session_id_context
3094
3095 Sets the context $sid_ctx of length $sid_ctx_len within which a
3096 session can be reused for the $ctx object.
3097
3098 my $rv = Net::SSLeay::CTX_set_session_id_context($ctx, $sid_ctx, $sid_ctx_len);
3099 # $ctx - value corresponding to openssl's SSL_CTX structure
3100 # $sid_ctx - data buffer
3101 # $sid_ctx_len - length of data in $sid_ctx
3102 #
3103 # returns: 1 on success, 0 on failure (the error is logged to the error stack)
3104
3105 Check openssl doc
3106 <http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html>
3107
3108 · CTX_set_ssl_version
3109
3110 Sets a new default TLS/SSL method for SSL objects newly created
3111 from this $ctx. SSL objects already created with
3112 "Net::SSLeay::new($ctx)" are not affected, except when
3113 "Net::SSLeay:clear($ssl)" is being called.
3114
3115 my $rv = Net::SSLeay::CTX_set_ssl_version($ctx, $meth);
3116 # $ctx - value corresponding to openssl's SSL_CTX structure
3117 # $meth - value corresponding to openssl's SSL_METHOD structure
3118 #
3119 # returns: 1 on success, 0 on failure
3120
3121 Check openssl doc
3122 <http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html>
3123
3124 · CTX_set_timeout
3125
3126 Sets the timeout for newly created sessions for $ctx to $t. The
3127 timeout value $t must be given in seconds.
3128
3129 my $rv = Net::SSLeay::CTX_set_timeout($ctx, $t);
3130 # $ctx - value corresponding to openssl's SSL_CTX structure
3131 # $t - timeout in seconds
3132 #
3133 # returns: previously set timeout value
3134
3135 Check openssl doc
3136 <http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html>
3137
3138 · CTX_set_tmp_dh
3139
3140 Sets DH parameters to be used to be $dh. The key is inherited by
3141 all ssl objects created from $ctx.
3142
3143 my $rv = Net::SSLeay::CTX_set_tmp_dh($ctx, $dh);
3144 # $ctx - value corresponding to openssl's SSL_CTX structure
3145 # $dh - value corresponding to openssl's DH structure
3146 #
3147 # returns: 1 on success, 0 on failure
3148
3149 Check openssl doc
3150 <http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html>
3151
3152 · CTX_set_tmp_dh_callback
3153
3154 Sets the callback function for $ctx to be used when a DH parameters
3155 are required to $tmp_dh_callback.
3156
3157 Net::SSLeay::CTX_set_tmp_dh_callback($ctx, $tmp_dh_callback);
3158 # $ctx - value corresponding to openssl's SSL_CTX structure
3159 # tmp_dh_callback - (function pointer) ???
3160 #
3161 # returns: no return value
3162
3163 Check openssl doc
3164 <http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html>
3165
3166 · CTX_set_tmp_rsa
3167
3168 Sets the temporary/ephemeral RSA key to be used to be $rsa.
3169
3170 my $rv = Net::SSLeay::CTX_set_tmp_rsa($ctx, $rsa);
3171 # $ctx - value corresponding to openssl's SSL_CTX structure
3172 # $rsa - value corresponding to openssl's RSA structure
3173 #
3174 # returns: 1 on success, 0 on failure
3175
3176 Check openssl doc
3177 <http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html>
3178
3179 Not available with OpenSSL 1.1 and later.
3180
3181 · CTX_set_tmp_rsa_callback
3182
3183 Sets the callback function for ctx to be used when a
3184 temporary/ephemeral RSA key is required to $tmp_rsa_callback.
3185
3186 ??? (does this function really work?)
3187
3188 Net::SSLeay::CTX_set_tmp_rsa_callback($ctx, $tmp_rsa_callback);
3189 # $ctx - value corresponding to openssl's SSL_CTX structure
3190 # $tmp_rsa_callback - (function pointer) ???
3191 #
3192 # returns: no return value
3193
3194 Check openssl doc
3195 <http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html>
3196
3197 Not available with OpenSSL 1.1 and later.
3198
3199 · CTX_set_trust
3200
3201 my $rv = Net::SSLeay::CTX_set_trust($s, $trust);
3202 # $s - value corresponding to openssl's SSL_CTX structure
3203 # $trust - (integer) trust identifier
3204 #
3205 # returns: the original value
3206
3207 #available trust identifiers
3208 1 - X509_TRUST_COMPAT
3209 2 - X509_TRUST_SSL_CLIENT
3210 3 - X509_TRUST_SSL_SERVER
3211 4 - X509_TRUST_EMAIL
3212 5 - X509_TRUST_OBJECT_SIGN
3213 6 - X509_TRUST_OCSP_SIGN
3214 7 - X509_TRUST_OCSP_REQUEST
3215 8 - X509_TRUST_TSA
3216
3217 #or use corresponding constants
3218 $trust = &Net::SSLeay::X509_TRUST_COMPAT;
3219 ...
3220 $trust = &Net::SSLeay::X509_TRUST_TSA;
3221
3222 · CTX_set_verify_depth
3223
3224 Sets the maximum depth for the certificate chain verification that
3225 shall be allowed for ctx.
3226
3227 Net::SSLeay::CTX_set_verify_depth($ctx, $depth);
3228 # $ctx - value corresponding to openssl's SSL_CTX structure
3229 # $depth - max. depth
3230 #
3231 # returns: no return value
3232
3233 Check openssl doc
3234 <http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html>
3235
3236 · CTX_use_PKCS12_file
3237
3238 Adds the certificate and private key from PKCS12 file $p12filename
3239 to $ctx.
3240
3241 my $rv = Net::SSLeay::CTX_use_PKCS12_file($ctx, $p12filename, $password);
3242 # $ctx - value corresponding to openssl's SSL_CTX structure
3243 # $p12filename - (string) filename
3244 # $password - (string) password to decrypt private key
3245 #
3246 # returns: 1 on success, 0 on failure
3247
3248 · CTX_use_PrivateKey
3249
3250 Adds the private key $pkey to $ctx.
3251
3252 my $rv = Net::SSLeay::CTX_use_PrivateKey($ctx, $pkey);
3253 # $ctx - value corresponding to openssl's SSL_CTX structure
3254 # $pkey - value corresponding to openssl's EVP_PKEY structure
3255 #
3256 # returns: 1 on success, otherwise check out the error stack to find out the reason
3257
3258 Check openssl doc
3259 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
3260
3261 · CTX_use_PrivateKey_file
3262
3263 Adds the first private key found in $file to $ctx.
3264
3265 my $rv = Net::SSLeay::CTX_use_PrivateKey_file($ctx, $file, $type);
3266 # $ctx - value corresponding to openssl's SSL_CTX structure
3267 # $file - (string) file name
3268 # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
3269 #
3270 # returns: 1 on success, otherwise check out the error stack to find out the reason
3271
3272 Check openssl doc
3273 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
3274
3275 · CTX_use_RSAPrivateKey
3276
3277 Adds the RSA private key $rsa to $ctx.
3278
3279 my $rv = Net::SSLeay::CTX_use_RSAPrivateKey($ctx, $rsa);
3280 # $ctx - value corresponding to openssl's SSL_CTX structure
3281 # $rsa - value corresponding to openssl's RSA structure
3282 #
3283 # returns: 1 on success, otherwise check out the error stack to find out the reason
3284
3285 Check openssl doc
3286 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
3287
3288 · CTX_use_RSAPrivateKey_file
3289
3290 Adds the first RSA private key found in $file to $ctx.
3291
3292 my $rv = Net::SSLeay::CTX_use_RSAPrivateKey_file($ctx, $file, $type);
3293 # $ctx - value corresponding to openssl's SSL_CTX structure
3294 # $file - (string) file name
3295 # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
3296 #
3297 # returns: 1 on success, otherwise check out the error stack to find out the reason
3298
3299 · CTX_use_certificate
3300
3301 Loads the certificate $x into $ctx
3302
3303 my $rv = Net::SSLeay::CTX_use_certificate($ctx, $x);
3304 # $ctx - value corresponding to openssl's SSL_CTX structure
3305 # $x - value corresponding to openssl's X509 structure
3306 #
3307 # returns: 1 on success, otherwise check out the error stack to find out the reason
3308
3309 Check openssl doc
3310 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
3311
3312 · CTX_use_certificate_chain_file
3313
3314 Loads a certificate chain from $file into $ctx. The certificates
3315 must be in PEM format and must be sorted starting with the
3316 subject's certificate (actual client or server certificate),
3317 followed by intermediate CA certificates if applicable, and ending
3318 at the highest level (root) CA.
3319
3320 my $rv = Net::SSLeay::CTX_use_certificate_chain_file($ctx, $file);
3321 # $ctx - value corresponding to openssl's SSL_CTX structure
3322 # $file - (string) file name
3323 #
3324 # returns: 1 on success, otherwise check out the error stack to find out the reason
3325
3326 Check openssl doc
3327 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
3328
3329 · CTX_use_certificate_file
3330
3331 Loads the first certificate stored in $file into $ctx.
3332
3333 my $rv = Net::SSLeay::CTX_use_certificate_file($ctx, $file, $type);
3334 # $ctx - value corresponding to openssl's SSL_CTX structure
3335 # $file - (string) file name
3336 # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
3337 #
3338 # returns: 1 on success, otherwise check out the error stack to find out the reason
3339
3340 Check openssl doc
3341 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
3342
3343 Low level API: SSL_* related functions
3344
3345 NOTE: Please note that the function described in this chapter have
3346 "SSL_" part stripped from their original openssl names.
3347
3348 · new
3349
3350 Creates a new SSL structure which is needed to hold the data for a
3351 TLS/SSL connection. The new structure inherits the settings of the
3352 underlying context $ctx: connection method (SSLv2/v3/TLSv1),
3353 options, verification settings, timeout settings.
3354
3355 my $rv = Net::SSLeay::new($ctx);
3356 # $ctx - value corresponding to openssl's SSL_CTX structure
3357 #
3358 # returns: value corresponding to openssl's SSL structure (0 on failure)
3359
3360 Check openssl doc <http://www.openssl.org/docs/ssl/SSL_new.html>
3361
3362 · accept
3363
3364 Waits for a TLS/SSL client to initiate the TLS/SSL handshake. The
3365 communication channel must already have been set and assigned to
3366 the ssl by setting an underlying BIO.
3367
3368 my $rv = Net::SSLeay::accept($ssl);
3369 # $ssl - value corresponding to openssl's SSL structure
3370 #
3371 # returns: 1 = success, 0 = handshake not successful, <0 = fatal error during handshake
3372
3373 Check openssl doc <http://www.openssl.org/docs/ssl/SSL_accept.html>
3374
3375 · add_client_CA
3376
3377 Adds the CA name extracted from cacert to the list of CAs sent to
3378 the client when requesting a client certificate for the chosen ssl,
3379 overriding the setting valid for ssl's SSL_CTX object.
3380
3381 my $rv = Net::SSLeay::add_client_CA($ssl, $x);
3382 # $ssl - value corresponding to openssl's SSL structure
3383 # $x - value corresponding to openssl's X509 structure
3384 #
3385 # returns: 1 on success, 0 on failure
3386
3387 Check openssl doc
3388 <http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html>
3389
3390 · callback_ctrl
3391
3392 ??? (more info needed)
3393
3394 my $rv = Net::SSLeay::callback_ctrl($ssl, $cmd, $fp);
3395 # $ssl - value corresponding to openssl's SSL structure
3396 # $cmd - (integer) command id
3397 # $fp - (function pointer) ???
3398 #
3399 # returns: ???
3400
3401 Check openssl doc
3402 <http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html>
3403
3404 · check_private_key
3405
3406 Checks the consistency of a private key with the corresponding
3407 certificate loaded into $ssl
3408
3409 my $rv = Net::SSLeay::check_private_key($ssl);
3410 # $ssl - value corresponding to openssl's SSL structure
3411 #
3412 # returns: 1 on success, otherwise check out the error stack to find out the reason
3413
3414 Check openssl doc
3415 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
3416
3417 · clear
3418
3419 Reset SSL object to allow another connection.
3420
3421 Net::SSLeay::clear($ssl);
3422 # $ssl - value corresponding to openssl's SSL structure
3423 #
3424 # returns: no return value
3425
3426 Check openssl doc <http://www.openssl.org/docs/ssl/SSL_clear.html>
3427
3428 · connect
3429
3430 Initiate the TLS/SSL handshake with an TLS/SSL server.
3431
3432 my $rv = Net::SSLeay::connect($ssl);
3433 # $ssl - value corresponding to openssl's SSL structure
3434 #
3435 # returns: 1 = success, 0 = handshake not successful, <0 = fatal error during handshake
3436
3437 Check openssl doc
3438 <http://www.openssl.org/docs/ssl/SSL_connect.html>
3439
3440 · copy_session_id
3441
3442 Copies the session structure fro $from to $to (+ also the private
3443 key and certificate associated with $from).
3444
3445 Net::SSLeay::copy_session_id($to, $from);
3446 # $to - value corresponding to openssl's SSL structure
3447 # $from - value corresponding to openssl's SSL structure
3448 #
3449 # returns: no return value
3450
3451 · ctrl
3452
3453 Internal handling function for SSL objects.
3454
3455 BEWARE: openssl doc says: This function should never be called
3456 directly!
3457
3458 my $rv = Net::SSLeay::ctrl($ssl, $cmd, $larg, $parg);
3459 # $ssl - value corresponding to openssl's SSL structure
3460 # $cmd - (integer) command id
3461 # $larg - (integer) long ???
3462 # $parg - (string/pointer) ???
3463 #
3464 # returns: (long) result of given command ???
3465
3466 For more details about valid $cmd values check "CTX_ctrl".
3467
3468 Check openssl doc
3469 <http://www.openssl.org/docs/ssl/SSL_CTX_ctrl.html>
3470
3471 · do_handshake
3472
3473 Will wait for a SSL/TLS handshake to take place. If the connection
3474 is in client mode, the handshake will be started. The handshake
3475 routines may have to be explicitly set in advance using either
3476 SSL_set_connect_state or SSL_set_accept_state(3).
3477
3478 my $rv = Net::SSLeay::do_handshake($ssl);
3479 # $ssl - value corresponding to openssl's SSL structure
3480 #
3481 # returns: 1 = success, 0 = handshake not successful, <0 = fatal error during handshake
3482
3483 Check openssl doc
3484 <http://www.openssl.org/docs/ssl/SSL_do_handshake.html>
3485
3486 · dup
3487
3488 Returns a duplicate of $ssl.
3489
3490 my $rv = Net::SSLeay::dup($ssl);
3491 # $ssl - value corresponding to openssl's SSL structure
3492 #
3493 # returns: value corresponding to openssl's SSL structure (0 on failure)
3494
3495 · free
3496
3497 Free an allocated SSL structure.
3498
3499 Net::SSLeay::free($ssl);
3500 # $ssl - value corresponding to openssl's SSL structure
3501 #
3502 # returns: no return value
3503
3504 Check openssl doc <http://www.openssl.org/docs/ssl/SSL_free.html>
3505
3506 · get0_param
3507
3508 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
3509 requires at least OpenSSL 1.0.2
3510
3511 Returns the current verification parameters.
3512
3513 my $vpm = Net::SSLeay::get0_param($ssl);
3514 # $ssl - value corresponding to openssl's SSL structure
3515 #
3516 # returns: value corresponding to openssl's X509_VERIFY_PARAM structure
3517
3518 Check openssl doc
3519 <https://www.openssl.org/docs/ssl/SSL_CTX_get0_param.html>
3520
3521 · get_SSL_CTX
3522
3523 Returns a pointer to the SSL_CTX object, from which $ssl was
3524 created with Net::SSLeay::new.
3525
3526 my $rv = Net::SSLeay::get_SSL_CTX($ssl);
3527 # $ssl - value corresponding to openssl's SSL structure
3528 #
3529 # returns: value corresponding to openssl's SSL_CTX structure (0 on failure)
3530
3531 Check openssl doc
3532 <http://www.openssl.org/docs/ssl/SSL_get_SSL_CTX.html>
3533
3534 · set_SSL_CTX
3535
3536 Sets the SSL_CTX the corresponds to an SSL session.
3537
3538 my $the_ssl_ctx = Net::SSLeay::set_SSL_CTX($ssl, $ssl_ctx);
3539 # $ssl - value corresponding to openssl's SSL structure
3540 # $ssl_ctx - Change the ssl object to the given ssl_ctx
3541 #
3542 # returns - the ssl_ctx
3543
3544 · get_app_data
3545
3546 Can be used to get application defined value/data.
3547
3548 my $rv = Net::SSLeay::get_app_data($ssl);
3549 # $ssl - value corresponding to openssl's SSL structure
3550 #
3551 # returns: string/buffer/pointer ???
3552
3553 · set_app_data
3554
3555 Can be used to set some application defined value/data.
3556
3557 my $rv = Net::SSLeay::set_app_data($ssl, $arg);
3558 # $ssl - value corresponding to openssl's SSL structure
3559 # $arg - (string/buffer/pointer ???) data
3560 #
3561 # returns: ???
3562
3563 · get_certificate
3564
3565 Gets X509 certificate from an established SSL connection.
3566
3567 my $rv = Net::SSLeay::get_certificate($ssl);
3568 # $ssl - value corresponding to openssl's SSL structure
3569 #
3570 # returns: value corresponding to openssl's X509 structure (0 on failure)
3571
3572 · get_cipher
3573
3574 Obtains the name of the currently used cipher.
3575
3576 my $rv = Net::SSLeay::get_cipher($ssl);
3577 # $ssl - value corresponding to openssl's SSL structure
3578 #
3579 # returns: (string) cipher name e.g. 'DHE-RSA-AES256-SHA' or '', when no session has been established.
3580
3581 Check openssl doc
3582 <http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html>
3583
3584 · get_cipher_bits
3585
3586 Obtain the number of secret/algorithm bits used.
3587
3588 my $rv = Net::SSLeay::get_cipher_bits($ssl);
3589 # $ssl - value corresponding to openssl's SSL structure
3590 #
3591 # returns: number of secret bits used by current cipher
3592
3593 Check openssl doc
3594 <http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html> and
3595 <http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html>
3596
3597 · get_cipher_list
3598
3599 Returns the name (string) of the SSL_CIPHER listed for $ssl with
3600 priority $n.
3601
3602 my $rv = Net::SSLeay::get_cipher_list($ssl, $n);
3603 # $ssl - value corresponding to openssl's SSL structure
3604 # $n - (integer) priority
3605 #
3606 # returns: (string) cipher name e.g. 'EDH-DSS-DES-CBC3-SHA' or '' in case of error
3607
3608 Call Net::SSLeay::get_cipher_list with priority starting from 0 to
3609 obtain the sorted list of available ciphers, until '' is returned:
3610
3611 my $priority = 0;
3612 while (my $c = Net::SSLeay::get_cipher_list($ssl, $priority)) {
3613 print "cipher[$priority] = $c\n";
3614 $priority++;
3615 }
3616
3617 Check openssl doc
3618 <http://www.openssl.org/docs/ssl/SSL_get_ciphers.html>
3619
3620 · get_client_CA_list
3621
3622 Returns the list of client CAs explicitly set for $ssl using
3623 "Net::SSleay::set_client_CA_list" or $ssl's SSL_CTX object with
3624 "Net::SSLeay::CTX_set_client_CA_list", when in server mode.
3625
3626 In client mode, returns the list of client CAs sent from the
3627 server, if any.
3628
3629 my $rv = Net::SSLeay::get_client_CA_list($ssl);
3630 # $ssl - value corresponding to openssl's SSL structure
3631 #
3632 # returns: value corresponding to openssl's STACK_OF(X509_NAME) structure (0 on failure)
3633
3634 Check openssl doc
3635 <http://www.openssl.org/docs/ssl/SSL_get_client_CA_list.html>
3636
3637 · get_current_cipher
3638
3639 Returns the cipher actually used.
3640
3641 my $rv = Net::SSLeay::get_current_cipher($ssl);
3642 # $ssl - value corresponding to openssl's SSL structure
3643 #
3644 # returns: value corresponding to openssl's SSL_CIPHER structure (0 on failure)
3645
3646 Check openssl doc
3647 <http://www.openssl.org/docs/ssl/SSL_get_current_cipher.html>
3648
3649 · get_default_timeout
3650
3651 Returns the default timeout value assigned to SSL_SESSION objects
3652 negotiated for the protocol valid for $ssl.
3653
3654 my $rv = Net::SSLeay::get_default_timeout($ssl);
3655 # $ssl - value corresponding to openssl's SSL structure
3656 #
3657 # returns: (long) timeout in seconds
3658
3659 Check openssl doc
3660 <http://www.openssl.org/docs/ssl/SSL_get_default_timeout.html>
3661
3662 · get_error
3663
3664 Returns a result code for a preceding call to "connect", "accept",
3665 "do_handshake", "read", "peek" or "write" on $ssl.
3666
3667 my $rv = Net::SSLeay::get_error($ssl, $ret);
3668 # $ssl - value corresponding to openssl's SSL structure
3669 # $ret - return value of preceding TLS/SSL I/O operation
3670 #
3671 # returns: result code, which is one of the following values:
3672 # 0 - SSL_ERROR_NONE
3673 # 1 - SSL_ERROR_SSL
3674 # 2 - SSL_ERROR_WANT_READ
3675 # 3 - SSL_ERROR_WANT_WRITE
3676 # 4 - SSL_ERROR_WANT_X509_LOOKUP
3677 # 5 - SSL_ERROR_SYSCALL
3678 # 6 - SSL_ERROR_ZERO_RETURN
3679 # 7 - SSL_ERROR_WANT_CONNECT
3680 # 8 - SSL_ERROR_WANT_ACCEPT
3681
3682 Check openssl doc
3683 <http://www.openssl.org/docs/ssl/SSL_get_error.html>
3684
3685 · get_ex_data
3686
3687 Is used to retrieve the information for $idx from $ssl.
3688
3689 my $rv = Net::SSLeay::get_ex_data($ssl, $idx);
3690 # $ssl - value corresponding to openssl's SSL structure
3691 # $idx - (integer) index for application specific data
3692 #
3693 # returns: pointer to ???
3694
3695 Check openssl doc
3696 <http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html>
3697
3698 · set_ex_data
3699
3700 Is used to store application data at $data for $idx into the $ssl
3701 object.
3702
3703 my $rv = Net::SSLeay::set_ex_data($ssl, $idx, $data);
3704 # $ssl - value corresponding to openssl's SSL structure
3705 # $idx - (integer) ???
3706 # $data - (pointer) ???
3707 #
3708 # returns: 1 on success, 0 on failure
3709
3710 Check openssl doc
3711 <http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html>
3712
3713 · get_ex_new_index
3714
3715 Is used to register a new index for application specific data.
3716
3717 my $rv = Net::SSLeay::get_ex_new_index($argl, $argp, $new_func, $dup_func, $free_func);
3718 # $argl - (long) ???
3719 # $argp - (pointer) ???
3720 # $new_func - function pointer ??? (CRYPTO_EX_new *)
3721 # $dup_func - function pointer ??? (CRYPTO_EX_dup *)
3722 # $free_func - function pointer ??? (CRYPTO_EX_free *)
3723 #
3724 # returns: (integer) ???
3725
3726 Check openssl doc
3727 <http://www.openssl.org/docs/ssl/SSL_get_ex_new_index.html>
3728
3729 · get_fd
3730
3731 Returns the file descriptor which is linked to $ssl.
3732
3733 my $rv = Net::SSLeay::get_fd($ssl);
3734 # $ssl - value corresponding to openssl's SSL structure
3735 #
3736 # returns: file descriptor (>=0) or -1 on failure
3737
3738 Check openssl doc <http://www.openssl.org/docs/ssl/SSL_get_fd.html>
3739
3740 · get_finished
3741
3742 Obtains the latest 'Finished' message sent to the peer. Return
3743 value is zero if there's been no Finished message yet. Default
3744 count is 2*EVP_MAX_MD_SIZE that is long enough for all possible
3745 Finish messages. If you supply a non-default count, the resulting
3746 return value may be longer than returned buf's length.
3747
3748 my $rv = Net::SSLeay::get_finished($ssl, $buf, $count);
3749 # $ssl - value corresponding to openssl's SSL structure
3750 # $buf - buffer where the returned data will be stored
3751 # $count - [optional] max size of return data - default is 2*EVP_MAX_MD_SIZE
3752 #
3753 # returns: length of latest Finished message
3754
3755 · get_peer_finished
3756
3757 Obtains the latest 'Finished' message expected from the peer.
3758 Parameters and return value are similar to get_finished().
3759
3760 my $rv = Net::SSLeay::get_peer_finished($ssl, $buf, $count);
3761 # $ssl - value corresponding to openssl's SSL structure
3762 # $buf - buffer where the returned data will be stored
3763 # $count - [optional] max size of return data - default is 2*EVP_MAX_MD_SIZE
3764 #
3765 # returns: length of latest Finished message
3766
3767 · get_keyblock_size
3768
3769 Gets the length of the TLS keyblock.
3770
3771 NOTE: Does not exactly correspond to any low level API function.
3772
3773 my $rv = Net::SSLeay::get_keyblock_size($ssl);
3774 # $ssl - value corresponding to openssl's SSL structure
3775 #
3776 # returns: keyblock size, -1 on error
3777
3778 · get_mode
3779
3780 Returns the mode (bitmask) set for $ssl.
3781
3782 my $rv = Net::SSLeay::get_mode($ssl);
3783 # $ssl - value corresponding to openssl's SSL structure
3784 #
3785 # returns: mode (bitmask)
3786
3787 To decode the return value (bitmask) see documentation for
3788 "CTX_get_mode".
3789
3790 Check openssl doc
3791 <http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html>
3792
3793 · set_mode
3794
3795 Adds the mode set via bitmask in $mode to $ssl. Options already set
3796 before are not cleared.
3797
3798 my $rv = Net::SSLeay::set_mode($ssl, $mode);
3799 # $ssl - value corresponding to openssl's SSL structure
3800 # $mode - mode (bitmask)
3801 #
3802 # returns: the new mode bitmask after adding $mode
3803
3804 For $mode bitmask details see "CTX_get_mode".
3805
3806 Check openssl doc
3807 <http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html>
3808
3809 · get_options
3810
3811 Returns the options (bitmask) set for $ssl.
3812
3813 my $rv = Net::SSLeay::get_options($ssl);
3814 # $ssl - value corresponding to openssl's SSL structure
3815 #
3816 # returns: options (bitmask)
3817
3818 To decode the return value (bitmask) see documentation for
3819 "CTX_get_options".
3820
3821 Check openssl doc
3822 <http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html>
3823
3824 · set_options
3825
3826 Adds the options set via bitmask in $options to $ssl. Options
3827 already set before are not cleared!
3828
3829 Net::SSLeay::set_options($ssl, $options);
3830 # $ssl - value corresponding to openssl's SSL structure
3831 # $options - options (bitmask)
3832 #
3833 # returns: the new options bitmask after adding $options
3834
3835 For $options bitmask details see "CTX_get_options".
3836
3837 Check openssl doc
3838 <http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html>
3839
3840 · get_peer_certificate
3841
3842 Get the X509 certificate of the peer.
3843
3844 my $rv = Net::SSLeay::get_peer_certificate($ssl);
3845 # $ssl - value corresponding to openssl's SSL structure
3846 #
3847 # returns: value corresponding to openssl's X509 structure (0 on failure)
3848
3849 Check openssl doc
3850 <http://www.openssl.org/docs/ssl/SSL_get_peer_certificate.html>
3851
3852 · get_peer_cert_chain
3853
3854 Get the certificate chain of the peer as an array of X509
3855 structures.
3856
3857 my @rv = Net::SSLeay::get_peer_cert_chain($ssl);
3858 # $ssl - value corresponding to openssl's SSL structure
3859 #
3860 # returns: list of X509 structures
3861
3862 Check openssl doc
3863 <http://www.openssl.org/docs/ssl/SSL_get_peer_certificate.html>
3864
3865 · get_quiet_shutdown
3866
3867 Returns the 'quiet shutdown' setting of ssl.
3868
3869 my $rv = Net::SSLeay::get_quiet_shutdown($ssl);
3870 # $ssl - value corresponding to openssl's SSL structure
3871 #
3872 # returns: (integer) current 'quiet shutdown' value
3873
3874 Check openssl doc
3875 <http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html>
3876
3877 · get_rbio
3878
3879 Get 'read' BIO linked to an SSL object $ssl.
3880
3881 my $rv = Net::SSLeay::get_rbio($ssl);
3882 # $ssl - value corresponding to openssl's SSL structure
3883 #
3884 # returns: value corresponding to openssl's BIO structure (0 on failure)
3885
3886 Check openssl doc
3887 <http://www.openssl.org/docs/ssl/SSL_get_rbio.html>
3888
3889 · get_read_ahead
3890
3891 my $rv = Net::SSLeay::get_read_ahead($ssl);
3892 # $ssl - value corresponding to openssl's SSL structure
3893 #
3894 # returns: (integer) read_ahead value
3895
3896 · set_read_ahead
3897
3898 Net::SSLeay::set_read_ahead($ssl, $val);
3899 # $ssl - value corresponding to openssl's SSL structure
3900 # $val - read_ahead value to be set
3901 #
3902 # returns: the original read_ahead value
3903
3904 · get_server_random
3905
3906 Returns internal SSLv3 server_random value.
3907
3908 Net::SSLeay::get_server_random($ssl);
3909 # $ssl - value corresponding to openssl's SSL structure
3910 #
3911 # returns: server_random value (binary data)
3912
3913 · get_client_random
3914
3915 NOTE: Does not exactly correspond to any low level API function
3916
3917 Returns internal SSLv3 client_random value.
3918
3919 Net::SSLeay::get_client_random($ssl);
3920 # $ssl - value corresponding to openssl's SSL structure
3921 #
3922 # returns: client_random value (binary data)
3923
3924 · export_keying_material
3925
3926 Returns a buffer of $req_len bytes of keying material based on the
3927 constant string $label using the masterkey and client and server
3928 random strings as described in draft-ietf-pppext-eap-ttls-01.txt
3929 and See rfc2716 If p is present, it will be concatenated before
3930 generating the keying material Returns undef on error
3931
3932 my $out = Net::SSLeay::export_keying_material($ssl, $req_len, $label, $p);
3933
3934 · get_session
3935
3936 Retrieve TLS/SSL session data used in $ssl. The reference count of
3937 the SSL_SESSION is NOT incremented.
3938
3939 my $rv = Net::SSLeay::get_session($ssl);
3940 # $ssl - value corresponding to openssl's SSL structure
3941 #
3942 # returns: value corresponding to openssl's SSL_SESSION structure (0 on failure)
3943
3944 Check openssl doc
3945 <http://www.openssl.org/docs/ssl/SSL_get_session.html>
3946
3947 · SSL_get0_session
3948
3949 The alias for "get_session" (note that the name is
3950 "SSL_get0_session" NOT "get0_session").
3951
3952 my $rv = Net::SSLeay::SSL_get0_session();
3953
3954 · get1_session
3955
3956 Returns a pointer to the SSL_SESSION actually used in $ssl. The
3957 reference count of the SSL_SESSION is incremented by 1.
3958
3959 my $rv = Net::SSLeay::get1_session($ssl);
3960 # $ssl - value corresponding to openssl's SSL structure
3961 #
3962 # returns: value corresponding to openssl's SSL_SESSION structure (0 on failure)
3963
3964 Check openssl doc
3965 <http://www.openssl.org/docs/ssl/SSL_get_session.html>
3966
3967 · get_shared_ciphers
3968
3969 Returns string with a list (colon ':' separated) of ciphers shared
3970 between client and server within SSL session $ssl.
3971
3972 my $rv = Net::SSLeay::get_shared_ciphers()
3973 #
3974 # returns: string like 'ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:...'
3975
3976 · get_shutdown
3977
3978 Returns the shutdown mode of $ssl.
3979
3980 my $rv = Net::SSLeay::get_shutdown($ssl);
3981 # $ssl - value corresponding to openssl's SSL structure
3982 #
3983 # returns: shutdown mode (bitmask) of ssl
3984
3985 #to decode the return value (bitmask) use:
3986 0 - No shutdown setting, yet
3987 1 - SSL_SENT_SHUTDOWN
3988 2 - SSL_RECEIVED_SHUTDOWN
3989
3990 Check openssl doc
3991 <http://www.openssl.org/docs/ssl/SSL_set_shutdown.html>
3992
3993 · get_ssl_method
3994
3995 Returns a function pointer to the TLS/SSL method set in $ssl.
3996
3997 my $rv = Net::SSLeay::get_ssl_method($ssl);
3998 # $ssl - value corresponding to openssl's SSL structure
3999 #
4000 # returns: value corresponding to openssl's SSL_METHOD structure (0 on failure)
4001
4002 Check openssl doc
4003 <http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html>
4004
4005 · get_state
4006
4007 Returns the SSL connection state.
4008
4009 my $rv = Net::SSLeay::get_state($ssl);
4010 # $ssl - value corresponding to openssl's SSL structure
4011 #
4012 # returns: (integer) state value
4013 # to decode the returned state check:
4014 # SSL_ST_* constants in openssl/ssl.h
4015 # SSL2_ST_* constants in openssl/ssl2.h
4016 # SSL23_ST_* constants in openssl/ssl23.h
4017 # SSL3_ST_* + DTLS1_ST_* constants in openssl/ssl3.h
4018
4019 · state
4020
4021 Exactly the same as "get_state".
4022
4023 my $rv = Net::SSLeay::state($ssl);
4024
4025 · set_state
4026
4027 Sets the SSL connection state.
4028
4029 Net::SSLeay::set_state($ssl,Net::SSLeay::SSL_ST_ACCEPT());
4030
4031 Not available with OpenSSL 1.1 and later.
4032
4033 · get_verify_depth
4034
4035 Returns the verification depth limit currently set in $ssl.
4036
4037 my $rv = Net::SSLeay::get_verify_depth($ssl);
4038 # $ssl - value corresponding to openssl's SSL structure
4039 #
4040 # returns: current depth or -1 if no limit has been explicitly set
4041
4042 Check openssl doc
4043 <http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html>
4044
4045 · set_verify_depth
4046
4047 Sets the maximum depth for the certificate chain verification that
4048 shall be allowed for $ssl.
4049
4050 Net::SSLeay::set_verify_depth($ssl, $depth);
4051 # $ssl - value corresponding to openssl's SSL structure
4052 # $depth - (integer) depth
4053 #
4054 # returns: no return value
4055
4056 Check openssl doc
4057 <http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html>
4058
4059 · get_verify_mode
4060
4061 Returns the verification mode (bitmask) currently set in $ssl.
4062
4063 my $rv = Net::SSLeay::get_verify_mode($ssl);
4064 # $ssl - value corresponding to openssl's SSL structure
4065 #
4066 # returns: mode (bitmask)
4067
4068 To decode the return value (bitmask) see documentation for
4069 "CTX_get_verify_mode".
4070
4071 Check openssl doc
4072 <http://www.openssl.org/docs/ssl/SSL_CTX_get_verify_mode.html>
4073
4074 · set_verify
4075
4076 Sets the verification flags for $ssl to be $mode and specifies the
4077 $verify_callback function to be used.
4078
4079 Net::SSLeay::set_verify($ssl, $mode, $callback);
4080 # $ssl - value corresponding to openssl's SSL structure
4081 # $mode - mode (bitmask)
4082 # $callback - [optional] reference to perl callback function
4083 #
4084 # returns: no return value
4085
4086 For $mode bitmask details see "CTX_get_verify_mode".
4087
4088 Check openssl doc
4089 <http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html>
4090
4091 · get_verify_result
4092
4093 Returns the result of the verification of the X509 certificate
4094 presented by the peer, if any.
4095
4096 my $rv = Net::SSLeay::get_verify_result($ssl);
4097 # $ssl - value corresponding to openssl's SSL structure
4098 #
4099 # returns: (integer)
4100 # 0 - X509_V_OK: ok
4101 # 2 - X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate
4102 # 3 - X509_V_ERR_UNABLE_TO_GET_CRL: unable to get certificate CRL
4103 # 4 - X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: unable to decrypt certificate's signature
4104 # 5 - X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: unable to decrypt CRL's signature
4105 # 6 - X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: unable to decode issuer public key
4106 # 7 - X509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure
4107 # 8 - X509_V_ERR_CRL_SIGNATURE_FAILURE: CRL signature failure
4108 # 9 - X509_V_ERR_CERT_NOT_YET_VALID: certificate is not yet valid
4109 # 10 - X509_V_ERR_CERT_HAS_EXPIRED: certificate has expired
4110 # 11 - X509_V_ERR_CRL_NOT_YET_VALID: CRL is not yet valid
4111 # 12 - X509_V_ERR_CRL_HAS_EXPIRED: CRL has expired
4112 # 13 - X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: format error in certificate's notBefore field
4113 # 14 - X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: format error in certificate's notAfter field
4114 # 15 - X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: format error in CRL's lastUpdate field
4115 # 16 - X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: format error in CRL's nextUpdate field
4116 # 17 - X509_V_ERR_OUT_OF_MEM: out of memory
4117 # 18 - X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self signed certificate
4118 # 19 - X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: self signed certificate in certificate chain
4119 # 20 - X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate
4120 # 21 - X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: unable to verify the first certificate
4121 # 22 - X509_V_ERR_CERT_CHAIN_TOO_LONG: certificate chain too long
4122 # 23 - X509_V_ERR_CERT_REVOKED: certificate revoked
4123 # 24 - X509_V_ERR_INVALID_CA: invalid CA certificate
4124 # 25 - X509_V_ERR_PATH_LENGTH_EXCEEDED: path length constraint exceeded
4125 # 26 - X509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose
4126 # 27 - X509_V_ERR_CERT_UNTRUSTED: certificate not trusted
4127 # 28 - X509_V_ERR_CERT_REJECTED: certificate rejected
4128 # 29 - X509_V_ERR_SUBJECT_ISSUER_MISMATCH: subject issuer mismatch
4129 # 30 - X509_V_ERR_AKID_SKID_MISMATCH: authority and subject key identifier mismatch
4130 # 31 - X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: authority and issuer serial number mismatch
4131 # 32 - X509_V_ERR_KEYUSAGE_NO_CERTSIGN:key usage does not include certificate signing
4132 # 50 - X509_V_ERR_APPLICATION_VERIFICATION: application verification failure
4133
4134 Check openssl doc
4135 <http://www.openssl.org/docs/ssl/SSL_get_verify_result.html>
4136
4137 · set_verify_result
4138
4139 Override result of peer certificate verification.
4140
4141 Net::SSLeay::set_verify_result($ssl, $v);
4142 # $ssl - value corresponding to openssl's SSL structure
4143 # $v - (integer) result value
4144 #
4145 # returns: no return value
4146
4147 For more info about valid return values see "get_verify_result"
4148
4149 Check openssl doc
4150 <http://www.openssl.org/docs/ssl/SSL_set_verify_result.html>
4151
4152 · get_wbio
4153
4154 Get 'write' BIO linked to an SSL object $ssl.
4155
4156 my $rv = Net::SSLeay::get_wbio($ssl);
4157 # $ssl - value corresponding to openssl's SSL structure
4158 #
4159 # returns: value corresponding to openssl's BIO structure (0 on failure)
4160
4161 Check openssl doc
4162 <http://www.openssl.org/docs/ssl/SSL_get_rbio.html>
4163
4164 · load_client_CA_file
4165
4166 Load X509 certificates from file (PEM formatted).
4167
4168 my $rv = Net::SSLeay::load_client_CA_file($file);
4169 # $file - (string) file name
4170 #
4171 # returns: value corresponding to openssl's STACK_OF(X509_NAME) structure (0 on failure)
4172
4173 Check openssl doc
4174 <http://www.openssl.org/docs/ssl/SSL_load_client_CA_file.html>
4175
4176 · clear_num_renegotiations
4177
4178 Executes SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS command on $ssl.
4179
4180 my $rv = Net::SSLeay::clear_num_renegotiations($ssl);
4181 # $ssl - value corresponding to openssl's SSL structure
4182 #
4183 # returns: command result
4184
4185 · need_tmp_RSA
4186
4187 Executes SSL_CTRL_NEED_TMP_RSA command on $ssl.
4188
4189 my $rv = Net::SSLeay::need_tmp_RSA($ssl);
4190 # $ssl - value corresponding to openssl's SSL structure
4191 #
4192 # returns: command result
4193
4194 Not available with OpenSSL 1.1 and later.
4195
4196 · num_renegotiations
4197
4198 Executes SSL_CTRL_GET_NUM_RENEGOTIATIONS command on $ssl.
4199
4200 my $rv = Net::SSLeay::num_renegotiations($ssl);
4201 # $ssl - value corresponding to openssl's SSL structure
4202 #
4203 # returns: command result
4204
4205 · total_renegotiations
4206
4207 Executes SSL_CTRL_GET_TOTAL_RENEGOTIATIONS command on $ssl.
4208
4209 my $rv = Net::SSLeay::total_renegotiations($ssl);
4210 # $ssl - value corresponding to openssl's SSL structure
4211 #
4212 # returns: command result
4213
4214 · peek
4215
4216 Copies $max bytes from the specified $ssl into the returned value.
4217 In contrast to the "Net::SSLeay::read()" function, the data in the
4218 SSL buffer is unmodified after the SSL_peek() operation.
4219
4220 Net::SSLeay::peek($ssl, $max);
4221 # $ssl - value corresponding to openssl's SSL structure
4222 # $max - [optional] max bytes to peek (integer) - default is 32768
4223 #
4224 # in scalar context: data read from the TLS/SSL connection, undef on error
4225 # in list context: two-item array consisting of data read (undef on error),
4226 # and return code from SSL_read().
4227
4228 · pending
4229
4230 Obtain number of readable bytes buffered in $ssl object.
4231
4232 my $rv = Net::SSLeay::pending($ssl);
4233 # $ssl - value corresponding to openssl's SSL structure
4234 #
4235 # returns: the number of bytes pending
4236
4237 Check openssl doc
4238 <http://www.openssl.org/docs/ssl/SSL_pending.html>
4239
4240 · read
4241
4242 Tries to read $max bytes from the specified $ssl.
4243
4244 my $got = Net::SSLeay::read($ssl, $max);
4245 my($got, $rv) = Net::SSLeay::read($ssl, $max);
4246 # $ssl - value corresponding to openssl's SSL structure
4247 # $max - [optional] max bytes to read (integer) - default is 32768
4248 #
4249 # returns:
4250 # in scalar context: data read from the TLS/SSL connection, undef on error
4251 # in list context: two-item array consisting of data read (undef on error),
4252 # and return code from SSL_read().
4253
4254 Check openssl doc <http://www.openssl.org/docs/ssl/SSL_read.html>
4255
4256 · renegotiate
4257
4258 Turn on flags for renegotiation so that renegotiation will happen
4259
4260 my $rv = Net::SSLeay::renegotiate($ssl);
4261 # $ssl - value corresponding to openssl's SSL structure
4262 #
4263 # returns: 1 on success, 0 on failure
4264
4265 · rstate_string
4266
4267 Returns a 2 letter string indicating the current read state of the
4268 SSL object $ssl.
4269
4270 my $rv = Net::SSLeay::rstate_string($ssl);
4271 # $ssl - value corresponding to openssl's SSL structure
4272 #
4273 # returns: 2-letter string
4274
4275 Check openssl doc
4276 <http://www.openssl.org/docs/ssl/SSL_rstate_string.html>
4277
4278 · rstate_string_long
4279
4280 Returns a string indicating the current read state of the SSL
4281 object ssl.
4282
4283 my $rv = Net::SSLeay::rstate_string_long($ssl);
4284 # $ssl - value corresponding to openssl's SSL structure
4285 #
4286 # returns: string with current state
4287
4288 Check openssl doc
4289 <http://www.openssl.org/docs/ssl/SSL_rstate_string.html>
4290
4291 · session_reused
4292
4293 Query whether a reused session was negotiated during handshake.
4294
4295 my $rv = Net::SSLeay::session_reused($ssl);
4296 # $ssl - value corresponding to openssl's SSL structure
4297 #
4298 # returns: 0 - new session was negotiated; 1 - session was reused.
4299
4300 Check openssl doc
4301 <http://www.openssl.org/docs/ssl/SSL_session_reused.html>
4302
4303 · set1_param
4304
4305 Applies X509 verification parameters $vpm on $ssl
4306
4307 my $rv = Net::SSLeay::set1_param($ssl, $vpm);
4308 # $ssl - value corresponding to openssl's SSL structure
4309 # $vpm - value corresponding to openssl's X509_VERIFY_PARAM structure
4310 #
4311 # returns: 1 on success, 0 on failure
4312
4313 · set_accept_state
4314
4315 Sets $ssl to work in server mode.
4316
4317 Net::SSLeay::set_accept_state($ssl);
4318 # $ssl - value corresponding to openssl's SSL structure
4319 #
4320 # returns: no return value
4321
4322 Check openssl doc
4323 <http://www.openssl.org/docs/ssl/SSL_set_connect_state.html>
4324
4325 · set_bio
4326
4327 Connects the BIOs $rbio and $wbio for the read and write operations
4328 of the TLS/SSL (encrypted) side of $ssl.
4329
4330 Net::SSLeay::set_bio($ssl, $rbio, $wbio);
4331 # $ssl - value corresponding to openssl's SSL structure
4332 # $rbio - value corresponding to openssl's BIO structure
4333 # $wbio - value corresponding to openssl's BIO structure
4334 #
4335 # returns: no return value
4336
4337 Check openssl doc
4338 <http://www.openssl.org/docs/ssl/SSL_set_bio.html>
4339
4340 · set_cipher_list
4341
4342 Sets the list of ciphers only for ssl.
4343
4344 my $rv = Net::SSLeay::set_cipher_list($ssl, $str);
4345 # $ssl - value corresponding to openssl's SSL structure
4346 # $str - (string) cipher list e.g. '3DES:+RSA'
4347 #
4348 # returns: 1 if any cipher could be selected and 0 on complete failure
4349
4350 Check openssl doc
4351 <http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html>
4352
4353 · set_client_CA_list
4354
4355 Sets the list of CAs sent to the client when requesting a client
4356 certificate for the chosen $ssl, overriding the setting valid for
4357 $ssl's SSL_CTX object.
4358
4359 my $rv = Net::SSLeay::set_client_CA_list($ssl, $list);
4360 # $ssl - value corresponding to openssl's SSL structure
4361 # $list - value corresponding to openssl's STACK_OF(X509_NAME) structure
4362 #
4363 # returns: no return value
4364
4365 Check openssl doc
4366 <http://www.openssl.org/docs/ssl/SSL_CTX_set_client_CA_list.html>
4367
4368 · set_connect_state
4369
4370 Sets $ssl to work in client mode.
4371
4372 Net::SSLeay::set_connect_state($ssl);
4373 # $ssl - value corresponding to openssl's SSL structure
4374 #
4375 # returns: no return value
4376
4377 Check openssl doc
4378 <http://www.openssl.org/docs/ssl/SSL_set_connect_state.html>
4379
4380 · set_fd
4381
4382 Sets the file descriptor $fd as the input/output facility for the
4383 TLS/SSL (encrypted) side of $ssl, $fd will typically be the socket
4384 file descriptor of a network connection.
4385
4386 my $rv = Net::SSLeay::set_fd($ssl, $fd);
4387 # $ssl - value corresponding to openssl's SSL structure
4388 # $fd - (integer) file handle (got via perl's fileno)
4389 #
4390 # returns: 1 on success, 0 on failure
4391
4392 Check openssl doc <http://www.openssl.org/docs/ssl/SSL_set_fd.html>
4393
4394 · set_psk_client_callback
4395
4396 Sets the psk client callback.
4397
4398 Net::SSLeay::set_psk_client_callback($ssl, sub { my $hint = shift; return ($identity, $key) } );
4399 # $ssl - value corresponding to openssl's SSL structure
4400 # $hint - PSK identity hint send by the server
4401 # $identity - PSK identity
4402 # $key - PSK key, hex string without the leading '0x', e.g. 'deadbeef'
4403 #
4404 # returns: no return value
4405
4406 Check openssl doc
4407 <http://www.openssl.org/docs/ssl/SSL_set_psk_client_callback.html>
4408
4409 · set_rfd
4410
4411 Sets the file descriptor $fd as the input (read) facility for the
4412 TLS/SSL (encrypted) side of $ssl.
4413
4414 my $rv = Net::SSLeay::set_rfd($ssl, $fd);
4415 # $ssl - value corresponding to openssl's SSL structure
4416 # $fd - (integer) file handle (got via perl's fileno)
4417 #
4418 # returns: 1 on success, 0 on failure
4419
4420 Check openssl doc <http://www.openssl.org/docs/ssl/SSL_set_fd.html>
4421
4422 · set_wfd
4423
4424 my $rv = Net::SSLeay::set_wfd($ssl, $fd);
4425 # $ssl - value corresponding to openssl's SSL structure
4426 # $fd - (integer) file handle (got via perl's fileno)
4427 #
4428 # returns: 1 on success, 0 on failure
4429
4430 Check openssl doc <http://www.openssl.org/docs/ssl/SSL_set_fd.html>
4431
4432 · set_info_callback
4433
4434 Sets the callback function, that can be used to obtain state
4435 information for $ssl during connection setup and use. When
4436 callback is undef, the callback setting currently valid for ctx is
4437 used.
4438
4439 Net::SSLeay::set_info_callback($ssl, $cb, [$data]);
4440 # $ssl - value corresponding to openssl's SSL structure
4441 # $cb - sub { my ($ssl,$where,$ret,$data) = @_; ... }
4442 #
4443 # returns: no return value
4444
4445 Check openssl doc
4446 <http://www.openssl.org/docs/ssl/SSL_CTX_set_info_callback.html>
4447
4448 · CTX_set_info_callback
4449
4450 Sets the callback function on ctx, that can be used to obtain state
4451 information during ssl connection setup and use. When callback is
4452 undef, an existing callback will be disabled.
4453
4454 Net::SSLeay::CTX_set_info_callback($ssl, $cb, [$data]);
4455 # $ssl - value corresponding to openssl's SSL structure
4456 # $cb - sub { my ($ssl,$where,$ret,$data) = @_; ... }
4457 #
4458 # returns: no return value
4459
4460 Check openssl doc
4461 <http://www.openssl.org/docs/ssl/SSL_CTX_set_info_callback.html>
4462
4463 · set_pref_cipher
4464
4465 Sets the list of available ciphers for $ssl using the control
4466 string $str.
4467
4468 my $rv = Net::SSLeay::set_pref_cipher($ssl, $str);
4469 # $ssl - value corresponding to openssl's SSL structure
4470 # $str - (string) cipher list e.g. '3DES:+RSA'
4471 #
4472 # returns: 1 if any cipher could be selected and 0 on complete failure
4473
4474 Check openssl doc
4475 <http://www.openssl.org/docs/ssl/SSL_CTX_set_cipher_list.html>
4476
4477 · CTX_set_psk_client_callback
4478
4479 Sets the psk client callback.
4480
4481 Net::SSLeay::CTX_set_psk_client_callback($ssl, sub { my $hint = shift; return ($identity, $key) } );
4482 # $ssl - value corresponding to openssl's SSL structure
4483 # $hint - PSK identity hint send by the server
4484 # $identity - PSK identity
4485 # $key - PSK key, hex string without the leading '0x', e.g. 'deadbeef'
4486 #
4487 # returns: no return value
4488
4489 Check openssl doc
4490 <http://www.openssl.org/docs/ssl/SSL_CTX_set_psk_client_callback.html>
4491
4492 · set_purpose
4493
4494 my $rv = Net::SSLeay::set_purpose($ssl, $purpose);
4495 # $ssl - value corresponding to openssl's SSL structure
4496 # $purpose - (integer) purpose identifier
4497 #
4498 # returns: 1 on success, 0 on failure
4499
4500 For more info about available $purpose identifiers see
4501 "CTX_set_purpose".
4502
4503 · set_quiet_shutdown
4504
4505 Sets the 'quiet shutdown' flag for $ssl to be $mode.
4506
4507 Net::SSLeay::set_quiet_shutdown($ssl, $mode);
4508 # $ssl - value corresponding to openssl's SSL structure
4509 # $mode - 0 or 1
4510 #
4511 # returns: no return value
4512
4513 Check openssl doc
4514 <http://www.openssl.org/docs/ssl/SSL_CTX_set_quiet_shutdown.html>
4515
4516 · set_session
4517
4518 Set a TLS/SSL session to be used during TLS/SSL connect.
4519
4520 my $rv = Net::SSLeay::set_session($to, $ses);
4521 # $to - value corresponding to openssl's SSL structure
4522 # $ses - value corresponding to openssl's SSL_SESSION structure
4523 #
4524 # returns: 1 on success, 0 on failure
4525
4526 Check openssl doc
4527 <http://www.openssl.org/docs/ssl/SSL_set_session.html>
4528
4529 · set_session_id_context
4530
4531 Sets the context $sid_ctx of length $sid_ctx_len within which a
4532 session can be reused for the $ssl object.
4533
4534 my $rv = Net::SSLeay::set_session_id_context($ssl, $sid_ctx, $sid_ctx_len);
4535 # $ssl - value corresponding to openssl's SSL structure
4536 # $sid_ctx - data buffer
4537 # $sid_ctx_len - length of data in $sid_ctx
4538 #
4539 # returns: 1 on success, 0 on failure
4540
4541 Check openssl doc
4542 <http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html>
4543
4544 · set_session_secret_cb
4545
4546 Setup pre-shared secret session resumption function.
4547
4548 Net::SSLeay::set_session_secret_cb($ssl, $func, $data);
4549 # $ssl - value corresponding to openssl's SSL structure
4550 # $func - perl reference to callback function
4551 # $data - [optional] data that will be passed to callback function when invoked
4552 #
4553 # returns: no return value
4554
4555 The callback function will be called like:
4556 callback_function($secret, $ciphers, $pref_cipher, $data);
4557
4558 # $secret is the current master session key, usually all 0s at the
4559 beginning of a session # $ciphers is ref to an array of peer cipher
4560 names # $pref_cipher is a ref to an index into the list of cipher
4561 names of # the preferred cipher. Set it if you want to specify a
4562 preferred cipher # $data is the data passed to
4563 set_session_secret_cb
4564
4565 The callback function should return 1 if it likes the suggested
4566 cipher (or has selected an alternative by setting pref_cipher),
4567 else it should return 0 (in which case OpenSSL will select its own
4568 preferred cipher).
4569
4570 With OpenSSL 1.1 and later, callback_function can change the master
4571 key for the session by altering $secret and returning 1.
4572
4573 · CTX_set_tlsext_ticket_getkey_cb
4574
4575 Setup encryption for TLS session tickets (stateless session reuse).
4576
4577 Net::SSLeay::CTX_set_tlsext_ticket_getkey_cb($ctx, $func, $data);
4578 # $ctx - value corresponding to openssl's SSL_CTX structure
4579 # $func - perl reference to callback function
4580 # $data - [optional] data that will be passed to callback function when invoked
4581 #
4582 # returns: no return value
4583
4584 The callback function will be called like:
4585 getkey($data,[$key_name]) -> ($key,$current_key_name)
4586
4587 # $data is the data passed to set_session_secret_cb # $key_name is
4588 the name of the key OpenSSL has extracted from the session ticket #
4589 $key is the requested key for ticket encryption + HMAC #
4590 $current_key_name is the name for the currently valid key
4591
4592 OpenSSL will call the function without a key name if it generates a
4593 new ticket. It then needs the callback to return the
4594 encryption+HMAC key and an identifier (key name) for this key.
4595
4596 When OpenSSL gets a session ticket from the client it extracts the
4597 key name and calls the callback with this name as argument. It then
4598 expects the callback to return the encryption+HMAC key matching the
4599 requested key name and and also the key name which should be used
4600 at the moment. If the requested key name and the returned key name
4601 differ it means that this session ticket was created with an
4602 expired key and need to be renewed. In this case OpenSSL will call
4603 the callback again with no key name to create a new session ticket
4604 based on the old one.
4605
4606 The key must be at least 32 byte of random data which can be
4607 created with RAND_bytes. Internally the first 16 byte are used as
4608 key in AES-128 encryption while the next 16 byte are used for the
4609 SHA-256 HMAC. The key name are binary data and must be exactly 16
4610 byte long.
4611
4612 Example:
4613
4614 Net::SSLeay::RAND_bytes(my $oldkey,32);
4615 Net::SSLeay::RAND_bytes(my $newkey,32);
4616 my $oldkey_name = pack("a16",'oldsecret');
4617 my $newkey_name = pack("a16",'newsecret');
4618
4619 my @keys = (
4620 [ $newkey_name, $newkey ], # current active key
4621 [ $oldkey_name, $oldkey ], # already expired
4622 );
4623
4624 Net::SSLeay::CTX_set_tlsext_ticket_getkey_cb($server2->_ctx, sub {
4625 my ($mykeys,$name) = @_;
4626
4627 # return (current_key, current_key_name) if no name given
4628 return ($mykeys->[0][1],$mykeys->[0][0]) if ! $name;
4629
4630 # return (matching_key, current_key_name) if we find a key matching
4631 # the given name
4632 for(my $i = 0; $i<@$mykeys; $i++) {
4633 next if $name ne $mykeys->[$i][0];
4634 return ($mykeys->[$i][1],$mykeys->[0][0]);
4635 }
4636
4637 # no matching key found
4638 return;
4639 },\@keys);
4640
4641 This function is based on the OpenSSL function
4642 SSL_CTX_set_tlsext_ticket_key_cb but provides a simpler to use
4643 interface. For more information see
4644 <http://www.openssl.org/docs/ssl/SSL_CTX_set_tlsext_ticket_key_cb.html>
4645
4646 · set_session_ticket_ext_cb
4647
4648 Setup callback for TLS session tickets (stateless session reuse).
4649
4650 Net::SSLeay::set_session_ticket_ext_cb($ssl, $func, $data);
4651 # $ssl - value corresponding to openssl's SSL structure
4652 # $func - perl reference to callback function
4653 # $data - [optional] data that will be passed to callback function when invoked
4654 #
4655 # returns: no return value
4656
4657 The callback function will be called like:
4658 getticket($ssl,$ticket,$data) -> $return_value
4659
4660 # $ssl is a value corresponding to openssl's SSL structure #
4661 $ticket is a value of received TLS session ticket (can also be
4662 empty) # $data is the data passed to set_session_ticket_ext_cb #
4663 $return_value is either 0 (failure) or 1 (success)
4664
4665 This function is based on the OpenSSL function
4666 SSL_set_session_ticket_ext_cb.
4667
4668 · set_session_ticket_ext
4669
4670 Set TLS session ticket (stateless session reuse).
4671
4672 Net::SSLeay::set_session_ticket_ext($ssl, $ticket);
4673 # $ssl - value corresponding to openssl's SSL structure
4674 # $ticket - is a value of TLS session ticket which client will send (can also be empty string)
4675 #
4676 # returns: no return value
4677
4678 The callback function will be called like:
4679 getticket($ssl,$ticket,$data) -> $return_value
4680
4681 # $ssl is a value corresponding to openssl's SSL structure #
4682 $ticket is a value of received TLS session ticket (can also be
4683 empty) # $data is the data passed to set_session_ticket_ext_cb #
4684 $return_value is either 0 (failure) or 1 (success)
4685
4686 This function is based on the OpenSSL function
4687 SSL_set_session_ticket_ext_cb.
4688
4689 · CTX_set_num_tickets
4690
4691 COMPATIBILITY: not available in Net-SSLeay-1.85 and before;
4692 requires at least OpenSSL 1.1.1
4693
4694 Set number of session tickets that will be sent to a client.
4695
4696 my $rv = Net::SSLeay::CTX_set_num_tickets($ctx, $number_of_tickets);
4697 # $ctx - value corresponding to openssl's SSL_CTX structure
4698 # $number_of_tickets - number of tickets to send
4699 # returns: 1 on success, 0 on failure
4700
4701 Set to zero if you do not no want to support a session resumption.
4702
4703 · CTX_get_num_tickets
4704
4705 COMPATIBILITY: not available in Net-SSLeay-1.85 and before;
4706 requires at least OpenSSL 1.1.1
4707
4708 Get number of session tickets that will be sent to a client.
4709
4710 my $number_of_tickets = Net::SSLeay::CTX_get_num_tickets($ctx);
4711 # $ctx - value corresponding to openssl's SSL_CTX structure
4712 # returns: number of tickets to send
4713
4714 · set_num_tickets
4715
4716 COMPATIBILITY: not available in Net-SSLeay-1.85 and before;
4717 requires at least OpenSSL 1.1.1
4718
4719 Set number of session tickets that will be sent to a client.
4720
4721 my $rv = Net::SSLeay::set_num_tickets($ssl, $number_of_tickets);
4722 # $ssl - value corresponding to openssl's SSL structure
4723 # $number_of_tickets - number of tickets to send
4724 # returns: 1 on success, 0 on failure
4725
4726 Set to zero if you do not no want to support a session resumption.
4727
4728 · get_num_tickets
4729
4730 COMPATIBILITY: not available in Net-SSLeay-1.85 and before;
4731 requires at least OpenSSL 1.1.1
4732
4733 Get number of session tickets that will be sent to a client.
4734
4735 my $number_of_tickets = Net::SSLeay::get_num_tickets($ctx);
4736 # $ctx - value corresponding to openssl's SSL structure
4737 # returns: number of tickets to send
4738
4739 · set_shutdown
4740
4741 Sets the shutdown state of $ssl to $mode.
4742
4743 Net::SSLeay::set_shutdown($ssl, $mode);
4744 # $ssl - value corresponding to openssl's SSL structure
4745 # $mode - (integer) shutdown mode:
4746 # 0 - No shutdown
4747 # 1 - SSL_SENT_SHUTDOWN
4748 # 2 - SSL_RECEIVED_SHUTDOWN
4749 # 3 - SSL_RECEIVED_SHUTDOWN+SSL_SENT_SHUTDOWN
4750 #
4751 # returns: no return value
4752
4753 Check openssl doc
4754 <http://www.openssl.org/docs/ssl/SSL_set_shutdown.html>
4755
4756 · set_ssl_method
4757
4758 Sets a new TLS/SSL method for a particular $ssl object.
4759
4760 my $rv = Net::SSLeay::set_ssl_method($ssl, $method);
4761 # $ssl - value corresponding to openssl's SSL structure
4762 # $method - value corresponding to openssl's SSL_METHOD structure
4763 #
4764 # returns: 1 on success, 0 on failure
4765
4766 Check openssl doc
4767 <http://www.openssl.org/docs/ssl/SSL_CTX_set_ssl_version.html>
4768
4769 · set_tmp_dh
4770
4771 Sets DH parameters to be used to be $dh.
4772
4773 my $rv = Net::SSLeay::set_tmp_dh($ssl, $dh);
4774 # $ssl - value corresponding to openssl's SSL structure
4775 # $dh - value corresponding to openssl's DH structure
4776 #
4777 # returns: 1 on success, 0 on failure
4778
4779 Check openssl doc
4780 <http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html>
4781
4782 · set_tmp_dh_callback
4783
4784 Sets the callback function for $ssl to be used when a DH parameters
4785 are required to $dh_cb.
4786
4787 ??? (does this function really work?)
4788
4789 Net::SSLeay::set_tmp_dh_callback($ssl, $dh);
4790 # $ssl - value corresponding to openssl's SSL structure
4791 # $dh_cb - pointer to function ???
4792 #
4793 # returns: no return value
4794
4795 Check openssl doc
4796 <http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_dh_callback.html>
4797
4798 · set_tmp_rsa
4799
4800 Sets the temporary/ephemeral RSA key to be used in $ssl to be $rsa.
4801
4802 my $rv = Net::SSLeay::set_tmp_rsa($ssl, $rsa);
4803 # $ssl - value corresponding to openssl's SSL structure
4804 # $rsa - value corresponding to openssl's RSA structure
4805 #
4806 # returns: 1 on success, 0 on failure
4807
4808 Example:
4809
4810 $rsakey = Net::SSLeay::RSA_generate_key();
4811 Net::SSLeay::set_tmp_rsa($ssl, $rsakey);
4812 Net::SSLeay::RSA_free($rsakey);
4813
4814 Check openssl doc
4815 <http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html>
4816
4817 · set_tmp_rsa_callback
4818
4819 Sets the callback function for $ssl to be used when a
4820 temporary/ephemeral RSA key is required to $tmp_rsa_callback.
4821
4822 ??? (does this function really work?)
4823
4824 Net::SSLeay::set_tmp_rsa_callback($ssl, $tmp_rsa_callback);
4825 # $ssl - value corresponding to openssl's SSL structure
4826 # $tmp_rsa_callback - (function pointer) ???
4827 #
4828 # returns: no return value
4829
4830 Check openssl doc
4831 <http://www.openssl.org/docs/ssl/SSL_CTX_set_tmp_rsa_callback.html>
4832
4833 · set_trust
4834
4835 my $rv = Net::SSLeay::set_trust($ssl, $trust);
4836 # $ssl - value corresponding to openssl's SSL structure
4837 # $trust - (integer) trust identifier
4838 #
4839 # returns: the original value
4840
4841 For more details about $trust values see "CTX_set_trust".
4842
4843 · shutdown
4844
4845 Shuts down an active TLS/SSL connection. It sends the 'close
4846 notify' shutdown alert to the peer.
4847
4848 my $rv = Net::SSLeay::shutdown($ssl);
4849 # $ssl - value corresponding to openssl's SSL structure
4850 #
4851 # returns: 1 - shutdown was successfully completed
4852 # 0 - shutdown is not yet finished,
4853 # -1 - shutdown was not successful
4854
4855 Check openssl doc
4856 <http://www.openssl.org/docs/ssl/SSL_shutdown.html>
4857
4858 · state_string
4859
4860 Returns a 6 letter string indicating the current state of the SSL
4861 object $ssl.
4862
4863 my $rv = Net::SSLeay::state_string($ssl);
4864 # $ssl - value corresponding to openssl's SSL structure
4865 #
4866 # returns: 6-letter string
4867
4868 Check openssl doc
4869 <http://www.openssl.org/docs/ssl/SSL_state_string.html>
4870
4871 · state_string_long
4872
4873 Returns a string indicating the current state of the SSL object
4874 $ssl.
4875
4876 my $rv = Net::SSLeay::state_string_long($ssl);
4877 # $ssl - value corresponding to openssl's SSL structure
4878 #
4879 # returns: state strings
4880
4881 Check openssl doc
4882 <http://www.openssl.org/docs/ssl/SSL_state_string.html>
4883
4884 · set_default_passwd_cb
4885
4886 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
4887 requires at least OpenSSL 1.1.0f. Not needed with LibreSSL.
4888
4889 Sets the default password callback called when loading/storing a
4890 PEM certificate with encryption for $ssl.
4891
4892 Net::SSLeay::set_default_passwd_cb($ssl, $func);
4893 # $ssl - value corresponding to openssl's SSL structure
4894 # $func - perl reference to callback function
4895 #
4896 # returns: no return value
4897
4898 Check openssl doc
4899 <http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html>
4900
4901 · set_default_passwd_cb_userdata
4902
4903 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
4904 requires at least OpenSSL 1.1.0f. Not needed with LibreSSL.
4905
4906 Sets a pointer to userdata which will be provided to the password
4907 callback of $ssl on invocation.
4908
4909 Net::SSLeay::set_default_passwd_cb_userdata($ssl, $userdata);
4910 # $ssl - value corresponding to openssl's SSL structure
4911 # $userdata - data that will be passed to callback function when invoked
4912 #
4913 # returns: no return value
4914
4915 Check openssl doc
4916 <http://www.openssl.org/docs/ssl/SSL_CTX_set_default_passwd_cb.html>
4917
4918 · use_PrivateKey
4919
4920 Adds $pkey as private key to $ssl.
4921
4922 my $rv = Net::SSLeay::use_PrivateKey($ssl, $pkey);
4923 # $ssl - value corresponding to openssl's SSL structure
4924 # $pkey - value corresponding to openssl's EVP_PKEY structure
4925 #
4926 # returns: 1 on success, otherwise check out the error stack to find out the reason
4927
4928 Check openssl doc
4929 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
4930
4931 · use_PrivateKey_ASN1
4932
4933 Adds the private key of type $pk stored in $data to $ssl.
4934
4935 my $rv = Net::SSLeay::use_PrivateKey_ASN1($pk, $ssl, $d, $len);
4936 # $pk - (integer) key type, NID of corresponding algorithm
4937 # $ssl - value corresponding to openssl's SSL structure
4938 # $data - key data (binary)
4939 # $len - length of $data
4940 #
4941 # returns: 1 on success, otherwise check out the error stack to find out the reason
4942
4943 Check openssl doc
4944 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
4945
4946 · use_PrivateKey_file
4947
4948 Adds the first private key found in $file to $ssl.
4949
4950 my $rv = Net::SSLeay::use_PrivateKey_file($ssl, $file, $type);
4951 # $ssl - value corresponding to openssl's SSL structure
4952 # $file - (string) file name
4953 # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
4954 #
4955 # returns: 1 on success, otherwise check out the error stack to find out the reason
4956
4957 Check openssl doc
4958 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
4959
4960 · use_RSAPrivateKey
4961
4962 Adds $rsa as RSA private key to $ssl.
4963
4964 my $rv = Net::SSLeay::use_RSAPrivateKey($ssl, $rsa);
4965 # $ssl - value corresponding to openssl's SSL structure
4966 # $rsa - value corresponding to openssl's RSA structure
4967 #
4968 # returns: 1 on success, otherwise check out the error stack to find out the reason
4969
4970 Check openssl doc
4971 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
4972
4973 · use_RSAPrivateKey_ASN1
4974
4975 Adds RSA private key stored in $data to $ssl.
4976
4977 my $rv = Net::SSLeay::use_RSAPrivateKey_ASN1($ssl, $data, $len);
4978 # $ssl - value corresponding to openssl's SSL structure
4979 # $data - key data (binary)
4980 # $len - length of $data
4981 #
4982 # returns: 1 on success, otherwise check out the error stack to find out the reason
4983
4984 Check openssl doc
4985 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
4986
4987 · use_RSAPrivateKey_file
4988
4989 Adds the first RSA private key found in $file to $ssl.
4990
4991 my $rv = Net::SSLeay::use_RSAPrivateKey_file($ssl, $file, $type);
4992 # $ssl - value corresponding to openssl's SSL structure
4993 # $file - (string) file name
4994 # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
4995 #
4996 # returns: 1 on success, otherwise check out the error stack to find out the reason
4997
4998 Check openssl doc
4999 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
5000
5001 · use_certificate
5002
5003 Loads the certificate $x into $ssl.
5004
5005 my $rv = Net::SSLeay::use_certificate($ssl, $x);
5006 # $ssl - value corresponding to openssl's SSL structure
5007 # $x - value corresponding to openssl's X509 structure
5008 #
5009 # returns: 1 on success, otherwise check out the error stack to find out the reason
5010
5011 Check openssl doc
5012 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
5013
5014 · use_certificate_ASN1
5015
5016 Loads the ASN1 encoded certificate from $data to $ssl.
5017
5018 my $rv = Net::SSLeay::use_certificate_ASN1($ssl, $data, $len);
5019 # $ssl - value corresponding to openssl's SSL structure
5020 # $data - certificate data (binary)
5021 # $len - length of $data
5022 #
5023 # returns: 1 on success, otherwise check out the error stack to find out the reason
5024
5025 Check openssl doc
5026 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
5027
5028 · use_certificate_chain_file
5029
5030 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
5031 requires at least OpenSSL 1.1.0
5032
5033 Loads a certificate chain from $file into $ssl. The certificates
5034 must be in PEM format and must be sorted starting with the
5035 subject's certificate (actual client or server certificate),
5036 followed by intermediate CA certificates if applicable, and ending
5037 at the highest level (root) CA.
5038
5039 my $rv = Net::SSLeay::use_certificate_chain_file($ssl, $file);
5040 # $ssl - value corresponding to openssl's SSL structure
5041 # $file - (string) file name
5042 #
5043 # returns: 1 on success, otherwise check out the error stack to find out the reason
5044
5045 Check openssl doc
5046 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
5047
5048 · use_certificate_file
5049
5050 Loads the first certificate stored in $file into $ssl.
5051
5052 my $rv = Net::SSLeay::use_certificate_file($ssl, $file, $type);
5053 # $ssl - value corresponding to openssl's SSL structure
5054 # $file - (string) file name
5055 # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
5056 #
5057 # returns: 1 on success, otherwise check out the error stack to find out the reason
5058
5059 Check openssl doc
5060 <http://www.openssl.org/docs/ssl/SSL_CTX_use_certificate.html>
5061
5062 · version
5063
5064 Returns SSL/TLS protocol version
5065
5066 my $rv = Net::SSLeay::version($ssl);
5067 # $ssl - value corresponding to openssl's SSL structure
5068 #
5069 # returns: (integer) protocol version
5070 # 0x0002 - SSL2_VERSION (SSLv2)
5071 # 0x0300 - SSL3_VERSION (SSLv3)
5072 # 0x0301 - TLS1_VERSION (TLSv1)
5073 # 0xFEFF - DTLS1_VERSION (DTLSv1)
5074
5075 · want
5076
5077 Returns state information for the SSL object $ssl.
5078
5079 my $rv = Net::SSLeay::want($ssl);
5080 # $ssl - value corresponding to openssl's SSL structure
5081 #
5082 # returns: state
5083 # 1 - SSL_NOTHING
5084 # 2 - SSL_WRITING
5085 # 3 - SSL_READING
5086 # 4 - SSL_X509_LOOKUP
5087
5088 Check openssl doc <http://www.openssl.org/docs/ssl/SSL_want.html>
5089
5090 · write
5091
5092 Writes data from the buffer $data into the specified $ssl
5093 connection.
5094
5095 my $rv = Net::SSLeay::write($ssl, $data);
5096 # $ssl - value corresponding to openssl's SSL structure
5097 # $data - data to be written
5098 #
5099 # returns: >0 - (success) number of bytes actually written to the TLS/SSL connection
5100 # 0 - write not successful, probably the underlying connection was closed
5101 # <0 - error
5102
5103 Check openssl doc <http://www.openssl.org/docs/ssl/SSL_write.html>
5104
5105 · write_partial
5106
5107 NOTE: Does not exactly correspond to any low level API function
5108
5109 Writes a fragment of data in $data from the buffer $data into the
5110 specified $ssl connection. This is a non-blocking function like
5111 Net::SSLeay::write().
5112
5113 my $rv = Net::SSLeay::write_partial($ssl, $from, $count, $data);
5114 # $ssl - value corresponding to openssl's SSL structure
5115 # $from - (integer) offset from the beginning of $data
5116 # $count - (integer) length of data to be written
5117 # $data - data buffer
5118 #
5119 # returns: >0 - (success) number of bytes actually written to the TLS/SSL connection
5120 # 0 - write not successful, probably the underlying connection was closed
5121 # <0 - error
5122
5123 · set_tlsext_host_name
5124
5125 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
5126 requires at least openssl-0.9.8f
5127
5128 Sets TLS servername extension on SLL object $ssl to value $name.
5129
5130 my $rv = set_tlsext_host_name($ssl, $name);
5131 # $ssl - value corresponding to openssl's SSL structure
5132 # $name - (string) name to be set
5133 #
5134 # returns: 1 on success, 0 on failure
5135
5136 Low level API: RAND_* related functions
5137
5138 Check openssl doc related to RAND stuff
5139 <http://www.openssl.org/docs/crypto/rand.html>
5140
5141 · RAND_add
5142
5143 Mixes the $num bytes at $buf into the PRNG state.
5144
5145 Net::SSLeay::RAND_add($buf, $num, $entropy);
5146 # $buf - buffer with data to be mixed into the PRNG state
5147 # $num - number of bytes in $buf
5148 # $entropy - estimate of how much randomness is contained in $buf (in bytes)
5149 #
5150 # returns: no return value
5151
5152 Check openssl doc
5153 <http://www.openssl.org/docs/crypto/RAND_add.html>
5154
5155 · RAND_seed
5156
5157 Equivalent to "RAND_add" when $num == $entropy.
5158
5159 Net::SSLeay::RAND_seed($buf); # Perlishly figures out buf size
5160 # $buf - buffer with data to be mixed into the PRNG state
5161 # $num - number of bytes in $buf
5162 #
5163 # returns: no return value
5164
5165 Check openssl doc
5166 <http://www.openssl.org/docs/crypto/RAND_add.html>
5167
5168 · RAND_status
5169
5170 Gives PRNG status (seeded enough or not).
5171
5172 my $rv = Net::SSLeay::RAND_status();
5173 #returns: 1 if the PRNG has been seeded with enough data, 0 otherwise
5174
5175 Check openssl doc
5176 <http://www.openssl.org/docs/crypto/RAND_add.html>
5177
5178 · RAND_bytes
5179
5180 Puts $num cryptographically strong pseudo-random bytes into $buf.
5181
5182 my $rv = Net::SSLeay::RAND_bytes($buf, $num);
5183 # $buf - buffer where the random data will be stored
5184 # $num - the size (in bytes) of requested random data
5185 #
5186 # returns: 1 on success, 0 otherwise
5187
5188 Check openssl doc
5189 <http://www.openssl.org/docs/crypto/RAND_bytes.html>
5190
5191 · RAND_pseudo_bytes
5192
5193 Puts $num pseudo-random (not necessarily unpredictable) bytes into
5194 $buf.
5195
5196 my $rv = Net::SSLeay::RAND_pseudo_bytes($buf, $num);
5197 # $buf - buffer where the random data will be stored
5198 # $num - the size (in bytes) of requested random data
5199 #
5200 # returns: 1 if the bytes generated are cryptographically strong, 0 otherwise
5201
5202 Check openssl doc
5203 <http://www.openssl.org/docs/crypto/RAND_bytes.html>
5204
5205 · RAND_cleanup
5206
5207 Erase the PRNG state.
5208
5209 Net::SSLeay::RAND_cleanup();
5210 # no args, no return value
5211
5212 Check openssl doc
5213 <http://www.openssl.org/docs/crypto/RAND_cleanup.html>
5214
5215 · RAND_egd_bytes
5216
5217 Queries the entropy gathering daemon EGD on socket $path for $bytes
5218 bytes.
5219
5220 my $rv = Net::SSLeay::RAND_egd_bytes($path, $bytes);
5221 # $path - path to a socket of entropy gathering daemon EGD
5222 # $bytes - number of bytes we want from EGD
5223 #
5224 # returns: the number of bytes read from the daemon on success, and -1 on failure
5225
5226 Check openssl doc
5227 <http://www.openssl.org/docs/crypto/RAND_egd.html>
5228
5229 · RAND_file_name
5230
5231 Generates a default path for the random seed file.
5232
5233 my $file = Net::SSLeay::RAND_file_name($num);
5234 # $num - maximum size of returned file name
5235 #
5236 # returns: string with file name on success, '' (empty string) on failure
5237
5238 Check openssl doc
5239 <http://www.openssl.org/docs/crypto/RAND_load_file.html>
5240
5241 · RAND_load_file
5242
5243 Reads $max_bytes of bytes from $file_name and adds them to the
5244 PRNG.
5245
5246 my $rv = Net::SSLeay::RAND_load_file($file_name, $max_bytes);
5247 # $file_name - the name of file
5248 # $max_bytes - bytes to read from $file_name; -1 => the complete file is read
5249 #
5250 # returns: the number of bytes read
5251
5252 Check openssl doc
5253 <http://www.openssl.org/docs/crypto/RAND_load_file.html>
5254
5255 · RAND_write_file
5256
5257 Writes 1024 random bytes to $file_name which can be used to
5258 initialize the PRNG by calling "RAND_load_file" in a later session.
5259
5260 my $rv = Net::SSLeay::RAND_write_file($file_name);
5261 # $file_name - the name of file
5262 #
5263 # returns: the number of bytes written, and -1 if the bytes written were generated without appropriate seed
5264
5265 Check openssl doc
5266 <http://www.openssl.org/docs/crypto/RAND_load_file.html>
5267
5268 · RAND_poll
5269
5270 Collects some entropy from operating system and adds it to the
5271 PRNG.
5272
5273 my $rv = Net::SSLeay::RAND_poll();
5274 # returns: 1 on success, 0 on failure (unable to gather reasonable entropy)
5275
5276 Low level API: OBJ_* related functions
5277
5278 · OBJ_cmp
5279
5280 Compares ASN1_OBJECT $a to ASN1_OBJECT $b.
5281
5282 my $rv = Net::SSLeay::OBJ_cmp($a, $b);
5283 # $a - value corresponding to openssl's ASN1_OBJECT structure
5284 # $b - value corresponding to openssl's ASN1_OBJECT structure
5285 #
5286 # returns: if the two are identical 0 is returned
5287
5288 Check openssl doc
5289 <http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
5290
5291 · OBJ_dup
5292
5293 Returns a copy/duplicate of $o.
5294
5295 my $rv = Net::SSLeay::OBJ_dup($o);
5296 # $o - value corresponding to openssl's ASN1_OBJECT structure
5297 #
5298 # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
5299
5300 Check openssl doc
5301 <http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
5302
5303 · OBJ_nid2ln
5304
5305 Returns long name for given NID $n.
5306
5307 my $rv = Net::SSLeay::OBJ_nid2ln($n);
5308 # $n - (integer) NID
5309 #
5310 # returns: (string) long name e.g. 'commonName'
5311
5312 Check openssl doc
5313 <http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
5314
5315 · OBJ_ln2nid
5316
5317 Returns NID corresponding to given long name $n.
5318
5319 my $rv = Net::SSLeay::OBJ_ln2nid($s);
5320 # $s - (string) long name e.g. 'commonName'
5321 #
5322 # returns: (integer) NID
5323
5324 · OBJ_nid2sn
5325
5326 Returns short name for given NID $n.
5327
5328 my $rv = Net::SSLeay::OBJ_nid2sn($n);
5329 # $n - (integer) NID
5330 #
5331 # returns: (string) short name e.g. 'CN'
5332
5333 Example:
5334
5335 print Net::SSLeay::OBJ_nid2sn(&Net::SSLeay::NID_commonName);
5336
5337 · OBJ_sn2nid
5338
5339 Returns NID corresponding to given short name $s.
5340
5341 my $rv = Net::SSLeay::OBJ_sn2nid($s);
5342 # $s - (string) short name e.g. 'CN'
5343 #
5344 # returns: (integer) NID
5345
5346 Example:
5347
5348 print "NID_commonName constant=", &Net::SSLeay::NID_commonName;
5349 print "OBJ_sn2nid('CN')=", Net::SSLeay::OBJ_sn2nid('CN');
5350
5351 · OBJ_nid2obj
5352
5353 Returns ASN1_OBJECT for given NID $n.
5354
5355 my $rv = Net::SSLeay::OBJ_nid2obj($n);
5356 # $n - (integer) NID
5357 #
5358 # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
5359
5360 Check openssl doc
5361 <http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
5362
5363 · OBJ_obj2nid
5364
5365 Returns NID corresponding to given ASN1_OBJECT $o.
5366
5367 my $rv = Net::SSLeay::OBJ_obj2nid($o);
5368 # $o - value corresponding to openssl's ASN1_OBJECT structure
5369 #
5370 # returns: (integer) NID
5371
5372 Check openssl doc
5373 <http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
5374
5375 · OBJ_txt2obj
5376
5377 Converts the text string s into an ASN1_OBJECT structure. If
5378 $no_name is 0 then long names (e.g. 'commonName') and short names
5379 (e.g. 'CN') will be interpreted as well as numerical forms (e.g.
5380 '2.5.4.3'). If $no_name is 1 only the numerical form is acceptable.
5381
5382 my $rv = Net::SSLeay::OBJ_txt2obj($s, $no_name);
5383 # $s - text string to be converted
5384 # $no_name - (integer) 0 or 1
5385 #
5386 # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
5387
5388 Check openssl doc
5389 <http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
5390
5391 · OBJ_obj2txt
5392
5393 Converts the ASN1_OBJECT a into a textual representation.
5394
5395 Net::SSLeay::OBJ_obj2txt($a, $no_name);
5396 # $a - value corresponding to openssl's ASN1_OBJECT structure
5397 # $no_name - (integer) 0 or 1
5398 #
5399 # returns: textual representation e.g. 'commonName' ($no_name=0), '2.5.4.3' ($no_name=1)
5400
5401 Check openssl doc
5402 <http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
5403
5404 · OBJ_txt2nid
5405
5406 Returns NID corresponding to text string $s which can be a long
5407 name, a short name or the numerical representation of an object.
5408
5409 my $rv = Net::SSLeay::OBJ_txt2nid($s);
5410 # $s - (string) e.g. 'commonName' or 'CN' or '2.5.4.3'
5411 #
5412 # returns: (integer) NID
5413
5414 Example:
5415
5416 my $nid = Net::SSLeay::OBJ_txt2nid('2.5.4.3');
5417 Net::SSLeay::OBJ_nid2sn($n);
5418
5419 Check openssl doc
5420 <http://www.openssl.org/docs/crypto/OBJ_nid2obj.html>
5421
5422 Low level API: ASN1_INTEGER_* related functions
5423
5424 · ASN1_INTEGER_new
5425
5426 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5427
5428 Creates a new ASN1_INTEGER structure.
5429
5430 my $rv = Net::SSLeay::ASN1_INTEGER_new();
5431 #
5432 # returns: value corresponding to openssl's ASN1_INTEGER structure (0 on failure)
5433
5434 · ASN1_INTEGER_free
5435
5436 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5437
5438 Free an allocated ASN1_INTEGER structure.
5439
5440 Net::SSLeay::ASN1_INTEGER_free($i);
5441 # $i - value corresponding to openssl's ASN1_INTEGER structure
5442 #
5443 # returns: no return value
5444
5445 · ASN1_INTEGER_get
5446
5447 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5448
5449 Returns integer value of given ASN1_INTEGER object.
5450
5451 BEWARE: If the value stored in ASN1_INTEGER is greater than max.
5452 integer that can be stored in 'long' type (usually 32bit but may
5453 vary according to platform) then this function will return -1. For
5454 getting large ASN1_INTEGER values consider using
5455 "P_ASN1_INTEGER_get_dec" or "P_ASN1_INTEGER_get_hex".
5456
5457 my $rv = Net::SSLeay::ASN1_INTEGER_get($a);
5458 # $a - value corresponding to openssl's ASN1_INTEGER structure
5459 #
5460 # returns: integer value of ASN1_INTEGER object in $a
5461
5462 · ASN1_INTEGER_set
5463
5464 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5465
5466 Sets value of given ASN1_INTEGER object to value $val
5467
5468 BEWARE: $val has max. limit (= max. integer that can be stored in
5469 'long' type). For setting large ASN1_INTEGER values consider using
5470 "P_ASN1_INTEGER_set_dec" or "P_ASN1_INTEGER_set_hex".
5471
5472 my $rv = Net::SSLeay::ASN1_INTEGER_set($i, $val);
5473 # $i - value corresponding to openssl's ASN1_INTEGER structure
5474 # $val - integer value
5475 #
5476 # returns: 1 on success, 0 on failure
5477
5478 · P_ASN1_INTEGER_get_dec
5479
5480 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5481
5482 Returns string with decimal representation of integer value of
5483 given ASN1_INTEGER object.
5484
5485 Net::SSLeay::P_ASN1_INTEGER_get_dec($i);
5486 # $i - value corresponding to openssl's ASN1_INTEGER structure
5487 #
5488 # returns: string with decimal representation
5489
5490 · P_ASN1_INTEGER_get_hex
5491
5492 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5493
5494 Returns string with hexadecimal representation of integer value of
5495 given ASN1_INTEGER object.
5496
5497 Net::SSLeay::P_ASN1_INTEGER_get_hex($i);
5498 # $i - value corresponding to openssl's ASN1_INTEGER structure
5499 #
5500 # returns: string with hexadecimal representation
5501
5502 · P_ASN1_INTEGER_set_dec
5503
5504 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5505
5506 Sets value of given ASN1_INTEGER object to value $val (decimal
5507 string, suitable for large integers)
5508
5509 Net::SSLeay::P_ASN1_INTEGER_set_dec($i, $str);
5510 # $i - value corresponding to openssl's ASN1_INTEGER structure
5511 # $str - string with decimal representation
5512 #
5513 # returns: 1 on success, 0 on failure
5514
5515 · P_ASN1_INTEGER_set_hex
5516
5517 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5518
5519 Sets value of given ASN1_INTEGER object to value $val (hexadecimal
5520 string, suitable for large integers)
5521
5522 Net::SSLeay::P_ASN1_INTEGER_set_hex($i, $str);
5523 # $i - value corresponding to openssl's ASN1_INTEGER structure
5524 # $str - string with hexadecimal representation
5525 #
5526 # returns: 1 on success, 0 on failure
5527
5528 Low level API: ASN1_STRING_* related functions
5529
5530 · P_ASN1_STRING_get
5531
5532 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5533
5534 Returns string value of given ASN1_STRING object.
5535
5536 Net::SSLeay::P_ASN1_STRING_get($s, $utf8_decode);
5537 # $s - value corresponding to openssl's ASN1_STRING structure
5538 # $utf8_decode - [optional] 0 or 1 whether the returned value should be utf8 decoded (default=0)
5539 #
5540 # returns: string
5541
5542 $string = Net::SSLeay::P_ASN1_STRING_get($s);
5543 #is the same as:
5544 $string = Net::SSLeay::P_ASN1_STRING_get($s, 0);
5545
5546 Low level API: ASN1_TIME_* related functions
5547
5548 · ASN1_TIME_new
5549
5550 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
5551
5552 my $time = ASN1_TIME_new();
5553 # returns: value corresponding to openssl's ASN1_TIME structure
5554
5555 · ASN1_TIME_free
5556
5557 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
5558
5559 ASN1_TIME_free($time);
5560 # $time - value corresponding to openssl's ASN1_TIME structure
5561
5562 · ASN1_TIME_set
5563
5564 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
5565
5566 ASN1_TIME_set($time, $t);
5567 # $time - value corresponding to openssl's ASN1_TIME structure
5568 # $t - time value in seconds since 1.1.1970
5569
5570 BEWARE: It is platform dependent how this function will handle
5571 dates after 2038. Although perl's integer is large enough the
5572 internal implementation of this function is dependent on the size
5573 of time_t structure (32bit time_t has problem with 2038).
5574
5575 If you want to safely set date and time after 2038 use function
5576 "P_ASN1_TIME_set_isotime".
5577
5578 · P_ASN1_TIME_get_isotime
5579
5580 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
5581 requires at least openssl-0.9.7e
5582
5583 NOTE: Does not exactly correspond to any low level API function
5584
5585 Gives ISO-8601 string representation of ASN1_TIME structure.
5586
5587 my $datetime_string = P_ASN1_TIME_get_isotime($time);
5588 # $time - value corresponding to openssl's ASN1_TIME structure
5589 #
5590 # returns: datetime string like '2033-05-16T20:39:37Z' or '' on failure
5591
5592 The output format is compatible with module
5593 DateTime::Format::RFC3339
5594
5595 · P_ASN1_TIME_set_isotime
5596
5597 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
5598 requires at least openssl-0.9.7e
5599
5600 NOTE: Does not exactly correspond to any low level API function
5601
5602 Sets time and date value of ANS1_time structure.
5603
5604 my $rv = P_ASN1_TIME_set_isotime($time, $string);
5605 # $time - value corresponding to openssl's ASN1_TIME structure
5606 # $string - ISO-8601 timedate string like '2033-05-16T20:39:37Z'
5607 #
5608 # returns: 1 on success, 0 on failure
5609
5610 The $string parameter has to be in full form like
5611 "2012-03-22T23:55:33" or "2012-03-22T23:55:33Z" or
5612 "2012-03-22T23:55:33CET". Short forms like "2012-03-22T23:55" or
5613 "2012-03-22" are not supported.
5614
5615 · P_ASN1_TIME_put2string
5616
5617 COMPATIBILITY: not available in Net-SSLeay-1.42 and before, has
5618 bugs with openssl-0.9.8i
5619
5620 NOTE: Does not exactly correspond to any low level API function
5621
5622 Gives string representation of ASN1_TIME structure.
5623
5624 my $str = P_ASN1_TIME_put2string($time);
5625 # $time - value corresponding to openssl's ASN1_TIME structure
5626 #
5627 # returns: datetime string like 'May 16 20:39:37 2033 GMT'
5628
5629 · P_ASN1_UTCTIME_put2string
5630
5631 NOTE: deprecated function, only for backward compatibility, just an
5632 alias for "P_ASN1_TIME_put2string"
5633
5634 Low level API: X509_* related functions
5635
5636 · X509_new
5637
5638 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5639
5640 Allocates and initializes a X509 structure.
5641
5642 my $rv = Net::SSLeay::X509_new();
5643 #
5644 # returns: value corresponding to openssl's X509 structure (0 on failure)
5645
5646 Check openssl doc
5647 <http://www.openssl.org/docs/crypto/X509_new.html>
5648
5649 · X509_free
5650
5651 Frees up the X509 structure.
5652
5653 Net::SSLeay::X509_free($a);
5654 # $a - value corresponding to openssl's X509 structure
5655 #
5656 # returns: no return value
5657
5658 Check openssl doc
5659 <http://www.openssl.org/docs/crypto/X509_new.html>
5660
5661 · X509_check_host
5662
5663 COMPATIBILITY: not available in Net-SSLeay-1.68 and before;
5664 requires at least OpenSSL 1.0.2.
5665 X509_CHECK_FLAG_NEVER_CHECK_SUBJECT requires OpenSSL 1.1.0.
5666
5667 Checks f the certificate Subject Alternative Name (SAN) or Subject
5668 CommonName (CN) matches the specified host name.
5669
5670 my $rv = Net::SSLeay::X509_check_host($cert, $name, $flags, $peername);
5671 # $cert - value corresponding to openssl's X509 structure
5672 # $name - host name to check
5673 # $flags (optional, default: 0) - can be the bitwise OR of:
5674 # &Net::SSLeay::X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
5675 # &Net::SSLeay::X509_CHECK_FLAG_NO_WILDCARDS
5676 # &Net::SSLeay::X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
5677 # &Net::SSLeay::X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS
5678 # &Net::SSLeay::X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
5679 # &Net::SSLeay::X509_CHECK_FLAG_NEVER_CHECK_SUBJECT
5680 # $peername (optional) - If not omitted and $host matches $cert,
5681 # a copy of the matching SAN or CN from
5682 # the peer certificate is stored in $peername.
5683 #
5684 # returns:
5685 # 1 for a successful match
5686 # 0 for a failed match
5687 # -1 for an internal error
5688 # -2 if the input is malformed
5689
5690 Check openssl doc
5691 <https://www.openssl.org/docs/crypto/X509_check_host.html>.
5692
5693 · X509_check_email
5694
5695 COMPATIBILITY: not available in Net-SSLeay-1.68 and before;
5696 requires at least OpenSSL 1.0.2.
5697
5698 Checks if the certificate matches the specified email address.
5699
5700 my $rv = Net::SSLeay::X509_check_email($cert, $address, $flags);
5701 # $cert - value corresponding to openssl's X509 structure
5702 # $address - email address to check
5703 # $flags (optional, default: 0) - see X509_check_host()
5704 #
5705 # returns: see X509_check_host()
5706
5707 Check openssl doc
5708 <https://www.openssl.org/docs/crypto/X509_check_email.html>.
5709
5710 · X509_check_ip
5711
5712 COMPATIBILITY: not available in Net-SSLeay-1.68 and before;
5713 requires at least OpenSSL 1.0.2.
5714
5715 Checks if the certificate matches the specified IPv4 or IPv6
5716 address.
5717
5718 my $rv = Net::SSLeay::X509_check_email($cert, $address, $flags);
5719 # $cert - value corresponding to openssl's X509 structure
5720 # $address - IP address to check in binary format, in network byte order
5721 # $flags (optional, default: 0) - see X509_check_host()
5722 #
5723 # returns: see X509_check_host()
5724
5725 Check openssl doc
5726 <https://www.openssl.org/docs/crypto/X509_check_ip.html>.
5727
5728 · X509_check_ip_asc
5729
5730 COMPATIBILITY: not available in Net-SSLeay-1.68 and before;
5731 requires at least OpenSSL 1.0.2.
5732
5733 Checks if the certificate matches the specified IPv4 or IPv6
5734 address.
5735
5736 my $rv = Net::SSLeay::X509_check_email($cert, $address, $flags);
5737 # $cert - value corresponding to openssl's X509 structure
5738 # $address - IP address to check in text representation
5739 # $flags (optional, default: 0) - see X509_check_host()
5740 #
5741 # returns: see X509_check_host()
5742
5743 Check openssl doc
5744 <https://www.openssl.org/docs/crypto/X509_check_ip_asc.html>.
5745
5746 · X509_certificate_type
5747
5748 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5749
5750 Returns bitmask with type of certificate $x.
5751
5752 my $rv = Net::SSLeay::X509_certificate_type($x);
5753 # $x - value corresponding to openssl's X509 structure
5754 #
5755 # returns: (integer) bitmask with certificate type
5756
5757 #to decode bitmask returned by this function use these constants:
5758 &Net::SSLeay::EVP_PKS_DSA
5759 &Net::SSLeay::EVP_PKS_EC
5760 &Net::SSLeay::EVP_PKS_RSA
5761 &Net::SSLeay::EVP_PKT_ENC
5762 &Net::SSLeay::EVP_PKT_EXCH
5763 &Net::SSLeay::EVP_PKT_EXP
5764 &Net::SSLeay::EVP_PKT_SIGN
5765 &Net::SSLeay::EVP_PK_DH
5766 &Net::SSLeay::EVP_PK_DSA
5767 &Net::SSLeay::EVP_PK_EC
5768 &Net::SSLeay::EVP_PK_RSA
5769
5770 · X509_digest
5771
5772 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5773
5774 Computes digest/fingerprint of X509 $data using $type hash
5775 function.
5776
5777 my $digest_value = Net::SSLeay::X509_digest($data, $type);
5778 # $data - value corresponding to openssl's X509 structure
5779 # $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname()
5780 #
5781 # returns: hash value (binary)
5782
5783 #to get printable (hex) value of digest use:
5784 print unpack('H*', $digest_value);
5785
5786 · X509_issuer_and_serial_hash
5787
5788 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5789
5790 Sort of a checksum of issuer name and serial number of X509
5791 certificate $x. The result is not a full hash (e.g. sha-1), it is
5792 kind-of-a-hash truncated to the size of 'unsigned long' (32 bits).
5793 The resulting value might differ across different openssl versions
5794 for the same X509 certificate.
5795
5796 my $rv = Net::SSLeay::X509_issuer_and_serial_hash($x);
5797 # $x - value corresponding to openssl's X509 structure
5798 #
5799 # returns: number representing checksum
5800
5801 · X509_issuer_name_hash
5802
5803 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5804
5805 Sort of a checksum of issuer name of X509 certificate $x. The
5806 result is not a full hash (e.g. sha-1), it is kind-of-a-hash
5807 truncated to the size of 'unsigned long' (32 bits). The resulting
5808 value might differ across different openssl versions for the same
5809 X509 certificate.
5810
5811 my $rv = Net::SSLeay::X509_issuer_name_hash($x);
5812 # $x - value corresponding to openssl's X509 structure
5813 #
5814 # returns: number representing checksum
5815
5816 · X509_subject_name_hash
5817
5818 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5819
5820 Sort of a checksum of subject name of X509 certificate $x. The
5821 result is not a full hash (e.g. sha-1), it is kind-of-a-hash
5822 truncated to the size of 'unsigned long' (32 bits). The resulting
5823 value might differ across different openssl versions for the same
5824 X509 certificate.
5825
5826 my $rv = Net::SSLeay::X509_subject_name_hash($x);
5827 # $x - value corresponding to openssl's X509 structure
5828 #
5829 # returns: number representing checksum
5830
5831 · X509_pubkey_digest
5832
5833 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
5834 requires at least openssl-0.9.7
5835
5836 Computes digest/fingerprint of public key from X509 certificate
5837 $data using $type hash function.
5838
5839 my $digest_value = Net::SSLeay::X509_pubkey_digest($data, $type);
5840 # $data - value corresponding to openssl's X509 structure
5841 # $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname()
5842 #
5843 # returns: hash value (binary)
5844
5845 #to get printable (hex) value of digest use:
5846 print unpack('H*', $digest_value);
5847
5848 · X509_set_issuer_name
5849
5850 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5851
5852 Sets issuer of X509 certificate $x to $name.
5853
5854 my $rv = Net::SSLeay::X509_set_issuer_name($x, $name);
5855 # $x - value corresponding to openssl's X509 structure
5856 # $name - value corresponding to openssl's X509_NAME structure
5857 #
5858 # returns: 1 on success, 0 on failure
5859
5860 · X509_set_pubkey
5861
5862 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5863
5864 Sets public key of X509 certificate $x to $pkey.
5865
5866 my $rv = Net::SSLeay::X509_set_pubkey($x, $pkey);
5867 # $x - value corresponding to openssl's X509 structure
5868 # $pkey - value corresponding to openssl's EVP_PKEY structure
5869 #
5870 # returns: 1 on success, 0 on failure
5871
5872 · X509_set_serialNumber
5873
5874 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5875
5876 Sets serial number of X509 certificate $x to $serial.
5877
5878 my $rv = Net::SSLeay::X509_set_serialNumber($x, $serial);
5879 # $x - value corresponding to openssl's X509 structure
5880 # $serial - value corresponding to openssl's ASN1_INTEGER structure
5881 #
5882 # returns: 1 on success, 0 on failure
5883
5884 #to create $serial value use one of these:
5885 $serial = Net::SSLeay::P_ASN1_INTEGER_set_hex('45ad6f');
5886 $serial = Net::SSLeay::P_ASN1_INTEGER_set_dec('7896541238529631478');
5887 $serial = Net::SSLeay::ASN1_INTEGER_set(45896);
5888
5889 · X509_set_subject_name
5890
5891 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5892
5893 Sets subject of X509 certificate $x to $name.
5894
5895 my $rv = Net::SSLeay::X509_set_subject_name($x, $name);
5896 # $x - value corresponding to openssl's X509 structure
5897 # $name - value corresponding to openssl's X509_NAME structure
5898 #
5899 # returns: 1 on success, 0 on failure
5900
5901 · X509_set_version
5902
5903 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5904
5905 Set 'version' value for X509 certificate $ to $version.
5906
5907 my $rv = Net::SSLeay::X509_set_version($x, $version);
5908 # $x - value corresponding to openssl's X509 structure
5909 # $version - (integer) version number
5910 #
5911 # returns: 1 on success, 0 on failure
5912
5913 · X509_sign
5914
5915 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5916
5917 Sign X509 certificate $x with private key $pkey (using digest
5918 algorithm $md).
5919
5920 my $rv = Net::SSLeay::X509_sign($x, $pkey, $md);
5921 # $x - value corresponding to openssl's X509 structure
5922 # $pkey - value corresponding to openssl's EVP_PKEY structure
5923 # $md - value corresponding to openssl's EVP_MD structure
5924 #
5925 # returns: 1 on success, 0 on failure
5926
5927 · X509_verify
5928
5929 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5930
5931 Verifies X509 object $a using public key $r (pubkey of issuing CA).
5932
5933 my $rv = Net::SSLeay::X509_verify($x, $r);
5934 # $x - value corresponding to openssl's X509 structure
5935 # $r - value corresponding to openssl's EVP_PKEY structure
5936 #
5937 # returns: 0 - verify failure, 1 - verify OK, <0 - error
5938
5939 · X509_get_ext_count
5940
5941 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5942
5943 Returns the total number of extensions in X509 object $x.
5944
5945 my $rv = Net::SSLeay::X509_get_ext_count($x);
5946 # $x - value corresponding to openssl's X509 structure
5947 #
5948 # returns: count of extensions
5949
5950 · X509_get_pubkey
5951
5952 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5953
5954 Returns public key corresponding to given X509 object $x.
5955
5956 my $rv = Net::SSLeay::X509_get_pubkey($x);
5957 # $x - value corresponding to openssl's X509 structure
5958 #
5959 # returns: value corresponding to openssl's EVP_PKEY structure (0 on failure)
5960
5961 NOTE: This method returns only the public key's key bits, without
5962 the algorithm or parameters. Use "X509_get_X509_PUBKEY()" to
5963 return the full public key (SPKI) instead.
5964
5965 · X509_get_X509_PUBKEY
5966
5967 COMPATIBILITY: not available in Net-SSLeay-1.72 and before
5968
5969 Returns the full public key (SPKI) of given X509 certificate $x.
5970
5971 Net::SSLeay::X509_get_X509_PUBKEY($x);
5972 # $x - value corresponding to openssl's X509 structure
5973 #
5974 # returns: public key data in DER format (binary)
5975
5976 · X509_get_serialNumber
5977
5978 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5979
5980 Returns serial number of X509 certificate $x.
5981
5982 my $rv = Net::SSLeay::X509_get_serialNumber($x);
5983 # $x - value corresponding to openssl's X509 structure
5984 #
5985 # returns: value corresponding to openssl's ASN1_INTEGER structure (0 on failure)
5986
5987 See "P_ASN1_INTEGER_get_dec", "P_ASN1_INTEGER_get_hex" or
5988 "ASN1_INTEGER_get" to decode ASN1_INTEGER object.
5989
5990 · X509_get_version
5991
5992 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
5993
5994 Returns 'version' value of given X509 certificate $x.
5995
5996 my $rv = Net::SSLeay::X509_get_version($x);
5997 # $x - value corresponding to openssl's X509 structure
5998 #
5999 # returns: (integer) version
6000
6001 · X509_get_ext
6002
6003 Returns X509_EXTENSION from $x509 based on given position/index.
6004
6005 my $rv = Net::SSLeay::X509_get_ext($x509, $index);
6006 # $x509 - value corresponding to openssl's X509 structure
6007 # $index - (integer) position/index of extension within $x509
6008 #
6009 # returns: value corresponding to openssl's X509_EXTENSION structure (0 on failure)
6010
6011 · X509_get_ext_by_NID
6012
6013 Returns X509_EXTENSION from $x509 based on given NID.
6014
6015 my $rv = Net::SSLeay::X509_get_ext_by_NID($x509, $nid, $loc);
6016 # $x509 - value corresponding to openssl's X509 structure
6017 # $nid - (integer) NID value
6018 # $loc - (integer) position to start lookup at
6019 #
6020 # returns: position/index of extension, negative value on error
6021 # call Net::SSLeay::X509_get_ext($x509, $rv) to get the actual extension
6022
6023 · X509_get_fingerprint
6024
6025 Returns fingerprint of certificate $cert.
6026
6027 NOTE: Does not exactly correspond to any low level API function.
6028 The implementation is basen on openssl's "X509_digest()".
6029
6030 Net::SSLeay::X509_get_fingerprint($x509, $type);
6031 # $x509 - value corresponding to openssl's X509 structure
6032 # $type - (string) digest type, currently supported values:
6033 # "md5"
6034 # "sha1"
6035 # "sha256"
6036 # "ripemd160"
6037 #
6038 # returns: certificate digest - hexadecimal string (NOT binary data!)
6039
6040 · X509_get_issuer_name
6041
6042 Return an X509_NAME object representing the issuer of the
6043 certificate $cert.
6044
6045 my $rv = Net::SSLeay::X509_get_issuer_name($cert);
6046 # $cert - value corresponding to openssl's X509 structure
6047 #
6048 # returns: value corresponding to openssl's X509_NAME structure (0 on failure)
6049
6050 · X509_get_notAfter
6051
6052 Return an object giving the time after which the certificate $cert
6053 is not valid.
6054
6055 my $rv = Net::SSLeay::X509_get_notAfter($cert);
6056 # $cert - value corresponding to openssl's X509 structure
6057 #
6058 # returns: value corresponding to openssl's ASN1_TIME structure (0 on failure)
6059
6060 To get human readable/printable form the return value you can use:
6061
6062 my $time = Net::SSLeay::X509_get_notAfter($cert);
6063 print "notAfter=", Net::SSLeay::P_ASN1_TIME_get_isotime($time), "\n";
6064
6065 · X509_get_notBefore
6066
6067 Return an object giving the time before which the certificate $cert
6068 is not valid
6069
6070 my $rv = Net::SSLeay::X509_get_notBefore($cert);
6071 # $cert - value corresponding to openssl's X509 structure
6072 #
6073 # returns: value corresponding to openssl's ASN1_TIME structure (0 on failure)
6074
6075 To get human readable/printable form the return value you can use:
6076
6077 my $time = Net::SSLeay::X509_get_notBefore($cert);
6078 print "notBefore=", Net::SSLeay::P_ASN1_TIME_get_isotime($time), "\n";
6079
6080 · X509_get_subjectAltNames
6081
6082 NOTE: Does not exactly correspond to any low level API function.
6083
6084 Returns the list of alternative subject names from X509 certificate
6085 $cert.
6086
6087 my @rv = Net::SSLeay::X509_get_subjectAltNames($cert);
6088 # $cert - value corresponding to openssl's X509 structure
6089 #
6090 # returns: list containing pairs - name_type (integer), name_value (string)
6091 # where name_type can be:
6092 # 0 - GEN_OTHERNAME
6093 # 1 - GEN_EMAIL
6094 # 2 - GEN_DNS
6095 # 3 - GEN_X400
6096 # 4 - GEN_DIRNAME
6097 # 5 - GEN_EDIPARTY
6098 # 6 - GEN_URI
6099 # 7 - GEN_IPADD
6100 # 8 - GEN_RID
6101
6102 Note: type 7 - GEN_IPADD contains the IP address as a packed binary
6103 address.
6104
6105 · X509_get_subject_name
6106
6107 Returns the subject of the certificate $cert.
6108
6109 my $rv = Net::SSLeay::X509_get_subject_name($cert);
6110 # $cert - value corresponding to openssl's X509 structure
6111 #
6112 # returns: value corresponding to openssl's X509_NAME structure (0 on failure)
6113
6114 · X509_gmtime_adj
6115
6116 Adjust th ASN1_TIME object to the timestamp (in GMT).
6117
6118 my $rv = Net::SSLeay::X509_gmtime_adj($s, $adj);
6119 # $s - value corresponding to openssl's ASN1_TIME structure
6120 # $adj - timestamp (seconds since 1.1.1970)
6121 #
6122 # returns: value corresponding to openssl's ASN1_TIME structure (0 on failure)
6123
6124 BEWARE: this function may fail for dates after 2038 as it is
6125 dependent on time_t size on your system (32bit time_t does not work
6126 after 2038). Consider using "P_ASN1_TIME_set_isotime" instead).
6127
6128 · X509_load_cert_crl_file
6129
6130 Takes PEM file and loads all X509 certificates and X509 CRLs from
6131 that file into X509_LOOKUP structure.
6132
6133 my $rv = Net::SSLeay::X509_load_cert_crl_file($ctx, $file, $type);
6134 # $ctx - value corresponding to openssl's X509_LOOKUP structure
6135 # $file - (string) file name
6136 # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
6137 # if not FILETYPE_PEM then behaves as Net::SSLeay::X509_load_cert_file()
6138 #
6139 # returns: 1 on success, 0 on failure
6140
6141 · X509_load_cert_file
6142
6143 Loads/adds X509 certificate from $file to X509_LOOKUP structure
6144
6145 my $rv = Net::SSLeay::X509_load_cert_file($ctx, $file, $type);
6146 # $ctx - value corresponding to openssl's X509_LOOKUP structure
6147 # $file - (string) file name
6148 # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
6149 #
6150 # returns: 1 on success, 0 on failure
6151
6152 · X509_load_crl_file
6153
6154 Loads/adds X509 CRL from $file to X509_LOOKUP structure
6155
6156 my $rv = Net::SSLeay::X509_load_crl_file($ctx, $file, $type);
6157 # $ctx - value corresponding to openssl's X509_LOOKUP structure
6158 # $file - (string) file name
6159 # $type - (integer) type - use constants &Net::SSLeay::FILETYPE_PEM or &Net::SSLeay::FILETYPE_ASN1
6160 #
6161 # returns: 1 on success, 0 on failure
6162
6163 · X509_policy_level_get0_node
6164
6165 ??? (more info needed)
6166
6167 my $rv = Net::SSLeay::X509_policy_level_get0_node($level, $i);
6168 # $level - value corresponding to openssl's X509_POLICY_LEVEL structure
6169 # $i - (integer) index/position
6170 #
6171 # returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure)
6172
6173 · X509_policy_level_node_count
6174
6175 ??? (more info needed)
6176
6177 my $rv = Net::SSLeay::X509_policy_level_node_count($level);
6178 # $level - value corresponding to openssl's X509_POLICY_LEVEL structure
6179 #
6180 # returns: (integer) node count
6181
6182 · X509_policy_node_get0_parent
6183
6184 ??? (more info needed)
6185
6186 my $rv = Net::SSLeay::X509_policy_node_get0_parent($node);
6187 # $node - value corresponding to openssl's X509_POLICY_NODE structure
6188 #
6189 # returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure)
6190
6191 · X509_policy_node_get0_policy
6192
6193 ??? (more info needed)
6194
6195 my $rv = Net::SSLeay::X509_policy_node_get0_policy($node);
6196 # $node - value corresponding to openssl's X509_POLICY_NODE structure
6197 #
6198 # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
6199
6200 · X509_policy_node_get0_qualifiers
6201
6202 ??? (more info needed)
6203
6204 my $rv = Net::SSLeay::X509_policy_node_get0_qualifiers($node);
6205 # $node - value corresponding to openssl's X509_POLICY_NODE structure
6206 #
6207 # returns: value corresponding to openssl's STACK_OF(POLICYQUALINFO) structure (0 on failure)
6208
6209 · X509_policy_tree_free
6210
6211 ??? (more info needed)
6212
6213 Net::SSLeay::X509_policy_tree_free($tree);
6214 # $tree - value corresponding to openssl's X509_POLICY_TREE structure
6215 #
6216 # returns: no return value
6217
6218 · X509_policy_tree_get0_level
6219
6220 ??? (more info needed)
6221
6222 my $rv = Net::SSLeay::X509_policy_tree_get0_level($tree, $i);
6223 # $tree - value corresponding to openssl's X509_POLICY_TREE structure
6224 # $i - (integer) level index
6225 #
6226 # returns: value corresponding to openssl's X509_POLICY_LEVEL structure (0 on failure)
6227
6228 · X509_policy_tree_get0_policies
6229
6230 ??? (more info needed)
6231
6232 my $rv = Net::SSLeay::X509_policy_tree_get0_policies($tree);
6233 # $tree - value corresponding to openssl's X509_POLICY_TREE structure
6234 #
6235 # returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure)
6236
6237 · X509_policy_tree_get0_user_policies
6238
6239 ??? (more info needed)
6240
6241 my $rv = Net::SSLeay::X509_policy_tree_get0_user_policies($tree);
6242 # $tree - value corresponding to openssl's X509_POLICY_TREE structure
6243 #
6244 # returns: value corresponding to openssl's X509_POLICY_NODE structure (0 on failure)
6245
6246 · X509_policy_tree_level_count
6247
6248 ??? (more info needed)
6249
6250 my $rv = Net::SSLeay::X509_policy_tree_level_count($tree);
6251 # $tree - value corresponding to openssl's X509_POLICY_TREE structure
6252 #
6253 # returns: (integer) count
6254
6255 · X509_verify_cert_error_string
6256
6257 Returns a human readable error string for verification error $n.
6258
6259 my $rv = Net::SSLeay::X509_verify_cert_error_string($n);
6260 # $n - (long) numeric error code
6261 #
6262 # returns: error string
6263
6264 Check openssl doc
6265 <http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html>
6266
6267 · P_X509_add_extensions
6268
6269 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6270
6271 Adds one or more X509 extensions to X509 object $x.
6272
6273 my $rv = Net::SSLeay::P_X509_add_extensions($x, $ca_cert, $nid, $value);
6274 # $x - value corresponding to openssl's X509 structure
6275 # $ca_cert - value corresponding to openssl's X509 structure (issuer's cert - necessary for sertting NID_authority_key_identifier)
6276 # $nid - NID identifying extension to be set
6277 # $value - extension value
6278 #
6279 # returns: 1 on success, 0 on failure
6280
6281 You can set more extensions at once:
6282
6283 my $rv = Net::SSLeay::P_X509_add_extensions($x509, $ca_cert,
6284 &Net::SSLeay::NID_key_usage => 'digitalSignature,keyEncipherment',
6285 &Net::SSLeay::NID_subject_key_identifier => 'hash',
6286 &Net::SSLeay::NID_authority_key_identifier => 'keyid',
6287 &Net::SSLeay::NID_authority_key_identifier => 'issuer',
6288 &Net::SSLeay::NID_basic_constraints => 'CA:FALSE',
6289 &Net::SSLeay::NID_ext_key_usage => 'serverAuth,clientAuth',
6290 &Net::SSLeay::NID_netscape_cert_type => 'server',
6291 &Net::SSLeay::NID_subject_alt_name => 'DNS:s1.dom.com,DNS:s2.dom.com,DNS:s3.dom.com',
6292 );
6293
6294 · P_X509_copy_extensions
6295
6296 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6297
6298 Copies X509 extensions from X509_REQ object to X509 object - handy
6299 when you need to turn X509_REQ into X509 certificate.
6300
6301 Net::SSLeay::P_X509_copy_extensions($x509_req, $x509, $override);
6302 # $x509_req - value corresponding to openssl's X509_REQ structure
6303 # $x509 - value corresponding to openssl's X509 structure
6304 # $override - (integer) flag indication whether to override already existing items in $x509 (default 1)
6305 #
6306 # returns: 1 on success, 0 on failure
6307
6308 · P_X509_get_crl_distribution_points
6309
6310 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
6311 requires at least openssl-0.9.7
6312
6313 Get the list of CRL distribution points from X509 certificate.
6314
6315 my @cdp = Net::SSLeay::P_X509_get_crl_distribution_points($x509);
6316 # $x509 - value corresponding to openssl's X509 structure
6317 #
6318 # returns: list of distribution points (usually URLs)
6319
6320 · P_X509_get_ext_key_usage
6321
6322 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
6323 requires at least openssl-0.9.7
6324
6325 Gets the list of extended key usage of given X509 certificate
6326 $cert.
6327
6328 my @ext_usage = Net::SSLeay::P_X509_get_ext_key_usage($cert, $format);
6329 # $cert - value corresponding to openssl's X509 structure
6330 # $format - choose type of return values: 0=OIDs, 1=NIDs, 2=shortnames, 3=longnames
6331 #
6332 # returns: list of values
6333
6334 Examples:
6335
6336 my @extkeyusage_oid = Net::SSLeay::P_X509_get_ext_key_usage($x509,0);
6337 # returns for example: ("1.3.6.1.5.5.7.3.1", "1.3.6.1.5.5.7.3.2")
6338
6339 my @extkeyusage_nid = Net::SSLeay::P_X509_get_ext_key_usage($x509,1);
6340 # returns for example: (129, 130)
6341
6342 my @extkeyusage_sn = Net::SSLeay::P_X509_get_ext_key_usage($x509,2);
6343 # returns for example: ("serverAuth", "clientAuth")
6344
6345 my @extkeyusage_ln = Net::SSLeay::P_X509_get_ext_key_usage($x509,3);
6346 # returns for example: ("TLS Web Server Authentication", "TLS Web Client Authentication")
6347
6348 · P_X509_get_key_usage
6349
6350 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6351
6352 Gets the list of key usage of given X509 certificate $cert.
6353
6354 my @keyusage = Net::SSLeay::P_X509_get_key_usage($cert);
6355 # $cert - value corresponding to openssl's X509 structure
6356 #
6357 # returns: list of key usage values which can be none, one or more from the following list:
6358 # "digitalSignature"
6359 # "nonRepudiation"
6360 # "keyEncipherment"
6361 # "dataEncipherment"
6362 # "keyAgreement"
6363 # "keyCertSign"
6364 # "cRLSign"
6365 # "encipherOnly"
6366 # "decipherOnly"
6367
6368 · P_X509_get_netscape_cert_type
6369
6370 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6371
6372 Gets the list of Netscape cert types of given X509 certificate
6373 $cert.
6374
6375 Net::SSLeay::P_X509_get_netscape_cert_type($cert);
6376 # $cert - value corresponding to openssl's X509 structure
6377 #
6378 # returns: list of Netscape type values which can be none, one or more from the following list:
6379 # "client"
6380 # "server"
6381 # "email"
6382 # "objsign"
6383 # "reserved"
6384 # "sslCA"
6385 # "emailCA"
6386 # "objCA"
6387
6388 · P_X509_get_pubkey_alg
6389
6390 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6391
6392 Returns ASN1_OBJECT corresponding to X509 certificate public key
6393 algorithm.
6394
6395 my $rv = Net::SSLeay::P_X509_get_pubkey_alg($x);
6396 # $x - value corresponding to openssl's X509 structure
6397 #
6398 # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
6399
6400 To get textual representation use:
6401
6402 my $alg = Net::SSLeay::OBJ_obj2txt(Net::SSLeay::P_X509_get_pubkey_alg($x509));
6403 # returns for example: "rsaEncryption"
6404
6405 · P_X509_get_signature_alg
6406
6407 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6408
6409 Returns ASN1_OBJECT corresponding to X509 signarite key algorithm.
6410
6411 my $rv = Net::SSLeay::P_X509_get_signature_alg($x);
6412 # $x - value corresponding to openssl's X509 structure
6413 #
6414 # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
6415
6416 To get textual representation use:
6417
6418 my $alg = Net::SSLeay::OBJ_obj2txt(Net::SSLeay::P_X509_get_signature_alg($x509))
6419 # returns for example: "sha1WithRSAEncryption"
6420
6421 Low level API: X509_REQ_* related functions
6422
6423 · X509_REQ_new
6424
6425 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6426
6427 Creates a new X509_REQ structure.
6428
6429 my $rv = Net::SSLeay::X509_REQ_new();
6430 #
6431 # returns: value corresponding to openssl's X509_REQ structure (0 on failure)
6432
6433 · X509_REQ_free
6434
6435 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6436
6437 Free an allocated X509_REQ structure.
6438
6439 Net::SSLeay::X509_REQ_free($x);
6440 # $x - value corresponding to openssl's X509_REQ structure
6441 #
6442 # returns: no return value
6443
6444 · X509_REQ_add1_attr_by_NID
6445
6446 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6447
6448 Adds an attribute whose name is defined by a NID $nid. The field
6449 value to be added is in $bytes.
6450
6451 my $rv = Net::SSLeay::X509_REQ_add1_attr_by_NID($req, $nid, $type, $bytes);
6452 # $req - value corresponding to openssl's X509_REQ structure
6453 # $nid - (integer) NID value
6454 # $type - (integer) type of data in $bytes (see below)
6455 # $bytes - data to be set
6456 #
6457 # returns: 1 on success, 0 on failure
6458
6459 # values for $type - use constants:
6460 &Net::SSLeay::MBSTRING_UTF8 - $bytes contains utf8 encoded data
6461 &Net::SSLeay::MBSTRING_ASC - $bytes contains ASCII data
6462
6463 · X509_REQ_digest
6464
6465 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6466
6467 Computes digest/fingerprint of X509_REQ $data using $type hash
6468 function.
6469
6470 my $digest_value = Net::SSLeay::X509_REQ_digest($data, $type);
6471 # $data - value corresponding to openssl's X509_REQ structure
6472 # $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname()
6473 #
6474 # returns: hash value (binary)
6475
6476 #to get printable (hex) value of digest use:
6477 print unpack('H*', $digest_value);
6478
6479 · X509_REQ_get_attr_by_NID
6480
6481 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6482
6483 Retrieve the next index matching $nid after $lastpos ($lastpos
6484 should initially be set to -1).
6485
6486 my $rv = Net::SSLeay::X509_REQ_get_attr_by_NID($req, $nid, $lastpos=-1);
6487 # $req - value corresponding to openssl's X509_REQ structure
6488 # $nid - (integer) NID value
6489 # $lastpos - [optional] (integer) index where to start search (default -1)
6490 #
6491 # returns: index (-1 if there are no more entries)
6492
6493 Note: use "P_X509_REQ_get_attr" to get the actual attribute value -
6494 e.g.
6495
6496 my $index = Net::SSLeay::X509_REQ_get_attr_by_NID($req, $nid);
6497 my @attr_values = Net::SSLeay::P_X509_REQ_get_attr($req, $index);
6498
6499 · X509_REQ_get_attr_by_OBJ
6500
6501 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6502
6503 Retrieve the next index matching $obj after $lastpos ($lastpos
6504 should initially be set to -1).
6505
6506 my $rv = Net::SSLeay::X509_REQ_get_attr_by_OBJ($req, $obj, $lastpos=-1);
6507 # $req - value corresponding to openssl's X509_REQ structure
6508 # $obj - value corresponding to openssl's ASN1_OBJECT structure
6509 # $lastpos - [optional] (integer) index where to start search (default -1)
6510 #
6511 # returns: index (-1 if there are no more entries)
6512
6513 Note: use "P_X509_REQ_get_attr" to get the actual attribute value -
6514 e.g.
6515
6516 my $index = Net::SSLeay::X509_REQ_get_attr_by_NID($req, $nid);
6517 my @attr_values = Net::SSLeay::P_X509_REQ_get_attr($req, $index);
6518
6519 · X509_REQ_get_attr_count
6520
6521 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6522
6523 Returns the total number of attributes in $req.
6524
6525 my $rv = Net::SSLeay::X509_REQ_get_attr_count($req);
6526 # $req - value corresponding to openssl's X509_REQ structure
6527 #
6528 # returns: (integer) items count
6529
6530 · X509_REQ_get_pubkey
6531
6532 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6533
6534 Returns public key corresponding to given X509_REQ object $x.
6535
6536 my $rv = Net::SSLeay::X509_REQ_get_pubkey($x);
6537 # $x - value corresponding to openssl's X509_REQ structure
6538 #
6539 # returns: value corresponding to openssl's EVP_PKEY structure (0 on failure)
6540
6541 · X509_REQ_get_subject_name
6542
6543 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6544
6545 Returns X509_NAME object corresponding to subject name of given
6546 X509_REQ object $x.
6547
6548 my $rv = Net::SSLeay::X509_REQ_get_subject_name($x);
6549 # $x - value corresponding to openssl's X509_REQ structure
6550 #
6551 # returns: value corresponding to openssl's X509_NAME structure (0 on failure)
6552
6553 · X509_REQ_get_version
6554
6555 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6556
6557 Returns 'version' value for given X509_REQ object $x.
6558
6559 my $rv = Net::SSLeay::X509_REQ_get_version($x);
6560 # $x - value corresponding to openssl's X509_REQ structure
6561 #
6562 # returns: (integer) version e.g. 0 = "version 1"
6563
6564 · X509_REQ_set_pubkey
6565
6566 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6567
6568 Sets public key of given X509_REQ object $x to $pkey.
6569
6570 my $rv = Net::SSLeay::X509_REQ_set_pubkey($x, $pkey);
6571 # $x - value corresponding to openssl's X509_REQ structure
6572 # $pkey - value corresponding to openssl's EVP_PKEY structure
6573 #
6574 # returns: 1 on success, 0 on failure
6575
6576 · X509_REQ_set_subject_name
6577
6578 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6579
6580 Sets subject name of given X509_REQ object $x to X509_NAME object
6581 $name.
6582
6583 my $rv = Net::SSLeay::X509_REQ_set_subject_name($x, $name);
6584 # $x - value corresponding to openssl's X509_REQ structure
6585 # $name - value corresponding to openssl's X509_NAME structure
6586 #
6587 # returns: 1 on success, 0 on failure
6588
6589 · X509_REQ_set_version
6590
6591 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6592
6593 Sets 'version' of given X509_REQ object $x to $version.
6594
6595 my $rv = Net::SSLeay::X509_REQ_set_version($x, $version);
6596 # $x - value corresponding to openssl's X509_REQ structure
6597 # $version - (integer) e.g. 0 = "version 1"
6598 #
6599 # returns: 1 on success, 0 on failure
6600
6601 · X509_REQ_sign
6602
6603 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6604
6605 Sign X509_REQ object $x with private key $pk (using digest
6606 algorithm $md).
6607
6608 my $rv = Net::SSLeay::X509_REQ_sign($x, $pk, $md);
6609 # $x - value corresponding to openssl's X509_REQ structure
6610 # $pk - value corresponding to openssl's EVP_PKEY structure (requestor's private key)
6611 # $md - value corresponding to openssl's EVP_MD structure
6612 #
6613 # returns: 1 on success, 0 on failure
6614
6615 · X509_REQ_verify
6616
6617 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6618
6619 Verifies X509_REQ object $x using public key $r (pubkey of
6620 requesting party).
6621
6622 my $rv = Net::SSLeay::X509_REQ_verify($x, $r);
6623 # $x - value corresponding to openssl's X509_REQ structure
6624 # $r - value corresponding to openssl's EVP_PKEY structure
6625 #
6626 # returns: 0 - verify failure, 1 - verify OK, <0 - error
6627
6628 · P_X509_REQ_add_extensions
6629
6630 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6631
6632 Adds one or more X509 extensions to X509_REQ object $x.
6633
6634 my $rv = Net::SSLeay::P_X509_REQ_add_extensions($x, $nid, $value);
6635 # $x - value corresponding to openssl's X509_REQ structure
6636 # $nid - NID identifying extension to be set
6637 # $value - extension value
6638 #
6639 # returns: 1 on success, 0 on failure
6640
6641 You can set more extensions at once:
6642
6643 my $rv = Net::SSLeay::P_X509_REQ_add_extensions($x509_req,
6644 &Net::SSLeay::NID_key_usage => 'digitalSignature,keyEncipherment',
6645 &Net::SSLeay::NID_basic_constraints => 'CA:FALSE',
6646 &Net::SSLeay::NID_ext_key_usage => 'serverAuth,clientAuth',
6647 &Net::SSLeay::NID_netscape_cert_type => 'server',
6648 &Net::SSLeay::NID_subject_alt_name => 'DNS:s1.com,DNS:s2.com',
6649 &Net::SSLeay::NID_crl_distribution_points => 'URI:http://pki.com/crl1,URI:http://pki.com/crl2',
6650 );
6651
6652 · P_X509_REQ_get_attr
6653
6654 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
6655 requires at least openssl-0.9.7
6656
6657 Returns attribute value for X509_REQ's attribute at index $n.
6658
6659 Net::SSLeay::P_X509_REQ_get_attr($req, $n);
6660 # $req - value corresponding to openssl's X509_REQ structure
6661 # $n - (integer) attribute index
6662 #
6663 # returns: value corresponding to openssl's ASN1_STRING structure
6664
6665 Low level API: X509_CRL_* related functions
6666
6667 · X509_CRL_new
6668
6669 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6670
6671 Creates a new X509_CRL structure.
6672
6673 my $rv = Net::SSLeay::X509_CRL_new();
6674 #
6675 # returns: value corresponding to openssl's X509_CRL structure (0 on failure)
6676
6677 · X509_CRL_free
6678
6679 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6680
6681 Free an allocated X509_CRL structure.
6682
6683 Net::SSLeay::X509_CRL_free($x);
6684 # $x - value corresponding to openssl's X509_CRL structure
6685 #
6686 # returns: no return value
6687
6688 · X509_CRL_digest
6689
6690 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6691
6692 Computes digest/fingerprint of X509_CRL $data using $type hash
6693 function.
6694
6695 my $digest_value = Net::SSLeay::X509_CRL_digest($data, $type);
6696 # $data - value corresponding to openssl's X509_CRL structure
6697 # $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname()
6698 #
6699 # returns: hash value (binary)
6700
6701 Example:
6702
6703 my $x509_crl
6704 my $md = Net::SSLeay::EVP_get_digestbyname("sha1");
6705 my $digest_value = Net::SSLeay::X509_CRL_digest($x509_crl, $md);
6706 #to get printable (hex) value of digest use:
6707 print "digest=", unpack('H*', $digest_value), "\n";
6708
6709 · X509_CRL_get_ext
6710
6711 COMPATIBILITY: not available in Net-SSLeay-1.54 and before
6712
6713 Returns X509_EXTENSION from $x509 based on given position/index.
6714
6715 my $rv = Net::SSLeay::X509_CRL_get_ext($x509, $index);
6716 # $x509 - value corresponding to openssl's X509_CRL structure
6717 # $index - (integer) position/index of extension within $x509
6718 #
6719 # returns: value corresponding to openssl's X509_EXTENSION structure (0 on failure)
6720
6721 · X509_CRL_get_ext_by_NID
6722
6723 COMPATIBILITY: not available in Net-SSLeay-1.54 and before
6724
6725 Returns X509_EXTENSION from $x509 based on given NID.
6726
6727 my $rv = Net::SSLeay::X509_CRL_get_ext_by_NID($x509, $nid, $loc);
6728 # $x509 - value corresponding to openssl's X509_CRL structure
6729 # $nid - (integer) NID value
6730 # $loc - (integer) position to start lookup at
6731 #
6732 # returns: position/index of extension, negative value on error
6733 # call Net::SSLeay::X509_CRL_get_ext($x509, $rv) to get the actual extension
6734
6735 · X509_CRL_get_ext_count
6736
6737 COMPATIBILITY: not available in Net-SSLeay-1.54 and before
6738
6739 Returns the total number of extensions in X509_CRL object $x.
6740
6741 my $rv = Net::SSLeay::X509_CRL_get_ext_count($x);
6742 # $x - value corresponding to openssl's X509_CRL structure
6743 #
6744 # returns: count of extensions
6745
6746 · X509_CRL_get_issuer
6747
6748 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6749
6750 Returns X509_NAME object corresponding to the issuer of X509_CRL
6751 $x.
6752
6753 my $rv = Net::SSLeay::X509_CRL_get_issuer($x);
6754 # $x - value corresponding to openssl's X509_CRL structure
6755 #
6756 # returns: value corresponding to openssl's X509_NAME structure (0 on failure)
6757
6758 See other "X509_NAME_*" functions to get more info from X509_NAME
6759 structure.
6760
6761 · X509_CRL_get_lastUpdate
6762
6763 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6764
6765 Returns 'lastUpdate' date-time value of X509_CRL object $x.
6766
6767 my $rv = Net::SSLeay::X509_CRL_get_lastUpdate($x);
6768 # $x - value corresponding to openssl's X509_CRL structure
6769 #
6770 # returns: value corresponding to openssl's ASN1_TIME structure (0 on failure)
6771
6772 · X509_CRL_get_nextUpdate
6773
6774 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6775
6776 Returns 'nextUpdate' date-time value of X509_CRL object $x.
6777
6778 my $rv = Net::SSLeay::X509_CRL_get_nextUpdate($x);
6779 # $x - value corresponding to openssl's X509_CRL structure
6780 #
6781 # returns: value corresponding to openssl's ASN1_TIME structure (0 on failure)
6782
6783 · X509_CRL_get_version
6784
6785 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6786
6787 Returns 'version' value of given X509_CRL structure $x.
6788
6789 my $rv = Net::SSLeay::X509_CRL_get_version($x);
6790 # $x - value corresponding to openssl's X509_CRL structure
6791 #
6792 # returns: (integer) version
6793
6794 · X509_CRL_set_issuer_name
6795
6796 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
6797 requires at least openssl-0.9.7
6798
6799 Sets the issuer of X509_CRL object $x to X509_NAME object $name.
6800
6801 my $rv = Net::SSLeay::X509_CRL_set_issuer_name($x, $name);
6802 # $x - value corresponding to openssl's X509_CRL structure
6803 # $name - value corresponding to openssl's X509_NAME structure
6804 #
6805 # returns: 1 on success, 0 on failure
6806
6807 · X509_CRL_set_lastUpdate
6808
6809 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
6810 requires at least openssl-0.9.7
6811
6812 Sets 'lastUpdate' value of X509_CRL object $x to $tm.
6813
6814 my $rv = Net::SSLeay::X509_CRL_set_lastUpdate($x, $tm);
6815 # $x - value corresponding to openssl's X509_CRL structure
6816 # $tm - value corresponding to openssl's ASN1_TIME structure
6817 #
6818 # returns: 1 on success, 0 on failure
6819
6820 · X509_CRL_set_nextUpdate
6821
6822 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
6823 requires at least openssl-0.9.7
6824
6825 Sets 'nextUpdate' value of X509_CRL object $x to $tm.
6826
6827 my $rv = Net::SSLeay::X509_CRL_set_nextUpdate($x, $tm);
6828 # $x - value corresponding to openssl's X509_CRL structure
6829 # $tm - value corresponding to openssl's ASN1_TIME structure
6830 #
6831 # returns: 1 on success, 0 on failure
6832
6833 · X509_CRL_set_version
6834
6835 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
6836 requires at least openssl-0.9.7
6837
6838 Sets 'version' value of given X509_CRL structure $x to $version.
6839
6840 my $rv = Net::SSLeay::X509_CRL_set_version($x, $version);
6841 # $x - value corresponding to openssl's X509_CRL structure
6842 # $version - (integer) version number (1 = version 2 CRL)
6843 #
6844 # returns: 1 on success, 0 on failure
6845
6846 Note that if you want to use any X509_CRL extension you need to set
6847 "version 2 CRL" - "Net::SSLeay::X509_CRL_set_version($x, 1)".
6848
6849 · X509_CRL_sign
6850
6851 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6852
6853 Sign X509_CRL object $x with private key $pkey (using digest
6854 algorithm $md).
6855
6856 my $rv = Net::SSLeay::X509_CRL_sign($x, $pkey, $md);
6857 # $x - value corresponding to openssl's X509_CRL structure
6858 # $pkey - value corresponding to openssl's EVP_PKEY structure
6859 # $md - value corresponding to openssl's EVP_MD structure
6860 #
6861 # returns: 1 on success, 0 on failure
6862
6863 · X509_CRL_sort
6864
6865 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
6866 requires at least openssl-0.9.7
6867
6868 Sorts the data of X509_CRL object so it will be written in serial
6869 number order.
6870
6871 my $rv = Net::SSLeay::X509_CRL_sort($x);
6872 # $x - value corresponding to openssl's X509_CRL structure
6873 #
6874 # returns: 1 on success, 0 on failure
6875
6876 · X509_CRL_verify
6877
6878 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6879
6880 Verifies X509_CRL object $a using public key $r (pubkey of issuing
6881 CA).
6882
6883 my $rv = Net::SSLeay::X509_CRL_verify($a, $r);
6884 # $a - value corresponding to openssl's X509_CRL structure
6885 # $r - value corresponding to openssl's EVP_PKEY structure
6886 #
6887 # returns: 0 - verify failure, 1 - verify OK, <0 - error
6888
6889 · P_X509_CRL_add_revoked_serial_hex
6890
6891 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
6892 requires at least openssl-0.9.7
6893
6894 Adds given serial number $serial_hex to X509_CRL object $crl.
6895
6896 Net::SSLeay::P_X509_CRL_add_revoked_serial_hex($crl, $serial_hex, $rev_time, $reason_code, $comp_time);
6897 # $crl - value corresponding to openssl's X509_CRL structure
6898 # $serial_hex - string (hexadecimal) representation of serial number
6899 # $rev_time - (revocation time) value corresponding to openssl's ASN1_TIME structure
6900 # $reason_code - [optional] (integer) reason code (see below) - default 0
6901 # $comp_time - [optional] (compromise time) value corresponding to openssl's ASN1_TIME structure
6902 #
6903 # returns: no return value
6904
6905 reason codes:
6906 0 - unspecified
6907 1 - keyCompromise
6908 2 - CACompromise
6909 3 - affiliationChanged
6910 4 - superseded
6911 5 - cessationOfOperation
6912 6 - certificateHold
6913 7 - removeFromCRL
6914
6915 · P_X509_CRL_get_serial
6916
6917 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
6918 requires at least openssl-0.9.7
6919
6920 Returns serial number of X509_CRL object.
6921
6922 my $rv = Net::SSLeay::P_X509_CRL_get_serial($crl);
6923 # $crl - value corresponding to openssl's X509_CRL structure
6924 #
6925 # returns: value corresponding to openssl's ASN1_INTEGER structure (0 on failure)
6926
6927 · P_X509_CRL_set_serial
6928
6929 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
6930 requires at least openssl-0.9.7
6931
6932 Sets serial number of X509_CRL object to $crl_number.
6933
6934 my $rv = Net::SSLeay::P_X509_CRL_set_serial($crl, $crl_number);
6935 # $crl - value corresponding to openssl's X509_CRL structure
6936 # $crl_number - value corresponding to openssl's ASN1_INTEGER structure
6937 #
6938 # returns: 1 on success, 0 on failure
6939
6940 Low level API: X509_EXTENSION_* related functions
6941
6942 · X509_EXTENSION_get_critical
6943
6944 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6945
6946 Returns 'critical' flag of given X509_EXTENSION object $ex.
6947
6948 my $rv = Net::SSLeay::X509_EXTENSION_get_critical($ex);
6949 # $ex - value corresponding to openssl's X509_EXTENSION structure
6950 #
6951 # returns: (integer) 1 - critical, 0 - noncritical
6952
6953 · X509_EXTENSION_get_data
6954
6955 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6956
6957 Returns value (raw data) of X509_EXTENSION object $ne.
6958
6959 my $rv = Net::SSLeay::X509_EXTENSION_get_data($ne);
6960 # $ne - value corresponding to openssl's X509_EXTENSION structure
6961 #
6962 # returns: value corresponding to openssl's ASN1_OCTET_STRING structure (0 on failure)
6963
6964 Note: you can use "P_ASN1_STRING_get" to convert ASN1_OCTET_STRING
6965 into perl scalar variable.
6966
6967 · X509_EXTENSION_get_object
6968
6969 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6970
6971 Returns OID (ASN1_OBJECT) of X509_EXTENSION object $ne.
6972
6973 my $rv = Net::SSLeay::X509_EXTENSION_get_object($ex);
6974 # $ex - value corresponding to openssl's X509_EXTENSION structure
6975 #
6976 # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
6977
6978 · X509V3_EXT_print
6979
6980 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
6981
6982 Returns string representation of given X509_EXTENSION object $ext.
6983
6984 Net::SSLeay::X509V3_EXT_print($ext, $flags, $utf8_decode);
6985 # $ext - value corresponding to openssl's X509_EXTENSION structure
6986 # $flags - [optional] (integer) Currently the flag argument is unused and should be set to 0
6987 # $utf8_decode - [optional] 0 or 1 whether the returned value should be utf8 decoded (default=0)
6988 #
6989 # returns: no return value
6990
6991 · X509V3_EXT_d2i
6992
6993 Parses an extension and returns its internal structure.
6994
6995 my $rv = Net::SSLeay::X509V3_EXT_d2i($ext);
6996 # $ext - value corresponding to openssl's X509_EXTENSION structure
6997 #
6998 # returns: pointer ???
6999
7000 Low level API: X509_NAME_* related functions
7001
7002 · X509_NAME_ENTRY_get_data
7003
7004 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
7005
7006 Retrieves the field value of $ne in and ASN1_STRING structure.
7007
7008 my $rv = Net::SSLeay::X509_NAME_ENTRY_get_data($ne);
7009 # $ne - value corresponding to openssl's X509_NAME_ENTRY structure
7010 #
7011 # returns: value corresponding to openssl's ASN1_STRING structure (0 on failure)
7012
7013 Check openssl doc
7014 <http://www.openssl.org/docs/crypto/X509_NAME_ENTRY_get_object.html>
7015
7016 · X509_NAME_ENTRY_get_object
7017
7018 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
7019
7020 Retrieves the field name of $ne in and ASN1_OBJECT structure.
7021
7022 my $rv = Net::SSLeay::X509_NAME_ENTRY_get_object($ne);
7023 # $ne - value corresponding to openssl's X509_NAME_ENTRY structure
7024 #
7025 # returns: value corresponding to openssl's ASN1_OBJECT structure (0 on failure)
7026
7027 Check openssl doc
7028 <http://www.openssl.org/docs/crypto/X509_NAME_ENTRY_get_object.html>
7029
7030 · X509_NAME_new
7031
7032 COMPATIBILITY: not available in Net-SSLeay-1.55 and before;
7033 requires at least openssl-0.9.5
7034
7035 Creates a new X509_NAME structure. Adds a field whose name is
7036 defined by a string $field. The field value to be added is in
7037 $bytes.
7038
7039 my $rv = Net::SSLeay::X509_NAME_new();
7040 #
7041 # returns: value corresponding to openssl's X509_NAME structure (0 on failure)
7042
7043 · X509_NAME_hash
7044
7045 COMPATIBILITY: not available in Net-SSLeay-1.55 and before;
7046 requires at least openssl-0.9.5
7047
7048 Sort of a checksum of issuer name $name. The result is not a full
7049 hash (e.g. sha-1), it is kind-of-a-hash truncated to the size of
7050 'unsigned long' (32 bits). The resulting value might differ across
7051 different openssl versions for the same X509 certificate.
7052
7053 my $rv = Net::SSLeay::X509_NAME_hash($name);
7054 # $name - value corresponding to openssl's X509_NAME structure
7055 #
7056 # returns: number representing checksum
7057
7058 · X509_NAME_add_entry_by_txt
7059
7060 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
7061 requires at least openssl-0.9.5
7062
7063 Adds a field whose name is defined by a string $field. The field
7064 value to be added is in $bytes.
7065
7066 my $rv = Net::SSLeay::X509_NAME_add_entry_by_txt($name, $field, $type, $bytes, $len, $loc, $set);
7067 # $name - value corresponding to openssl's X509_NAME structure
7068 # $field - (string) field definition (name) - e.g. "organizationName"
7069 # $type - (integer) type of data in $bytes (see below)
7070 # $bytes - data to be set
7071 # $loc - [optional] (integer) index where the new entry is inserted: if it is -1 (default) it is appended
7072 # $set - [optional] (integer) determines how the new type is added. If it is 0 (default) a new RDN is created
7073 #
7074 # returns: 1 on success, 0 on failure
7075
7076 # values for $type - use constants:
7077 &Net::SSLeay::MBSTRING_UTF8 - $bytes contains utf8 encoded data
7078 &Net::SSLeay::MBSTRING_ASC - $bytes contains ASCII data
7079
7080 Unicode note: when passing non-ascii (unicode) string in $bytes do
7081 not forget to set "$flags = &Net::SSLeay::MBSTRING_UTF8" and encode
7082 the perl $string via "$bytes = encode('utf-8', $string)".
7083
7084 Check openssl doc
7085 <http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html>
7086
7087 · X509_NAME_add_entry_by_NID
7088
7089 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
7090 requires at least openssl-0.9.5
7091
7092 Adds a field whose name is defined by a NID $nid. The field value
7093 to be added is in $bytes.
7094
7095 my $rv = Net::SSLeay::X509_NAME_add_entry_by_NID($name, $nid, $type, $bytes, $len, $loc, $set);
7096 # $name - value corresponding to openssl's X509_NAME structure
7097 # $nid - (integer) field definition - NID value
7098 # $type - (integer) type of data in $bytes (see below)
7099 # $bytes - data to be set
7100 # $loc - [optional] (integer) index where the new entry is inserted: if it is -1 (default) it is appended
7101 # $set - [optional] (integer) determines how the new type is added. If it is 0 (default) a new RDN is created
7102 #
7103 # returns: 1 on success, 0 on failure
7104
7105 Check openssl doc
7106 <http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html>
7107
7108 · X509_NAME_add_entry_by_OBJ
7109
7110 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
7111 requires at least openssl-0.9.5
7112
7113 Adds a field whose name is defined by a object (OID) $obj . The
7114 field value to be added is in $bytes.
7115
7116 my $rv = Net::SSLeay::X509_NAME_add_entry_by_OBJ($name, $obj, $type, $bytes, $len, $loc, $set);
7117 # $name - value corresponding to openssl's X509_NAME structure
7118 # $obj - field definition - value corresponding to openssl's ASN1_OBJECT structure
7119 # $type - (integer) type of data in $bytes (see below)
7120 # $bytes - data to be set
7121 # $loc - [optional] (integer) index where the new entry is inserted: if it is -1 (default) it is appended
7122 # $set - [optional] (integer) determines how the new type is added. If it is 0 (default) a new RDN is created
7123 #
7124 # returns: 1 on success, 0 on failure
7125
7126 Check openssl doc
7127 <http://www.openssl.org/docs/crypto/X509_NAME_add_entry_by_txt.html>
7128
7129 · X509_NAME_cmp
7130
7131 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
7132
7133 Compares two X509_NAME obejcts.
7134
7135 my $rv = Net::SSLeay::X509_NAME_cmp($a, $b);
7136 # $a - value corresponding to openssl's X509_NAME structure
7137 # $b - value corresponding to openssl's X509_NAME structure
7138 #
7139 # returns: 0 if $a matches $b; non zero otherwise
7140
7141 · X509_NAME_digest
7142
7143 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
7144
7145 Computes digest/fingerprint of X509_NAME $data using $type hash
7146 function.
7147
7148 my $digest_value = Net::SSLeay::X509_NAME_digest($data, $type);
7149 # $data - value corresponding to openssl's X509_NAME structure
7150 # $type - value corresponding to openssl's EVP_MD structure - e.g. got via EVP_get_digestbyname()
7151 #
7152 # returns: hash value (binary)
7153
7154 #to get printable (hex) value of digest use:
7155 print unpack('H*', $digest_value);
7156
7157 · X509_NAME_entry_count
7158
7159 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
7160
7161 Returns the total number of entries in $name.
7162
7163 my $rv = Net::SSLeay::X509_NAME_entry_count($name);
7164 # $name - value corresponding to openssl's X509_NAME structure
7165 #
7166 # returns: (integer) entries count
7167
7168 Check openssl doc
7169 <http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html>
7170
7171 · X509_NAME_get_entry
7172
7173 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
7174
7175 Retrieves the X509_NAME_ENTRY from $name corresponding to index
7176 $loc. Acceptable values for $loc run from 0 to
7177 "Net::SSLeay::X509_NAME_entry_count($name)- 1". The value returned
7178 is an internal pointer which must not be freed.
7179
7180 my $rv = Net::SSLeay::X509_NAME_get_entry($name, $loc);
7181 # $name - value corresponding to openssl's X509_NAME structure
7182 # $loc - (integer) index of wanted entry
7183 #
7184 # returns: value corresponding to openssl's X509_NAME_ENTRY structure (0 on failure)
7185
7186 Check openssl doc
7187 <http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html>
7188
7189 · X509_NAME_print_ex
7190
7191 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
7192
7193 Returns a string with human readable version of $name.
7194
7195 Net::SSLeay::X509_NAME_print_ex($name, $flags, $utf8_decode);
7196 # $name - value corresponding to openssl's X509_NAME structure
7197 # $flags - [optional] conversion flags (default XN_FLAG_RFC2253) - see below
7198 # $utf8_decode - [optional] 0 or 1 whether the returned value should be utf8 decoded (default=0)
7199 #
7200 # returns: string representation of $name
7201
7202 #available conversion flags - use constants:
7203 &Net::SSLeay::XN_FLAG_COMPAT
7204 &Net::SSLeay::XN_FLAG_DN_REV
7205 &Net::SSLeay::XN_FLAG_DUMP_UNKNOWN_FIELDS
7206 &Net::SSLeay::XN_FLAG_FN_ALIGN
7207 &Net::SSLeay::XN_FLAG_FN_LN
7208 &Net::SSLeay::XN_FLAG_FN_MASK
7209 &Net::SSLeay::XN_FLAG_FN_NONE
7210 &Net::SSLeay::XN_FLAG_FN_OID
7211 &Net::SSLeay::XN_FLAG_FN_SN
7212 &Net::SSLeay::XN_FLAG_MULTILINE
7213 &Net::SSLeay::XN_FLAG_ONELINE
7214 &Net::SSLeay::XN_FLAG_RFC2253
7215 &Net::SSLeay::XN_FLAG_SEP_COMMA_PLUS
7216 &Net::SSLeay::XN_FLAG_SEP_CPLUS_SPC
7217 &Net::SSLeay::XN_FLAG_SEP_MASK
7218 &Net::SSLeay::XN_FLAG_SEP_MULTILINE
7219 &Net::SSLeay::XN_FLAG_SEP_SPLUS_SPC
7220 &Net::SSLeay::XN_FLAG_SPC_EQ
7221
7222 Most likely you will be fine with default:
7223
7224 Net::SSLeay::X509_NAME_print_ex($name, &Net::SSLeay::XN_FLAG_RFC2253);
7225
7226 Or you might want RFC2253-like output without utf8 chars escaping:
7227
7228 use Net::SSLeay qw/XN_FLAG_RFC2253 ASN1_STRFLGS_ESC_MSB/;
7229 my $flag_rfc22536_utf8 = (XN_FLAG_RFC2253) & (~ ASN1_STRFLGS_ESC_MSB);
7230 my $result = Net::SSLeay::X509_NAME_print_ex($name, $flag_rfc22536_utf8, 1);
7231
7232 Check openssl doc
7233 <http://www.openssl.org/docs/crypto/X509_NAME_print_ex.html>
7234
7235 · X509_NAME_get_text_by_NID
7236
7237 Retrieves the text from the first entry in name which matches $nid,
7238 if no such entry exists -1 is returned.
7239
7240 openssl note: this is a legacy function which has various
7241 limitations which makes it of minimal use in practice. It can only
7242 find the first matching entry and will copy the contents of the
7243 field verbatim: this can be highly confusing if the target is a
7244 multicharacter string type like a BMPString or a UTF8String.
7245
7246 Net::SSLeay::X509_NAME_get_text_by_NID($name, $nid);
7247 # $name - value corresponding to openssl's X509_NAME structure
7248 # $nid - NID value (integer)
7249 #
7250 # returns: text value
7251
7252 Check openssl doc
7253 <http://www.openssl.org/docs/crypto/X509_NAME_get_index_by_NID.html>
7254
7255 · X509_NAME_oneline
7256
7257 Return an ASCII version of $name.
7258
7259 Net::SSLeay::X509_NAME_oneline($name);
7260 # $name - value corresponding to openssl's X509_NAME structure
7261 #
7262 # returns: (string) ASCII version of $name
7263
7264 Check openssl doc
7265 <http://www.openssl.org/docs/crypto/X509_NAME_print_ex.html>
7266
7267 · sk_X509_NAME_free
7268
7269 Free an allocated STACK_OF(X509_NAME) structure.
7270
7271 Net::SSLeay::sk_X509_NAME_free($sk);
7272 # $sk - value corresponding to openssl's STACK_OF(X509_NAME) structure
7273 #
7274 # returns: no return value
7275
7276 · sk_X509_NAME_num
7277
7278 Return number of items in STACK_OF(X509_NAME)
7279
7280 my $rv = Net::SSLeay::sk_X509_NAME_num($sk);
7281 # $sk - value corresponding to openssl's STACK_OF(X509_NAME) structure
7282 #
7283 # returns: number of items
7284
7285 · sk_X509_NAME_value
7286
7287 Returns X509_NAME from position $index in STACK_OF(X509_NAME)
7288
7289 my $rv = Net::SSLeay::sk_X509_NAME_value($sk, $i);
7290 # $sk - value corresponding to openssl's STACK_OF(X509_NAME) structure
7291 # $i - (integer) index/position
7292 #
7293 # returns: value corresponding to openssl's X509_NAME structure (0 on failure)
7294
7295 · add_file_cert_subjects_to_stack
7296
7297 Add a file of certs to a stack. All certs in $file that are not
7298 already in the $stackCAs will be added.
7299
7300 my $rv = Net::SSLeay::add_file_cert_subjects_to_stack($stackCAs, $file);
7301 # $stackCAs - value corresponding to openssl's STACK_OF(X509_NAME) structure
7302 # $file - (string) filename
7303 #
7304 # returns: 1 on success, 0 on failure
7305
7306 · add_dir_cert_subjects_to_stack
7307
7308 Add a directory of certs to a stack. All certs in $dir that are not
7309 already in the $stackCAs will be added.
7310
7311 my $rv = Net::SSLeay::add_dir_cert_subjects_to_stack($stackCAs, $dir);
7312 # $stackCAs - value corresponding to openssl's STACK_OF(X509_NAME) structure
7313 # $dir - (string) the directory to append from. All files in this directory will be examined as potential certs. Any that are acceptable to SSL_add_dir_cert_subjects_to_stack() that are not already in the stack will be included.
7314 #
7315 # returns: 1 on success, 0 on failure
7316
7317 Low level API: X509_STORE_* related functions
7318
7319 · X509_STORE_CTX_new
7320
7321 returns a newly initialised X509_STORE_CTX structure.
7322
7323 · X509_verify_cert
7324
7325 The X509_verify_cert() function attempts to discover and validate a
7326 certificate chain based on parameters in ctx. A complete
7327 description of the process is contained in the verify(1) manual
7328 page.
7329
7330 · X509_STORE_CTX_get_current_cert
7331
7332 Returns the certificate in ctx which caused the error or 0 if no
7333 certificate is relevant.
7334
7335 my $rv = Net::SSLeay::X509_STORE_CTX_get_current_cert($x509_store_ctx);
7336 # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
7337 #
7338 # returns: value corresponding to openssl's X509 structure (0 on failure)
7339
7340 Check openssl doc
7341 <http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html>
7342
7343 · X509_STORE_CTX_get_error
7344
7345 Returns the error code of $ctx.
7346
7347 my $rv = Net::SSLeay::X509_STORE_CTX_get_error($x509_store_ctx);
7348 # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
7349 #
7350 # returns: (integer) error code
7351
7352 For more info about erro code values check function
7353 "get_verify_result".
7354
7355 Check openssl doc
7356 <http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html>
7357
7358 · X509_STORE_CTX_get_error_depth
7359
7360 Returns the depth of the error. This is a non-negative integer
7361 representing where in the certificate chain the error occurred. If
7362 it is zero it occurred in the end entity certificate, one if it is
7363 the certificate which signed the end entity certificate and so on.
7364
7365 my $rv = Net::SSLeay::X509_STORE_CTX_get_error_depth($x509_store_ctx);
7366 # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
7367 #
7368 # returns: (integer) depth
7369
7370 Check openssl doc
7371 <http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html>
7372
7373 · X509_STORE_CTX_get_ex_data
7374
7375 Is used to retrieve the information for $idx from $x509_store_ctx.
7376
7377 my $rv = Net::SSLeay::X509_STORE_CTX_get_ex_data($x509_store_ctx, $idx);
7378 # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
7379 # $idx - (integer) index for application specific data
7380 #
7381 # returns: pointer to ???
7382
7383 · X509_STORE_CTX_set_ex_data
7384
7385 Is used to store application data at arg for idx into
7386 $x509_store_ctx.
7387
7388 my $rv = Net::SSLeay::X509_STORE_CTX_set_ex_data($x509_store_ctx, $idx, $data);
7389 # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
7390 # $idx - (integer) ???
7391 # $data - (pointer) ???
7392 #
7393 # returns: 1 on success, 0 on failure
7394
7395 · X509_STORE_CTX_set_cert
7396
7397 Sets the certificate to be verified in $x509_store_ctx to $x.
7398
7399 Net::SSLeay::X509_STORE_CTX_set_cert($x509_store_ctx, $x);
7400 # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
7401 # $x - value corresponding to openssl's X509 structure
7402 #
7403 # returns: no return value
7404
7405 Check openssl doc
7406 <http://www.openssl.org/docs/crypto/X509_STORE_CTX_new.html>
7407
7408 · X509_STORE_CTX_set_error
7409
7410 Sets the error code of $ctx to $s. For example it might be used in
7411 a verification callback to set an error based on additional checks.
7412
7413 Net::SSLeay::X509_STORE_CTX_set_error($x509_store_ctx, $s);
7414 # $x509_store_ctx - value corresponding to openssl's X509_STORE_CTX structure
7415 # $s - (integer) error id
7416 #
7417 # returns: no return value
7418
7419 Check openssl doc
7420 <http://www.openssl.org/docs/crypto/X509_STORE_CTX_get_error.html>
7421
7422 · X509_STORE_add_cert
7423
7424 Adds X509 certificate $x into the X509_STORE $store.
7425
7426 my $rv = Net::SSLeay::X509_STORE_add_cert($store, $x);
7427 # $store - value corresponding to openssl's X509_STORE structure
7428 # $x - value corresponding to openssl's X509 structure
7429 #
7430 # returns: 1 on success, 0 on failure
7431
7432 · X509_STORE_add_crl
7433
7434 Adds X509 CRL $x into the X509_STORE $store.
7435
7436 my $rv = Net::SSLeay::X509_STORE_add_crl($store, $x);
7437 # $store - value corresponding to openssl's X509_STORE structure
7438 # $x - value corresponding to openssl's X509_CRL structure
7439 #
7440 # returns: 1 on success, 0 on failure
7441
7442 · X509_STORE_set1_param
7443
7444 ??? (more info needed)
7445
7446 my $rv = Net::SSLeay::X509_STORE_set1_param($store, $pm);
7447 # $store - value corresponding to openssl's X509_STORE structure
7448 # $pm - value corresponding to openssl's X509_VERIFY_PARAM structure
7449 #
7450 # returns: 1 on success, 0 on failure
7451
7452 · X509_STORE_set_flags
7453
7454 Net::SSLeay::X509_STORE_set_flags($ctx, $flags);
7455 # $ctx - value corresponding to openssl's X509_STORE structure
7456 # $flags - (unsigned long) flags to be set (bitmask)
7457 #
7458 # returns: no return value
7459
7460 #to create $flags value use corresponding constants like
7461 $flags = Net::SSLeay::X509_V_FLAG_CRL_CHECK();
7462
7463 For more details about $flags bitmask see
7464 "X509_VERIFY_PARAM_set_flags".
7465
7466 · X509_STORE_set_purpose
7467
7468 Net::SSLeay::X509_STORE_set_purpose($ctx, $purpose);
7469 # $ctx - value corresponding to openssl's X509_STORE structure
7470 # $purpose - (integer) purpose identifier
7471 #
7472 # returns: no return value
7473
7474 For more details about $purpose identifier check "CTX_set_purpose".
7475
7476 · X509_STORE_set_trust
7477
7478 Net::SSLeay::X509_STORE_set_trust($ctx, $trust);
7479 # $ctx - value corresponding to openssl's X509_STORE structure
7480 # $trust - (integer) trust identifier
7481 #
7482 # returns: no return value
7483
7484 For more details about $trust identifier check "CTX_set_trust".
7485
7486 Low level API: X509_VERIFY_PARAM_* related functions
7487
7488 · X509_VERIFY_PARAM_add0_policy
7489
7490 Enables policy checking (it is disabled by default) and adds
7491 $policy to the acceptable policy set.
7492
7493 my $rv = Net::SSLeay::X509_VERIFY_PARAM_add0_policy($param, $policy);
7494 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7495 # $policy - value corresponding to openssl's ASN1_OBJECT structure
7496 #
7497 # returns: 1 on success, 0 on failure
7498
7499 Check openssl doc
7500 <http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7501
7502 · X509_VERIFY_PARAM_add0_table
7503
7504 ??? (more info needed)
7505
7506 my $rv = Net::SSLeay::X509_VERIFY_PARAM_add0_table($param);
7507 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7508 #
7509 # returns: 1 on success, 0 on failure
7510
7511 · X509_VERIFY_PARAM_add1_host
7512
7513 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
7514 requires at least OpenSSL 1.0.2
7515
7516 Adds an additional reference identifier that can match the peer's
7517 certificate.
7518
7519 my $rv = Net::SSLeay::X509_VERIFY_PARAM_add1_host($param, $name);
7520 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7521 # $name - (string) name to be set
7522 #
7523 # returns: 1 on success, 0 on failure
7524
7525 See also OpenSSL docs, "X509_VERIFY_PARAM_set1_host" and
7526 "X509_VERIFY_PARAM_set_hostflags" for more information, including
7527 wildcard matching.
7528
7529 Check openssl doc
7530 <https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7531
7532 · X509_VERIFY_PARAM_clear_flags
7533
7534 Clears the flags $flags in param.
7535
7536 my $rv = Net::SSLeay::X509_VERIFY_PARAM_clear_flags($param, $flags);
7537 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7538 # $flags - (unsigned long) flags to be set (bitmask)
7539 #
7540 # returns: 1 on success, 0 on failure
7541
7542 For more details about $flags bitmask see
7543 "X509_VERIFY_PARAM_set_flags".
7544
7545 Check openssl doc
7546 <http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7547
7548 · X509_VERIFY_PARAM_free
7549
7550 Frees up the X509_VERIFY_PARAM structure.
7551
7552 Net::SSLeay::X509_VERIFY_PARAM_free($param);
7553 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7554 #
7555 # returns: no return value
7556
7557 · X509_VERIFY_PARAM_get0_peername
7558
7559 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
7560 requires at least OpenSSL 1.0.2
7561
7562 Returns the DNS hostname or subject CommonName from the peer
7563 certificate that matched one of the reference identifiers.
7564
7565 my $rv = Net::SSLeay::X509_VERIFY_PARAM_get0_peername($param);
7566 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7567 #
7568 # returns: (string) name e.g. '*.example.com' or undef
7569
7570 Check openssl doc
7571 <https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7572
7573 · X509_VERIFY_PARAM_get_depth
7574
7575 Returns the current verification depth.
7576
7577 my $rv = Net::SSLeay::X509_VERIFY_PARAM_get_depth($param);
7578 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7579 #
7580 # returns: (ineger) depth
7581
7582 Check openssl doc
7583 <http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7584
7585 · X509_VERIFY_PARAM_get_flags
7586
7587 Returns the current verification flags.
7588
7589 my $rv = Net::SSLeay::X509_VERIFY_PARAM_get_flags($param);
7590 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7591 #
7592 # returns: (unsigned long) flags to be set (bitmask)
7593
7594 For more details about returned flags bitmask see
7595 "X509_VERIFY_PARAM_set_flags".
7596
7597 Check openssl doc
7598 <http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7599
7600 · X509_VERIFY_PARAM_set_flags
7601
7602 my $rv = Net::SSLeay::X509_VERIFY_PARAM_set_flags($param, $flags);
7603 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7604 # $flags - (unsigned long) flags to be set (bitmask)
7605 #
7606 # returns: 1 on success, 0 on failure
7607
7608 #to create $flags value use corresponding constants like
7609 $flags = Net::SSLeay::X509_V_FLAG_CRL_CHECK();
7610
7611 For more details about $flags bitmask, see the OpenSSL docs below.
7612
7613 Check openssl doc
7614 <http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7615
7616 · X509_VERIFY_PARAM_inherit
7617
7618 ??? (more info needed)
7619
7620 my $rv = Net::SSLeay::X509_VERIFY_PARAM_inherit($to, $from);
7621 # $to - value corresponding to openssl's X509_VERIFY_PARAM structure
7622 # $from - value corresponding to openssl's X509_VERIFY_PARAM structure
7623 #
7624 # returns: 1 on success, 0 on failure
7625
7626 · X509_VERIFY_PARAM_lookup
7627
7628 Finds X509_VERIFY_PARAM by name.
7629
7630 my $rv = Net::SSLeay::X509_VERIFY_PARAM_lookup($name);
7631 # $name - (string) name we want to find
7632 #
7633 # returns: value corresponding to openssl's X509_VERIFY_PARAM structure (0 on failure)
7634
7635 · X509_VERIFY_PARAM_new
7636
7637 Creates a new X509_VERIFY_PARAM structure.
7638
7639 my $rv = Net::SSLeay::X509_VERIFY_PARAM_new();
7640 #
7641 # returns: value corresponding to openssl's X509_VERIFY_PARAM structure (0 on failure)
7642
7643 · X509_VERIFY_PARAM_set1
7644
7645 Sets the name of X509_VERIFY_PARAM structure $to to the same value
7646 as the name of X509_VERIFY_PARAM structure $from.
7647
7648 my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1($to, $from);
7649 # $to - value corresponding to openssl's X509_VERIFY_PARAM structure
7650 # $from - value corresponding to openssl's X509_VERIFY_PARAM structure
7651 #
7652 # returns: 1 on success, 0 on failure
7653
7654 · X509_VERIFY_PARAM_set1_email
7655
7656 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
7657 requires at least OpenSSL 1.0.2
7658
7659 Sets the expected RFC822 email address to email.
7660
7661 my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_email($param, $email);
7662 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7663 # $email - (string) email to be set
7664 #
7665 # returns: 1 on success, 0 on failure
7666
7667 Check openssl doc
7668 <https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7669
7670 · X509_VERIFY_PARAM_set1_host
7671
7672 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
7673 requires at least OpenSSL 1.0.2
7674
7675 Sets the expected DNS hostname to name clearing any previously
7676 specified host name or names.
7677
7678 my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_host($param, $name);
7679 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7680 # $name - (string) name to be set
7681 #
7682 # returns: 1 on success, 0 on failure
7683
7684 See also OpenSSL docs, "X509_VERIFY_PARAM_add1_host" and
7685 "X509_VERIFY_PARAM_set_hostflags" for more information, including
7686 wildcard matching.
7687
7688 Check openssl doc
7689 <https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7690
7691 · X509_VERIFY_PARAM_set1_ip
7692
7693 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
7694 requires at least OpenSSL 1.0.2
7695
7696 Sets the expected IP address to ip.
7697
7698 my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_ip($param, $ip);
7699 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7700 # $ip - (binary) 4 octet IPv4 or 16 octet IPv6 address
7701 #
7702 # returns: 1 on success, 0 on failure
7703
7704 Check openssl doc
7705 <https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7706
7707 · X509_VERIFY_PARAM_set1_ip_asc
7708
7709 COMPATIBILITY: not available in Net-SSLeay-1.82 and before;
7710 requires at least OpenSSL 1.0.2
7711
7712 Sets the expected IP address to ipasc.
7713
7714 my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_asc($param, $ipasc);
7715 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7716 # $ip - (string) IPv4 or IPv6 address
7717 #
7718 # returns: 1 on success, 0 on failure
7719
7720 Check openssl doc
7721 <https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7722
7723 · X509_VERIFY_PARAM_set1_name
7724
7725 Sets the name of X509_VERIFY_PARAM structure $param to $name.
7726
7727 my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_name($param, $name);
7728 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7729 # $name - (string) name to be set
7730 #
7731 # returns: 1 on success, 0 on failure
7732
7733 · X509_VERIFY_PARAM_set1_policies
7734
7735 Enables policy checking (it is disabled by default) and sets the
7736 acceptable policy set to policies. Any existing policy set is
7737 cleared. The policies parameter can be 0 to clear an existing
7738 policy set.
7739
7740 my $rv = Net::SSLeay::X509_VERIFY_PARAM_set1_policies($param, $policies);
7741 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7742 # $policies - value corresponding to openssl's STACK_OF(ASN1_OBJECT) structure
7743 #
7744 # returns: 1 on success, 0 on failure
7745
7746 Check openssl doc
7747 <http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7748
7749 · X509_VERIFY_PARAM_set_depth
7750
7751 Sets the maximum verification depth to depth. That is the maximum
7752 number of untrusted CA certificates that can appear in a chain.
7753
7754 Net::SSLeay::X509_VERIFY_PARAM_set_depth($param, $depth);
7755 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7756 # $depth - (integer) depth to be set
7757 #
7758 # returns: no return value
7759
7760 Check openssl doc
7761 <http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7762
7763 · X509_VERIFY_PARAM_set_hostflags
7764
7765 Net::SSLeay::X509_VERIFY_PARAM_set_hostflags($param, $flags);
7766 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7767 # $flags - (unsigned int) flags to be set (bitmask)
7768 #
7769 # returns: no return value
7770
7771 See also OpenSSL docs, "X509_VERIFY_PARAM_add1_host" and
7772 "X509_VERIFY_PARAM_set1_host" for more information. The flags for
7773 controlling wildcard checks and other features are defined in
7774 OpenSSL docs.
7775
7776 Check openssl doc
7777 <https://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7778
7779 · X509_VERIFY_PARAM_set_purpose
7780
7781 Sets the verification purpose in $param to $purpose. This
7782 determines the acceptable purpose of the certificate chain, for
7783 example SSL client or SSL server.
7784
7785 my $rv = Net::SSLeay::X509_VERIFY_PARAM_set_purpose($param, $purpose);
7786 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7787 # $purpose - (integer) purpose identifier
7788 #
7789 # returns: 1 on success, 0 on failure
7790
7791 For more details about $purpose identifier check "CTX_set_purpose".
7792
7793 Check openssl doc
7794 <http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7795
7796 · X509_VERIFY_PARAM_set_time
7797
7798 Sets the verification time in $param to $t. Normally the current
7799 time is used.
7800
7801 Net::SSLeay::X509_VERIFY_PARAM_set_time($param, $t);
7802 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7803 # $t - (time_t) time in seconds since 1.1.1970
7804 #
7805 # returns: no return value
7806
7807 Check openssl doc
7808 <http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7809
7810 · X509_VERIFY_PARAM_set_trust
7811
7812 Sets the trust setting in $param to $trust.
7813
7814 my $rv = Net::SSLeay::X509_VERIFY_PARAM_set_trust($param, $trust);
7815 # $param - value corresponding to openssl's X509_VERIFY_PARAM structure
7816 # $trust - (integer) trust identifier
7817 #
7818 # returns: 1 on success, 0 on failure
7819
7820 For more details about $trust identifier check "CTX_set_trust".
7821
7822 Check openssl doc
7823 <http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html>
7824
7825 · X509_VERIFY_PARAM_table_cleanup
7826
7827 ??? (more info needed)
7828
7829 Net::SSLeay::X509_VERIFY_PARAM_table_cleanup();
7830 #
7831 # returns: no return value
7832
7833 Low level API: Cipher (EVP_CIPHER_*) related functions
7834
7835 · EVP_get_cipherbyname
7836
7837 COMPATIBILITY: not available in Net-SSLeay-1.45 and before
7838
7839 Returns an EVP_CIPHER structure when passed a cipher name.
7840
7841 my $rv = Net::SSLeay::EVP_get_cipherbyname($name);
7842 # $name - (string) cipher name e.g. 'aes-128-cbc', 'camellia-256-ecb', 'des-ede', ...
7843 #
7844 # returns: value corresponding to openssl's EVP_CIPHER structure
7845
7846 Check openssl doc
7847 <http://www.openssl.org/docs/crypto/EVP_EncryptInit.html>
7848
7849 Low level API: Digest (EVP_MD_*) related functions
7850
7851 · OpenSSL_add_all_digests
7852
7853 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
7854
7855 Net::SSLeay::OpenSSL_add_all_digests();
7856 # no args, no return value
7857
7858 http://www.openssl.org/docs/crypto/OpenSSL_add_all_algorithms.html
7859
7860 · P_EVP_MD_list_all
7861
7862 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
7863 requires at least openssl-1.0.0
7864
7865 NOTE: Does not exactly correspond to any low level API function
7866
7867 my $rv = Net::SSLeay::P_EVP_MD_list_all();
7868 #
7869 # returns: arrayref - list of available digest names
7870
7871 The returned digest names correspond to values expected by
7872 "EVP_get_digestbyname".
7873
7874 Note that some of the digests are available by default and some
7875 only after calling "OpenSSL_add_all_digests".
7876
7877 · EVP_get_digestbyname
7878
7879 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
7880
7881 my $rv = Net::SSLeay::EVP_get_digestbyname($name);
7882 # $name - string with digest name
7883 #
7884 # returns: value corresponding to openssl's EVP_MD structure
7885
7886 The $name param can be:
7887
7888 md2
7889 md4
7890 md5
7891 mdc2
7892 ripemd160
7893 sha
7894 sha1
7895 sha224
7896 sha256
7897 sha512
7898 whirlpool
7899
7900 Or better check the supported digests by calling
7901 "P_EVP_MD_list_all".
7902
7903 · EVP_MD_type
7904
7905 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
7906
7907 my $rv = Net::SSLeay::EVP_MD_type($md);
7908 # $md - value corresponding to openssl's EVP_MD structure
7909 #
7910 # returns: the NID (integer) of the OBJECT IDENTIFIER representing the given message digest
7911
7912 · EVP_MD_size
7913
7914 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
7915
7916 my $rv = Net::SSLeay::EVP_MD_size($md);
7917 # $md - value corresponding to openssl's EVP_MD structure
7918 #
7919 # returns: the size of the message digest in bytes (e.g. 20 for SHA1)
7920
7921 · EVP_MD_CTX_md
7922
7923 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
7924 requires at least openssl-0.9.7
7925
7926 Net::SSLeay::EVP_MD_CTX_md($ctx);
7927 # $ctx - value corresponding to openssl's EVP_MD_CTX structure
7928 #
7929 # returns: value corresponding to openssl's EVP_MD structure
7930
7931 · EVP_MD_CTX_create
7932
7933 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
7934 requires at least openssl-0.9.7
7935
7936 Allocates, initializes and returns a digest context.
7937
7938 my $rv = Net::SSLeay::EVP_MD_CTX_create();
7939 #
7940 # returns: value corresponding to openssl's EVP_MD_CTX structure
7941
7942 The complete idea behind EVP_MD_CTX looks like this example:
7943
7944 Net::SSLeay::OpenSSL_add_all_digests();
7945
7946 my $md = Net::SSLeay::EVP_get_digestbyname("sha1");
7947 my $ctx = Net::SSLeay::EVP_MD_CTX_create();
7948 Net::SSLeay::EVP_DigestInit($ctx, $md);
7949
7950 while(my $chunk = get_piece_of_data()) {
7951 Net::SSLeay::EVP_DigestUpdate($ctx,$chunk);
7952 }
7953
7954 my $result = Net::SSLeay::EVP_DigestFinal($ctx);
7955 Net::SSLeay::EVP_MD_CTX_destroy($ctx);
7956
7957 print "digest=", unpack('H*', $result), "\n"; #print hex value
7958
7959 · EVP_DigestInit_ex
7960
7961 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
7962 requires at least openssl-0.9.7
7963
7964 Sets up digest context $ctx to use a digest $type from ENGINE
7965 $impl, $ctx must be initialized before calling this function, type
7966 will typically be supplied by a function such as
7967 "EVP_get_digestbyname". If $impl is 0 then the default
7968 implementation of digest $type is used.
7969
7970 my $rv = Net::SSLeay::EVP_DigestInit_ex($ctx, $type, $impl);
7971 # $ctx - value corresponding to openssl's EVP_MD_CTX structure
7972 # $type - value corresponding to openssl's EVP_MD structure
7973 # $impl - value corresponding to openssl's ENGINE structure
7974 #
7975 # returns: 1 for success and 0 for failure
7976
7977 · EVP_DigestInit
7978
7979 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
7980 requires at least openssl-0.9.7
7981
7982 Behaves in the same way as "EVP_DigestInit_ex" except the passed
7983 context $ctx does not have to be initialized, and it always uses
7984 the default digest implementation.
7985
7986 my $rv = Net::SSLeay::EVP_DigestInit($ctx, $type);
7987 # $ctx - value corresponding to openssl's EVP_MD_CTX structure
7988 # $type - value corresponding to openssl's EVP_MD structure
7989 #
7990 # returns: 1 for success and 0 for failure
7991
7992 · EVP_MD_CTX_destroy
7993
7994 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
7995 requires at least openssl-0.9.7
7996
7997 Cleans up digest context $ctx and frees up the space allocated to
7998 it, it should be called only on a context created using
7999 "EVP_MD_CTX_create".
8000
8001 Net::SSLeay::EVP_MD_CTX_destroy($ctx);
8002 # $ctx - value corresponding to openssl's EVP_MD_CTX structure
8003 #
8004 # returns: no return value
8005
8006 · EVP_DigestUpdate
8007
8008 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
8009 requires at least openssl-0.9.7
8010
8011 my $rv = Net::SSLeay::EVP_DigestUpdate($ctx, $data);
8012 # $ctx - value corresponding to openssl's EVP_MD_CTX structure
8013 # $data - data to be hashed
8014 #
8015 # returns: 1 for success and 0 for failure
8016
8017 · EVP_DigestFinal_ex
8018
8019 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
8020 requires at least openssl-0.9.7
8021
8022 Retrieves the digest value from $ctx. After calling
8023 "EVP_DigestFinal_ex" no additional calls to "EVP_DigestUpdate" can
8024 be made, but "EVP_DigestInit_ex" can be called to initialize a new
8025 digest operation.
8026
8027 my $digest_value = Net::SSLeay::EVP_DigestFinal_ex($ctx);
8028 # $ctx - value corresponding to openssl's EVP_MD_CTX structure
8029 #
8030 # returns: hash value (binary)
8031
8032 #to get printable (hex) value of digest use:
8033 print unpack('H*', $digest_value);
8034
8035 · EVP_DigestFinal
8036
8037 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
8038 requires at least openssl-0.9.7
8039
8040 Similar to "EVP_DigestFinal_ex" except the digest context ctx is
8041 automatically cleaned up.
8042
8043 my $rv = Net::SSLeay::EVP_DigestFinal($ctx);
8044 # $ctx - value corresponding to openssl's EVP_MD_CTX structure
8045 #
8046 # returns: hash value (binary)
8047
8048 #to get printable (hex) value of digest use:
8049 print unpack('H*', $digest_value);
8050
8051 · MD2
8052
8053 COMPATIBILITY: no supported by default in openssl-1.0.0
8054
8055 Computes MD2 from given $data (all data needs to be loaded into
8056 memory)
8057
8058 my $digest = Net::SSLeay::MD2($data);
8059 print "digest(hexadecimal)=", unpack('H*', $digest);
8060
8061 · MD4
8062
8063 Computes MD4 from given $data (all data needs to be loaded into
8064 memory)
8065
8066 my $digest = Net::SSLeay::MD4($data);
8067 print "digest(hexadecimal)=", unpack('H*', $digest);
8068
8069 · MD5
8070
8071 Computes MD5 from given $data (all data needs to be loaded into
8072 memory)
8073
8074 my $digest = Net::SSLeay::MD5($data);
8075 print "digest(hexadecimal)=", unpack('H*', $digest);
8076
8077 · RIPEMD160
8078
8079 Computes RIPEMD160 from given $data (all data needs to be loaded
8080 into memory)
8081
8082 my $digest = Net::SSLeay::RIPEMD160($data);
8083 print "digest(hexadecimal)=", unpack('H*', $digest);
8084
8085 · SHA1
8086
8087 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
8088
8089 Computes SHA1 from given $data (all data needs to be loaded into
8090 memory)
8091
8092 my $digest = Net::SSLeay::SHA1($data);
8093 print "digest(hexadecimal)=", unpack('H*', $digest);
8094
8095 · SHA256
8096
8097 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
8098 requires at least openssl-0.9.8
8099
8100 Computes SHA256 from given $data (all data needs to be loaded into
8101 memory)
8102
8103 my $digest = Net::SSLeay::SHA256($data);
8104 print "digest(hexadecimal)=", unpack('H*', $digest);
8105
8106 · SHA512
8107
8108 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
8109 requires at least openssl-0.9.8
8110
8111 Computes SHA512 from given $data (all data needs to be loaded into
8112 memory)
8113
8114 my $digest = Net::SSLeay::SHA512($data);
8115 print "digest(hexadecimal)=", unpack('H*', $digest);
8116
8117 · EVP_Digest
8118
8119 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
8120 requires at least openssl-0.9.7
8121
8122 Computes "any" digest from given $data (all data needs to be loaded
8123 into memory)
8124
8125 my $md = Net::SSLeay::EVP_get_digestbyname("sha1"); #or any other algorithm
8126 my $digest = Net::SSLeay::EVP_Digest($data, $md);
8127 print "digest(hexadecimal)=", unpack('H*', $digest);
8128
8129 · EVP_sha1
8130
8131 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
8132
8133 my $md = Net::SSLeay::EVP_sha1();
8134 #
8135 # returns: value corresponding to openssl's EVP_MD structure
8136
8137 · EVP_sha256
8138
8139 COMPATIBILITY: requires at least openssl-0.9.8
8140
8141 my $md = Net::SSLeay::EVP_sha256();
8142 #
8143 # returns: value corresponding to openssl's EVP_MD structure
8144
8145 · EVP_sha512
8146
8147 COMPATIBILITY: not available in Net-SSLeay-1.42 and before;
8148 requires at least openssl-0.9.8
8149
8150 my $md = Net::SSLeay::EVP_sha512();
8151 #
8152 # returns: value corresponding to openssl's EVP_MD structure
8153
8154 · EVP_add_digest
8155
8156 my $rv = Net::SSLeay::EVP_add_digest($digest);
8157 # $digest - value corresponding to openssl's EVP_MD structure
8158 #
8159 # returns: 1 on success, 0 otherwise
8160
8161 Low level API: CIPHER_* related functions
8162
8163 · CIPHER_get_name
8164
8165 COMPATIBILITY: not available in Net-SSLeay-1.42 and before
8166
8167 Returns name of the cipher used.
8168
8169 my $rv = Net::SSLeay::CIPHER_description($cipher);
8170 # $cipher - value corresponding to openssl's SSL_CIPHER structure
8171 #
8172 # returns: (string) cipher name e.g. 'DHE-RSA-AES256-SHA'
8173
8174 Check openssl doc
8175 <http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html>
8176
8177 Example:
8178
8179 my $ssl_cipher = Net::SSLeay::get_current_cipher($ssl);
8180 my $cipher_name = Net::SSLeay::CIPHER_get_name($ssl_cipher);
8181
8182 · CIPHER_description
8183
8184 Returns a textual description of the cipher used.
8185
8186 ??? (does this function really work?)
8187
8188 my $rv = Net::SSLeay::CIPHER_description($cipher, $buf, $size);
8189 # $cipher - value corresponding to openssl's SSL_CIPHER structure
8190 # $bufer - (string/buffer) ???
8191 # $size - (integer) ???
8192 #
8193 # returns: (string) cipher description e.g. 'DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1'
8194
8195 Check openssl doc
8196 <http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html>
8197
8198 · CIPHER_get_bits
8199
8200 Returns the number of secret bits used for cipher.
8201
8202 my $rv = Net::SSLeay::CIPHER_get_bits($c);
8203 # $c - value corresponding to openssl's SSL_CIPHER structure
8204 #
8205 # returns: (integert) number of secret bits, 0 on error
8206
8207 Check openssl doc
8208 <http://www.openssl.org/docs/ssl/SSL_CIPHER_get_name.html>
8209
8210 Low level API: RSA_* related functions
8211
8212 · RSA_generate_key
8213
8214 Generates a key pair and returns it in a newly allocated RSA
8215 structure. The pseudo-random number generator must be seeded prior
8216 to calling RSA_generate_key.
8217
8218 my $rv = Net::SSLeay::RSA_generate_key($bits, $e, $perl_cb, $perl_cb_arg);
8219 # $bits - (integer) modulus size in bits e.g. 512, 1024, 2048
8220 # $e - (integer) public exponent, an odd number, typically 3, 17 or 65537
8221 # $perl_cb - [optional] reference to perl callback function
8222 # $perl_cb_arg - [optional] data that will be passed to callback function when invoked
8223 #
8224 # returns: value corresponding to openssl's RSA structure (0 on failure)
8225
8226 Check openssl doc
8227 <http://www.openssl.org/docs/crypto/RSA_generate_key.html>
8228
8229 · RSA_free
8230
8231 Frees the RSA structure and its components. The key is erased
8232 before the memory is returned to the system.
8233
8234 Net::SSLeay::RSA_free($r);
8235 # $r - value corresponding to openssl's RSA structure
8236 #
8237 # returns: no return value
8238
8239 Check openssl doc <http://www.openssl.org/docs/crypto/RSA_new.html>
8240
8241 · RSA_get_key_parameters
8242
8243 Returns a list of pointers to BIGNUMs representing the parameters
8244 of the key in this order: (n, e, d, p, q, dmp1, dmq1, iqmp)
8245 Caution: returned list consists of SV pointers to BIGNUMs, which
8246 would need to be blessed as Crypt::OpenSSL::Bignum for further use
8247
8248 my (@params) = RSA_get_key_parameters($r);
8249
8250 Low level API: BIO_* related functions
8251
8252 · BIO_eof
8253
8254 Returns 1 if the BIO has read EOF, the precise meaning of 'EOF'
8255 varies according to the BIO type.
8256
8257 my $rv = Net::SSLeay::BIO_eof($s);
8258 # $s - value corresponding to openssl's BIO structure
8259 #
8260 # returns: 1 if EOF has been reached 0 otherwise
8261
8262 Check openssl doc
8263 <http://www.openssl.org/docs/crypto/BIO_ctrl.html>
8264
8265 · BIO_f_ssl
8266
8267 Returns the SSL BIO method. This is a filter BIO which is a wrapper
8268 round the OpenSSL SSL routines adding a BIO 'flavour' to SSL I/O.
8269
8270 my $rv = Net::SSLeay::BIO_f_ssl();
8271 #
8272 # returns: value corresponding to openssl's BIO_METHOD structure (0 on failure)
8273
8274 Check openssl doc
8275 <http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
8276
8277 · BIO_free
8278
8279 Frees up a single BIO.
8280
8281 my $rv = Net::SSLeay::BIO_free($bio;);
8282 # $bio; - value corresponding to openssl's BIO structure
8283 #
8284 # returns: 1 on success, 0 on failure
8285
8286 Check openssl doc <http://www.openssl.org/docs/crypto/BIO_new.html>
8287
8288 · BIO_new
8289
8290 Returns a new BIO using method $type
8291
8292 my $rv = Net::SSLeay::BIO_new($type);
8293 # $type - value corresponding to openssl's BIO_METHOD structure
8294 #
8295 # returns: value corresponding to openssl's BIO structure (0 on failure)
8296
8297 Check openssl doc <http://www.openssl.org/docs/crypto/BIO_new.html>
8298
8299 · BIO_new_buffer_ssl_connect
8300
8301 Creates a new BIO chain consisting of a buffering BIO, an SSL BIO
8302 (using ctx) and a connect BIO.
8303
8304 my $rv = Net::SSLeay::BIO_new_buffer_ssl_connect($ctx);
8305 # $ctx - value corresponding to openssl's SSL_CTX structure
8306 #
8307 # returns: value corresponding to openssl's BIO structure (0 on failure)
8308
8309 Check openssl doc
8310 <http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
8311
8312 · BIO_new_file
8313
8314 Creates a new file BIO with mode $mode the meaning of mode is the
8315 same as the stdio function fopen(). The BIO_CLOSE flag is set on
8316 the returned BIO.
8317
8318 my $rv = Net::SSLeay::BIO_new_file($filename, $mode);
8319 # $filename - (string) filename
8320 # $mode - (string) opening mode (as mode by stdio function fopen)
8321 #
8322 # returns: value corresponding to openssl's BIO structure (0 on failure)
8323
8324 Check openssl doc
8325 <http://www.openssl.org/docs/crypto/BIO_s_file.html>
8326
8327 · BIO_new_ssl
8328
8329 Allocates an SSL BIO using SSL_CTX ctx and using client mode if
8330 client is non zero.
8331
8332 my $rv = Net::SSLeay::BIO_new_ssl($ctx, $client);
8333 # $ctx - value corresponding to openssl's SSL_CTX structure
8334 # $client - (integer) 0 or 1 - indicates ssl client mode
8335 #
8336 # returns: value corresponding to openssl's BIO structure (0 on failure)
8337
8338 Check openssl doc
8339 <http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
8340
8341 · BIO_new_ssl_connect
8342
8343 Creates a new BIO chain consisting of an SSL BIO (using ctx)
8344 followed by a connect BIO.
8345
8346 my $rv = Net::SSLeay::BIO_new_ssl_connect($ctx);
8347 # $ctx - value corresponding to openssl's SSL_CTX structure
8348 #
8349 # returns: value corresponding to openssl's BIO structure (0 on failure)
8350
8351 Check openssl doc
8352 <http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
8353
8354 · BIO_pending
8355
8356 Return the number of pending characters in the BIOs read buffers.
8357
8358 my $rv = Net::SSLeay::BIO_pending($s);
8359 # $s - value corresponding to openssl's BIO structure
8360 #
8361 # returns: the amount of pending data
8362
8363 Check openssl doc
8364 <http://www.openssl.org/docs/crypto/BIO_ctrl.html>
8365
8366 · BIO_wpending
8367
8368 Return the number of pending characters in the BIOs write buffers.
8369
8370 my $rv = Net::SSLeay::BIO_wpending($s);
8371 # $s - value corresponding to openssl's BIO structure
8372 #
8373 # returns: the amount of pending data
8374
8375 Check openssl doc
8376 <http://www.openssl.org/docs/crypto/BIO_ctrl.html>
8377
8378 · BIO_read
8379
8380 Read the underlying descriptor.
8381
8382 Net::SSLeay::BIO_read($s, $max);
8383 # $s - value corresponding to openssl's BIO structure
8384 # $max - [optional] max. bytes to read (if not specified, the value 32768 is used)
8385 #
8386 # returns: data
8387
8388 Check openssl doc
8389 <http://www.openssl.org/docs/crypto/BIO_read.html>
8390
8391 · BIO_write
8392
8393 Attempts to write data from $buffer to BIO $b.
8394
8395 my $rv = Net::SSLeay::BIO_write($b, $buffer);
8396 # $b - value corresponding to openssl's BIO structure
8397 # $buffer - data
8398 #
8399 # returns: amount of data successfully written
8400 # or that no data was successfully read or written if the result is 0 or -1
8401 # or -2 when the operation is not implemented in the specific BIO type
8402
8403 Check openssl doc
8404 <http://www.openssl.org/docs/crypto/BIO_read.html>
8405
8406 · BIO_s_mem
8407
8408 Return the memory BIO method function.
8409
8410 my $rv = Net::SSLeay::BIO_s_mem();
8411 #
8412 # returns: value corresponding to openssl's BIO_METHOD structure (0 on failure)
8413
8414 Check openssl doc
8415 <http://www.openssl.org/docs/crypto/BIO_s_mem.html>
8416
8417 · BIO_ssl_copy_session_id
8418
8419 Copies an SSL session id between BIO chains from and to. It does
8420 this by locating the SSL BIOs in each chain and calling
8421 SSL_copy_session_id() on the internal SSL pointer.
8422
8423 my $rv = Net::SSLeay::BIO_ssl_copy_session_id($to, $from);
8424 # $to - value corresponding to openssl's BIO structure
8425 # $from - value corresponding to openssl's BIO structure
8426 #
8427 # returns: 1 on success, 0 on failure
8428
8429 Check openssl doc
8430 <http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
8431
8432 · BIO_ssl_shutdown
8433
8434 Closes down an SSL connection on BIO chain bio. It does this by
8435 locating the SSL BIO in the chain and calling SSL_shutdown() on its
8436 internal SSL pointer.
8437
8438 Net::SSLeay::BIO_ssl_shutdown($ssl_bio);
8439 # $ssl_bio - value corresponding to openssl's BIO structure
8440 #
8441 # returns: no return value
8442
8443 Check openssl doc
8444 <http://www.openssl.org/docs/crypto/BIO_f_ssl.html>
8445
8446 Low level API: Server side Server Name Indication (SNI) support
8447
8448 · set_tlsext_host_name
8449
8450 TBA
8451
8452 · get_servername
8453
8454 TBA
8455
8456 · get_servername_type
8457
8458 TBA
8459
8460 · CTX_set_tlsext_servername_callback
8461
8462 COMPATIBILITY: requires at least OpenSSL 0.9.8f
8463
8464 This function is used in a server to support Server side Server
8465 Name Indication (SNI).
8466
8467 Net::SSLeay::CTX_set_tlsext_servername_callback($ctx, $code)
8468 # $ctx - SSL context
8469 # $code - reference to a subroutine that will be called when a new connection is being initiated
8470 #
8471 # returns: no return value
8472 On the client side:
8473 use set_tlsext_host_name($ssl, $servername) before initiating the SSL connection.
8474
8475 On the server side: Set up an additional SSL_CTX() for each
8476 different certificate;
8477
8478 Add a servername callback to each SSL_CTX() using
8479 CTX_set_tlsext_servername_callback();
8480
8481 The callback function is required to retrieve the client-supplied
8482 servername with get_servername(ssl). Figure out the right SSL_CTX
8483 to go with that host name, then switch the SSL object to that
8484 SSL_CTX with set_SSL_CTX().
8485
8486 Example:
8487
8488 # set callback
8489 Net::SSLeay::CTX_set_tlsext_servername_callback($ctx,
8490 sub {
8491 my $ssl = shift;
8492 my $h = Net::SSLeay::get_servername($ssl);
8493 Net::SSLeay::set_SSL_CTX($ssl, $hostnames{$h}->{ctx}) if exists $hostnames{$h};
8494 } );
8495
8496 More complete example:
8497
8498 # ... initialize Net::SSLeay
8499
8500 my %hostnames = (
8501 'sni1' => { cert=>'sni1.pem', key=>'sni1.key' },
8502 'sni2' => { cert=>'sni2.pem', key=>'sni2.key' },
8503 );
8504
8505 # create a new context for each certificate/key pair
8506 for my $name (keys %hostnames) {
8507 $hostnames{$name}->{ctx} = Net::SSLeay::CTX_new or die;
8508 Net::SSLeay::CTX_set_cipher_list($hostnames{$name}->{ctx}, 'ALL');
8509 Net::SSLeay::set_cert_and_key($hostnames{$name}->{ctx},
8510 $hostnames{$name}->{cert}, $hostnames{$name}->{key}) or die;
8511 }
8512
8513 # create default context
8514 my $ctx = Net::SSLeay::CTX_new or die;
8515 Net::SSLeay::CTX_set_cipher_list($ctx, 'ALL');
8516 Net::SSLeay::set_cert_and_key($ctx, 'cert.pem','key.pem') or die;
8517
8518 # set callback
8519 Net::SSLeay::CTX_set_tlsext_servername_callback($ctx, sub {
8520 my $ssl = shift;
8521 my $h = Net::SSLeay::get_servername($ssl);
8522 Net::SSLeay::set_SSL_CTX($ssl, $hostnames{$h}->{ctx}) if exists $hostnames{$h};
8523 } );
8524
8525 # ... later
8526
8527 $s = Net::SSLeay::new($ctx);
8528 Net::SSLeay::set_fd($s, fileno($accepted_socket));
8529 Net::SSLeay::accept($s);
8530
8531 Low level API: NPN (next protocol negotiation) related functions
8532
8533 NPN is being replaced with ALPN, a more recent TLS extension for
8534 application protocol negotiation that's in process of being adopted by
8535 IETF. Please look below for APLN API description.
8536
8537 Simple approach for using NPN support looks like this:
8538
8539 ### client side
8540 use Net::SSLeay;
8541 use IO::Socket::INET;
8542
8543 Net::SSLeay::initialize();
8544 my $sock = IO::Socket::INET->new(PeerAddr=>'encrypted.google.com:443') or die;
8545 my $ctx = Net::SSLeay::CTX_tlsv1_new() or die;
8546 Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL);
8547 Net::SSLeay::CTX_set_next_proto_select_cb($ctx, ['http1.1','spdy/2']);
8548 my $ssl = Net::SSLeay::new($ctx) or die;
8549 Net::SSLeay::set_fd($ssl, fileno($sock)) or die;
8550 Net::SSLeay::connect($ssl);
8551
8552 warn "client:negotiated=",Net::SSLeay::P_next_proto_negotiated($ssl), "\n";
8553 warn "client:last_status=", Net::SSLeay::P_next_proto_last_status($ssl), "\n";
8554
8555 ### server side
8556 use Net::SSLeay;
8557 use IO::Socket::INET;
8558
8559 Net::SSLeay::initialize();
8560 my $ctx = Net::SSLeay::CTX_tlsv1_new() or die;
8561 Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL);
8562 Net::SSLeay::set_cert_and_key($ctx, "t/data/cert.pem", "t/data/key.pem");
8563 Net::SSLeay::CTX_set_next_protos_advertised_cb($ctx, ['spdy/2','http1.1']);
8564 my $sock = IO::Socket::INET->new(LocalAddr=>'localhost', LocalPort=>5443, Proto=>'tcp', Listen=>20) or die;
8565
8566 while (1) {
8567 my $ssl = Net::SSLeay::new($ctx);
8568 warn("server:waiting for incoming connection...\n");
8569 my $fd = $sock->accept();
8570 Net::SSLeay::set_fd($ssl, $fd->fileno);
8571 Net::SSLeay::accept($ssl);
8572 warn "server:negotiated=",Net::SSLeay::P_next_proto_negotiated($ssl),"\n";
8573 my $got = Net::SSLeay::read($ssl);
8574 Net::SSLeay::ssl_write_all($ssl, "length=".length($got));
8575 Net::SSLeay::free($ssl);
8576 $fd->close();
8577 }
8578 # check with: openssl s_client -connect localhost:5443 -nextprotoneg http/1.1,spdy/2
8579
8580 Please note that the selection (negotiation) is performed by client
8581 side, the server side simply advertise the list of supported protocols.
8582
8583 Advanced approach allows you to implement your own negotiation
8584 algorithm.
8585
8586 #see below documentation for:
8587 Net::SSleay::CTX_set_next_proto_select_cb($ctx, $perl_callback_function, $callback_data);
8588 Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, $perl_callback_function, $callback_data);
8589
8590 Detection of NPN support (works even in older Net::SSLeay versions):
8591
8592 use Net::SSLeay;
8593
8594 if (exists &Net::SSLeay::P_next_proto_negotiated) {
8595 # do NPN stuff
8596 }
8597
8598 · CTX_set_next_proto_select_cb
8599
8600 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
8601 requires at least openssl-1.0.1
8602
8603 NOTE: You need CTX_set_next_proto_select_cb on client side of SSL
8604 connection.
8605
8606 Simple usage - in this case a "common" negotiation algorithm (as
8607 implemented by openssl's function SSL_select_next_proto) is used.
8608
8609 $rv = Net::SSleay::CTX_set_next_proto_select_cb($ctx, $arrayref);
8610 # $ctx - value corresponding to openssl's SSL_CTX structure
8611 # $arrayref - list of accepted protocols - e.g. ['http1.0', 'http1.1']
8612 #
8613 # returns: 0 on success, 1 on failure
8614
8615 Advanced usage (you probably do not need this):
8616
8617 $rv = Net::SSleay::CTX_set_next_proto_select_cb($ctx, $perl_callback_function, $callback_data);
8618 # $ctx - value corresponding to openssl's SSL_CTX structure
8619 # $perl_callback_function - reference to perl function
8620 # $callback_data - [optional] data to passed to callback function when invoked
8621 #
8622 # returns: 0 on success, 1 on failure
8623
8624 # where callback function looks like
8625 sub npn_advertised_cb_invoke {
8626 my ($ssl, $arrayref_proto_list_advertised_by_server, $callback_data) = @_;
8627 my $status;
8628 # ...
8629 $status = 1; #status can be:
8630 # 0 - OPENSSL_NPN_UNSUPPORTED
8631 # 1 - OPENSSL_NPN_NEGOTIATED
8632 # 2 - OPENSSL_NPN_NO_OVERLAP
8633 return $status, ['http1.1','spdy/2']; # the callback has to return 2 values
8634 }
8635
8636 To undefine/clear this callback use:
8637
8638 Net::SSleay::CTX_set_next_proto_select_cb($ctx, undef);
8639
8640 · CTX_set_next_protos_advertised_cb
8641
8642 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
8643 requires at least openssl-1.0.1
8644
8645 NOTE: You need CTX_set_next_proto_select_cb on server side of SSL
8646 connection.
8647
8648 Simple usage:
8649
8650 $rv = Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, $arrayref);
8651 # $ctx - value corresponding to openssl's SSL_CTX structure
8652 # $arrayref - list of advertised protocols - e.g. ['http1.0', 'http1.1']
8653 #
8654 # returns: 0 on success, 1 on failure
8655
8656 Advanced usage (you probably do not need this):
8657
8658 $rv = Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, $perl_callback_function, $callback_data);
8659 # $ctx - value corresponding to openssl's SSL_CTX structure
8660 # $perl_callback_function - reference to perl function
8661 # $callback_data - [optional] data to passed to callback function when invoked
8662 #
8663 # returns: 0 on success, 1 on failure
8664
8665 # where callback function looks like
8666 sub npn_advertised_cb_invoke {
8667 my ($ssl, $callback_data) = @_;
8668 # ...
8669 return ['http1.1','spdy/2']; # the callback has to return arrayref
8670 }
8671
8672 To undefine/clear this callback use:
8673
8674 Net::SSleay::CTX_set_next_protos_advertised_cb($ctx, undef);
8675
8676 · P_next_proto_negotiated
8677
8678 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
8679 requires at least openssl-1.0.1
8680
8681 Returns the name of negotiated protocol for given SSL connection
8682 $ssl.
8683
8684 $rv = Net::SSLeay::P_next_proto_negotiated($ssl)
8685 # $ssl - value corresponding to openssl's SSL structure
8686 #
8687 # returns: (string) negotiated protocol name (or undef if no negotiation was done or failed with fatal error)
8688
8689 · P_next_proto_last_status
8690
8691 COMPATIBILITY: not available in Net-SSLeay-1.45 and before;
8692 requires at least openssl-1.0.1
8693
8694 Returns the result of the last negotiation for given SSL connection
8695 $ssl.
8696
8697 $rv = Net::SSLeay::P_next_proto_last_status($ssl)
8698 # $ssl - value corresponding to openssl's SSL structure
8699 #
8700 # returns: (integer) negotiation status
8701 # 0 - OPENSSL_NPN_UNSUPPORTED
8702 # 1 - OPENSSL_NPN_NEGOTIATED
8703 # 2 - OPENSSL_NPN_NO_OVERLAP
8704
8705 Low level API: ALPN (application layer protocol negotiation) related
8706 functions
8707
8708 Application protocol can be negotiated via two different mechanisms
8709 employing two different TLS extensions: NPN (obsolete) and ALPN
8710 (recommended).
8711
8712 The API is rather similar, with slight differences reflecting protocol
8713 specifics. In particular, with ALPN the protocol negotiation takes
8714 place on server, while with NPN the client implements the protocol
8715 negotiation logic.
8716
8717 With ALPN, the most basic implementation looks like this:
8718
8719 ### client side
8720 use Net::SSLeay;
8721 use IO::Socket::INET;
8722
8723 Net::SSLeay::initialize();
8724 my $sock = IO::Socket::INET->new(PeerAddr=>'encrypted.google.com:443') or die;
8725 my $ctx = Net::SSLeay::CTX_tlsv1_new() or die;
8726 Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL);
8727 Net::SSLeay::CTX_set_alpn_protos($ctx, ['http/1.1', 'http/2.0', 'spdy/3]);
8728 my $ssl = Net::SSLeay::new($ctx) or die;
8729 Net::SSLeay::set_fd($ssl, fileno($sock)) or die;
8730 Net::SSLeay::connect($ssl);
8731
8732 warn "client:selected=",Net::SSLeay::P_alpn_selected($ssl), "\n";
8733
8734 ### server side
8735 use Net::SSLeay;
8736 use IO::Socket::INET;
8737
8738 Net::SSLeay::initialize();
8739 my $ctx = Net::SSLeay::CTX_tlsv1_new() or die;
8740 Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL);
8741 Net::SSLeay::set_cert_and_key($ctx, "t/data/cert.pem", "t/data/key.pem");
8742 Net::SSLeay::CTX_set_alpn_select_cb($ctx, ['http/1.1', 'http/2.0', 'spdy/3]);
8743 my $sock = IO::Socket::INET->new(LocalAddr=>'localhost', LocalPort=>5443, Proto=>'tcp', Listen=>20) or die;
8744
8745 while (1) {
8746 my $ssl = Net::SSLeay::new($ctx);
8747 warn("server:waiting for incoming connection...\n");
8748 my $fd = $sock->accept();
8749 Net::SSLeay::set_fd($ssl, $fd->fileno);
8750 Net::SSLeay::accept($ssl);
8751 warn "server:selected=",Net::SSLeay::P_alpn_selected($ssl),"\n";
8752 my $got = Net::SSLeay::read($ssl);
8753 Net::SSLeay::ssl_write_all($ssl, "length=".length($got));
8754 Net::SSLeay::free($ssl);
8755 $fd->close();
8756 }
8757 # check with: openssl s_client -connect localhost:5443 -alpn spdy/3,http/1.1
8758
8759 Advanced approach allows you to implement your own negotiation
8760 algorithm.
8761
8762 #see below documentation for:
8763 Net::SSleay::CTX_set_alpn_select_cb($ctx, $perl_callback_function, $callback_data);
8764
8765 Detection of ALPN support (works even in older Net::SSLeay versions):
8766
8767 use Net::SSLeay;
8768
8769 if (exists &Net::SSLeay::P_alpn_selected) {
8770 # do ALPN stuff
8771 }
8772
8773 · CTX_set_alpn_select_cb
8774
8775 COMPATIBILITY: not available in Net-SSLeay-1.55 and before;
8776 requires at least openssl-1.0.2
8777
8778 NOTE: You need CTX_set_alpn_select_cb on server side of TLS
8779 connection.
8780
8781 Simple usage - in this case a "common" negotiation algorithm (as
8782 implemented by openssl's function SSL_select_next_proto) is used.
8783
8784 $rv = Net::SSleay::CTX_set_alpn_select_cb($ctx, $arrayref);
8785 # $ctx - value corresponding to openssl's SSL_CTX structure
8786 # $arrayref - list of accepted protocols - e.g. ['http/2.0', 'http/1.1', 'spdy/3']
8787 #
8788 # returns: 0 on success, 1 on failure
8789
8790 Advanced usage (you probably do not need this):
8791
8792 $rv = Net::SSleay::CTX_set_alpn_select_cb($ctx, $perl_callback_function, $callback_data);
8793 # $ctx - value corresponding to openssl's SSL_CTX structure
8794 # $perl_callback_function - reference to perl function
8795 # $callback_data - [optional] data to passed to callback function when invoked
8796 #
8797 # returns: 0 on success, 1 on failure
8798
8799 # where callback function looks like
8800 sub alpn_select_cb_invoke {
8801 my ($ssl, $arrayref_proto_list_advertised_by_client, $callback_data) = @_;
8802 # ...
8803 if ($negotiated) {
8804 return 'http/2.0';
8805 } else {
8806 return undef;
8807 }
8808 }
8809
8810 To undefine/clear this callback use:
8811
8812 Net::SSleay::CTX_set_alpn_select_cb($ctx, undef);
8813
8814 · set_alpn_protos
8815
8816 COMPATIBILITY: not available in Net-SSLeay-1.55 and before;
8817 requires at least openssl-1.0.2
8818
8819 NOTE: You need set_alpn_protos on client side of TLS connection.
8820
8821 This adds list of supported application layer protocols to
8822 ClientHello message sent by a client. It advertises the
8823 enumeration of supported protocols:
8824
8825 Net::SSLeay::set_alpn_protos($ssl, ['http/1.1', 'http/2.0', 'spdy/3]);
8826 # returns 0 on success
8827
8828 · CTX_set_alpn_protos
8829
8830 COMPATIBILITY: not available in Net-SSLeay-1.55 and before;
8831 requires at least openssl-1.0.2
8832
8833 NOTE: You need CTX_set_alpn_protos on client side of TLS
8834 connection.
8835
8836 This adds list of supported application layer protocols to
8837 ClientHello message sent by a client. It advertises the
8838 enumeration of supported protocols:
8839
8840 Net::SSLeay::CTX_set_alpn_protos($ctx, ['http/1.1', 'http/2.0', 'spdy/3]);
8841 # returns 0 on success
8842
8843 · P_alpn_selected
8844
8845 COMPATIBILITY: not available in Net-SSLeay-1.55 and before;
8846 requires at least openssl-1.0.2
8847
8848 Returns the name of negotiated protocol for given TLS connection
8849 $ssl.
8850
8851 $rv = Net::SSLeay::P_alpn_selected($ssl)
8852 # $ssl - value corresponding to openssl's SSL structure
8853 #
8854 # returns: (string) negotiated protocol name (or undef if no negotiation was done or failed with fatal error)
8855
8856 Low level API: DANE Support
8857
8858 OpenSSL version 1.0.2 adds preliminary support RFC6698 Domain
8859 Authentication of Named Entities (DANE) Transport Layer Association
8860 within OpenSSL
8861
8862 · SSL_get_tlsa_record_byname
8863
8864 COMPATIBILITY: DELETED from net-ssleay, since it is not supported
8865 by OpenSSL
8866
8867 In order to facilitate DANE there is additional interface,
8868 SSL_get_tlsa_record_byname, accepting hostname, port and socket
8869 type that returns packed TLSA record. In order to make it even
8870 easier there is additional SSL_ctrl function that calls
8871 SSL_get_tlsa_record_byname for you. Latter is recommended for
8872 programmers that wish to maintain broader binary compatibility,
8873 e.g. make application work with both 1.0.2 and prior version (in
8874 which case call to SSL_ctrl with new code returning error would
8875 have to be ignored when running with prior version).
8876
8877 Net::SSLeay::get_tlsa_record_byname($name, $port, $type);
8878
8879 Low level API: Other functions
8880
8881 · COMP_add_compression_method
8882
8883 Adds the compression method cm with the identifier id to the list
8884 of available compression methods. This list is globally maintained
8885 for all SSL operations within this application. It cannot be set
8886 for specific SSL_CTX or SSL objects.
8887
8888 my $rv = Net::SSLeay::COMP_add_compression_method($id, $cm);
8889 # $id - (integer) compression method id
8890 # 0 to 63: methods defined by the IETF
8891 # 64 to 192: external party methods assigned by IANA
8892 # 193 to 255: reserved for private use
8893 #
8894 # $cm - value corresponding to openssl's COMP_METHOD structure
8895 #
8896 # returns: 0 on success, 1 on failure (check the error queue to find out the reason)
8897
8898 Check openssl doc
8899 <http://www.openssl.org/docs/ssl/SSL_COMP_add_compression_method.html>
8900
8901 · DH_free
8902
8903 Frees the DH structure and its components. The values are erased
8904 before the memory is returned to the system.
8905
8906 Net::SSLeay::DH_free($dh);
8907 # $dh - value corresponding to openssl's DH structure
8908 #
8909 # returns: no return value
8910
8911 Check openssl doc <http://www.openssl.org/docs/crypto/DH_new.html>
8912
8913 · FIPS_mode_set
8914
8915 Enable or disable FIPS mode in a FIPS capable OpenSSL.
8916
8917 Net::SSLeay:: FIPS_mode_set($enable);
8918 # $enable - (integer) 1 to enable, 0 to disable
8919
8920 Low level API: EC related functions
8921
8922 · CTX_set_tmp_ecdh
8923
8924 TBA
8925
8926 · EC_KEY_free
8927
8928 TBA
8929
8930 · EC_KEY_new_by_curve_name
8931
8932 TBA
8933
8934 · EC_KEY_generate_key
8935
8936 Generates a EC key and returns it in a newly allocated EC_KEY
8937 structure. The EC key then can be used to create a PKEY which can
8938 be used in calls like X509_set_pubkey.
8939
8940 my $key = Net::SSLeay::EVP_PKEY_new();
8941 my $ec = Net::SSLeay::EC_KEY_generate_key($curve);
8942 Net::SSLeay::EVP_PKEY_assign_EC_KEY($key,$ec);
8943
8944 # $curve - curve name like 'secp521r1' or the matching Id (integer) of the curve
8945 #
8946 # returns: value corresponding to openssl's EC_KEY structure (0 on failure)
8947
8948 This function has no equivalent in OpenSSL but combines multiple
8949 OpenSSL functions for an easier interface.
8950
8951 Constants
8952 There are many openssl constants available in Net::SSLeay. You can use
8953 them like this:
8954
8955 use Net::SSLeay;
8956 print &Net::SSLeay::NID_commonName;
8957 #or
8958 print Net::SSLeay::NID_commonName();
8959
8960 Or you can import them and use:
8961
8962 use Net::SSLeay qw/NID_commonName/;
8963 print &NID_commonName;
8964 #or
8965 print NID_commonName();
8966 #or
8967 print NID_commonName;
8968
8969 The constants names are derived from openssl constants, however
8970 constants starting with "SSL_" prefix have name with "SSL_" part
8971 stripped - e.g. openssl's constant "SSL_OP_ALL" is available as
8972 "Net::SSleay::OP_ALL"
8973
8974 The list of all available constant names:
8975
8976 ASN1_STRFLGS_ESC_CTRL NID_id_qt_cps OP_NO_QUERY_MTU
8977 ASN1_STRFLGS_ESC_MSB NID_id_qt_unotice OP_NO_RENEGOTIATION
8978 ASN1_STRFLGS_ESC_QUOTE NID_idea_cbc OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
8979 ASN1_STRFLGS_RFC2253 NID_idea_cfb64 OP_NO_SSL_MASK
8980 CB_ACCEPT_EXIT NID_idea_ecb OP_NO_SSLv2
8981 CB_ACCEPT_LOOP NID_idea_ofb64 OP_NO_SSLv3
8982 CB_ALERT NID_info_access OP_NO_TICKET
8983 CB_CONNECT_EXIT NID_initials OP_NO_TLSv1
8984 CB_CONNECT_LOOP NID_invalidity_date OP_NO_TLSv1_1
8985 CB_EXIT NID_issuer_alt_name OP_NO_TLSv1_2
8986 CB_HANDSHAKE_DONE NID_keyBag OP_NO_TLSv1_3
8987 CB_HANDSHAKE_START NID_key_usage OP_PKCS1_CHECK_1
8988 CB_LOOP NID_localKeyID OP_PKCS1_CHECK_2
8989 CB_READ NID_localityName OP_PRIORITIZE_CHACHA
8990 CB_READ_ALERT NID_md2 OP_SAFARI_ECDHE_ECDSA_BUG
8991 CB_WRITE NID_md2WithRSAEncryption OP_SINGLE_DH_USE
8992 CB_WRITE_ALERT NID_md5 OP_SINGLE_ECDH_USE
8993 ERROR_NONE NID_md5WithRSA OP_SSLEAY_080_CLIENT_DH_BUG
8994 ERROR_SSL NID_md5WithRSAEncryption OP_SSLREF2_REUSE_CERT_TYPE_BUG
8995 ERROR_SYSCALL NID_md5_sha1 OP_TLSEXT_PADDING
8996 ERROR_WANT_ACCEPT NID_mdc2 OP_TLS_BLOCK_PADDING_BUG
8997 ERROR_WANT_CONNECT NID_mdc2WithRSA OP_TLS_D5_BUG
8998 ERROR_WANT_READ NID_ms_code_com OP_TLS_ROLLBACK_BUG
8999 ERROR_WANT_WRITE NID_ms_code_ind READING
9000 ERROR_WANT_X509_LOOKUP NID_ms_ctl_sign RECEIVED_SHUTDOWN
9001 ERROR_ZERO_RETURN NID_ms_efs RSA_3
9002 EVP_PKS_DSA NID_ms_ext_req RSA_F4
9003 EVP_PKS_EC NID_ms_sgc R_BAD_AUTHENTICATION_TYPE
9004 EVP_PKS_RSA NID_name R_BAD_CHECKSUM
9005 EVP_PKT_ENC NID_netscape R_BAD_MAC_DECODE
9006 EVP_PKT_EXCH NID_netscape_base_url R_BAD_RESPONSE_ARGUMENT
9007 EVP_PKT_EXP NID_netscape_ca_policy_url R_BAD_SSL_FILETYPE
9008 EVP_PKT_SIGN NID_netscape_ca_revocation_url R_BAD_SSL_SESSION_ID_LENGTH
9009 EVP_PK_DH NID_netscape_cert_extension R_BAD_STATE
9010 EVP_PK_DSA NID_netscape_cert_sequence R_BAD_WRITE_RETRY
9011 EVP_PK_EC NID_netscape_cert_type R_CHALLENGE_IS_DIFFERENT
9012 EVP_PK_RSA NID_netscape_comment R_CIPHER_TABLE_SRC_ERROR
9013 FILETYPE_ASN1 NID_netscape_data_type R_INVALID_CHALLENGE_LENGTH
9014 FILETYPE_PEM NID_netscape_renewal_url R_NO_CERTIFICATE_SET
9015 F_CLIENT_CERTIFICATE NID_netscape_revocation_url R_NO_CERTIFICATE_SPECIFIED
9016 F_CLIENT_HELLO NID_netscape_ssl_server_name R_NO_CIPHER_LIST
9017 F_CLIENT_MASTER_KEY NID_ns_sgc R_NO_CIPHER_MATCH
9018 F_D2I_SSL_SESSION NID_organizationName R_NO_PRIVATEKEY
9019 F_GET_CLIENT_FINISHED NID_organizationalUnitName R_NO_PUBLICKEY
9020 F_GET_CLIENT_HELLO NID_pbeWithMD2AndDES_CBC R_NULL_SSL_CTX
9021 F_GET_CLIENT_MASTER_KEY NID_pbeWithMD2AndRC2_CBC R_PEER_DID_NOT_RETURN_A_CERTIFICATE
9022 F_GET_SERVER_FINISHED NID_pbeWithMD5AndCast5_CBC R_PEER_ERROR
9023 F_GET_SERVER_HELLO NID_pbeWithMD5AndDES_CBC R_PEER_ERROR_CERTIFICATE
9024 F_GET_SERVER_VERIFY NID_pbeWithMD5AndRC2_CBC R_PEER_ERROR_NO_CIPHER
9025 F_I2D_SSL_SESSION NID_pbeWithSHA1AndDES_CBC R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
9026 F_READ_N NID_pbeWithSHA1AndRC2_CBC R_PUBLIC_KEY_ENCRYPT_ERROR
9027 F_REQUEST_CERTIFICATE NID_pbe_WithSHA1And128BitRC2_CBC R_PUBLIC_KEY_IS_NOT_RSA
9028 F_SERVER_HELLO NID_pbe_WithSHA1And128BitRC4 R_READ_WRONG_PACKET_TYPE
9029 F_SSL_CERT_NEW NID_pbe_WithSHA1And2_Key_TripleDES_CBC R_SHORT_READ
9030 F_SSL_GET_NEW_SESSION NID_pbe_WithSHA1And3_Key_TripleDES_CBC R_SSL_SESSION_ID_IS_DIFFERENT
9031 F_SSL_NEW NID_pbe_WithSHA1And40BitRC2_CBC R_UNABLE_TO_EXTRACT_PUBLIC_KEY
9032 F_SSL_READ NID_pbe_WithSHA1And40BitRC4 R_UNKNOWN_REMOTE_ERROR_TYPE
9033 F_SSL_RSA_PRIVATE_DECRYPT NID_pbes2 R_UNKNOWN_STATE
9034 F_SSL_RSA_PUBLIC_ENCRYPT NID_pbmac1 R_X509_LIB
9035 F_SSL_SESSION_NEW NID_pkcs SENT_SHUTDOWN
9036 F_SSL_SESSION_PRINT_FP NID_pkcs3 SESSION_ASN1_VERSION
9037 F_SSL_SET_FD NID_pkcs7 SESS_CACHE_BOTH
9038 F_SSL_SET_RFD NID_pkcs7_data SESS_CACHE_CLIENT
9039 F_SSL_SET_WFD NID_pkcs7_digest SESS_CACHE_NO_AUTO_CLEAR
9040 F_SSL_USE_CERTIFICATE NID_pkcs7_encrypted SESS_CACHE_NO_INTERNAL
9041 F_SSL_USE_CERTIFICATE_ASN1 NID_pkcs7_enveloped SESS_CACHE_NO_INTERNAL_LOOKUP
9042 F_SSL_USE_CERTIFICATE_FILE NID_pkcs7_signed SESS_CACHE_NO_INTERNAL_STORE
9043 F_SSL_USE_PRIVATEKEY NID_pkcs7_signedAndEnveloped SESS_CACHE_OFF
9044 F_SSL_USE_PRIVATEKEY_ASN1 NID_pkcs8ShroudedKeyBag SESS_CACHE_SERVER
9045 F_SSL_USE_PRIVATEKEY_FILE NID_pkcs9 SSL3_VERSION
9046 F_SSL_USE_RSAPRIVATEKEY NID_pkcs9_challengePassword SSLEAY_BUILT_ON
9047 F_SSL_USE_RSAPRIVATEKEY_ASN1 NID_pkcs9_contentType SSLEAY_CFLAGS
9048 F_SSL_USE_RSAPRIVATEKEY_FILE NID_pkcs9_countersignature SSLEAY_DIR
9049 F_WRITE_PENDING NID_pkcs9_emailAddress SSLEAY_PLATFORM
9050 GEN_DIRNAME NID_pkcs9_extCertAttributes SSLEAY_VERSION
9051 GEN_DNS NID_pkcs9_messageDigest ST_ACCEPT
9052 GEN_EDIPARTY NID_pkcs9_signingTime ST_BEFORE
9053 GEN_EMAIL NID_pkcs9_unstructuredAddress ST_CONNECT
9054 GEN_IPADD NID_pkcs9_unstructuredName ST_INIT
9055 GEN_OTHERNAME NID_private_key_usage_period ST_OK
9056 GEN_RID NID_rc2_40_cbc ST_READ_BODY
9057 GEN_URI NID_rc2_64_cbc ST_READ_HEADER
9058 GEN_X400 NID_rc2_cbc TLS1_1_VERSION
9059 LIBRESSL_VERSION_NUMBER NID_rc2_cfb64 TLS1_2_VERSION
9060 MBSTRING_ASC NID_rc2_ecb TLS1_3_VERSION
9061 MBSTRING_BMP NID_rc2_ofb64 TLS1_VERSION
9062 MBSTRING_FLAG NID_rc4 TLSEXT_STATUSTYPE_ocsp
9063 MBSTRING_UNIV NID_rc4_40 VERIFY_CLIENT_ONCE
9064 MBSTRING_UTF8 NID_rc5_cbc VERIFY_FAIL_IF_NO_PEER_CERT
9065 MIN_RSA_MODULUS_LENGTH_IN_BYTES NID_rc5_cfb64 VERIFY_NONE
9066 MODE_ACCEPT_MOVING_WRITE_BUFFER NID_rc5_ecb VERIFY_PEER
9067 MODE_AUTO_RETRY NID_rc5_ofb64 V_OCSP_CERTSTATUS_GOOD
9068 MODE_ENABLE_PARTIAL_WRITE NID_ripemd160 V_OCSP_CERTSTATUS_REVOKED
9069 MODE_RELEASE_BUFFERS NID_ripemd160WithRSA V_OCSP_CERTSTATUS_UNKNOWN
9070 NID_OCSP_sign NID_rle_compression WRITING
9071 NID_SMIMECapabilities NID_rsa X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
9072 NID_X500 NID_rsaEncryption X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS
9073 NID_X509 NID_rsadsi X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
9074 NID_ad_OCSP NID_safeContentsBag X509_CHECK_FLAG_NO_WILDCARDS
9075 NID_ad_ca_issuers NID_sdsiCertificate X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
9076 NID_algorithm NID_secretBag X509_LOOKUP
9077 NID_authority_key_identifier NID_serialNumber X509_PURPOSE_ANY
9078 NID_basic_constraints NID_server_auth X509_PURPOSE_CRL_SIGN
9079 NID_bf_cbc NID_sha X509_PURPOSE_NS_SSL_SERVER
9080 NID_bf_cfb64 NID_sha1 X509_PURPOSE_OCSP_HELPER
9081 NID_bf_ecb NID_sha1WithRSA X509_PURPOSE_SMIME_ENCRYPT
9082 NID_bf_ofb64 NID_sha1WithRSAEncryption X509_PURPOSE_SMIME_SIGN
9083 NID_cast5_cbc NID_shaWithRSAEncryption X509_PURPOSE_SSL_CLIENT
9084 NID_cast5_cfb64 NID_stateOrProvinceName X509_PURPOSE_SSL_SERVER
9085 NID_cast5_ecb NID_subject_alt_name X509_PURPOSE_TIMESTAMP_SIGN
9086 NID_cast5_ofb64 NID_subject_key_identifier X509_TRUST_COMPAT
9087 NID_certBag NID_surname X509_TRUST_EMAIL
9088 NID_certificate_policies NID_sxnet X509_TRUST_OBJECT_SIGN
9089 NID_client_auth NID_time_stamp X509_TRUST_OCSP_REQUEST
9090 NID_code_sign NID_title X509_TRUST_OCSP_SIGN
9091 NID_commonName NID_undef X509_TRUST_SSL_CLIENT
9092 NID_countryName NID_uniqueIdentifier X509_TRUST_SSL_SERVER
9093 NID_crlBag NID_x509Certificate X509_TRUST_TSA
9094 NID_crl_distribution_points NID_x509Crl X509_V_FLAG_ALLOW_PROXY_CERTS
9095 NID_crl_number NID_zlib_compression X509_V_FLAG_CB_ISSUER_CHECK
9096 NID_crl_reason NOTHING X509_V_FLAG_CHECK_SS_SIGNATURE
9097 NID_delta_crl OCSP_RESPONSE_STATUS_INTERNALERROR X509_V_FLAG_CRL_CHECK
9098 NID_des_cbc OCSP_RESPONSE_STATUS_MALFORMEDREQUEST X509_V_FLAG_CRL_CHECK_ALL
9099 NID_des_cfb64 OCSP_RESPONSE_STATUS_SIGREQUIRED X509_V_FLAG_EXPLICIT_POLICY
9100 NID_des_ecb OCSP_RESPONSE_STATUS_SUCCESSFUL X509_V_FLAG_EXTENDED_CRL_SUPPORT
9101 NID_des_ede OCSP_RESPONSE_STATUS_TRYLATER X509_V_FLAG_IGNORE_CRITICAL
9102 NID_des_ede3 OCSP_RESPONSE_STATUS_UNAUTHORIZED X509_V_FLAG_INHIBIT_ANY
9103 NID_des_ede3_cbc OPENSSL_BUILT_ON X509_V_FLAG_INHIBIT_MAP
9104 NID_des_ede3_cfb64 OPENSSL_CFLAGS X509_V_FLAG_NOTIFY_POLICY
9105 NID_des_ede3_ofb64 OPENSSL_DIR X509_V_FLAG_POLICY_CHECK
9106 NID_des_ede_cbc OPENSSL_ENGINES_DIR X509_V_FLAG_POLICY_MASK
9107 NID_des_ede_cfb64 OPENSSL_PLATFORM X509_V_FLAG_TRUSTED_FIRST
9108 NID_des_ede_ofb64 OPENSSL_VERSION X509_V_FLAG_USE_CHECK_TIME
9109 NID_des_ofb64 OPENSSL_VERSION_NUMBER X509_V_FLAG_USE_DELTAS
9110 NID_description OP_ALL X509_V_FLAG_X509_STRICT
9111 NID_desx_cbc OP_ALLOW_NO_DHE_KEX X509_V_OK
9112 NID_dhKeyAgreement OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION XN_FLAG_COMPAT
9113 NID_dnQualifier OP_CIPHER_SERVER_PREFERENCE XN_FLAG_DN_REV
9114 NID_dsa OP_CISCO_ANYCONNECT XN_FLAG_DUMP_UNKNOWN_FIELDS
9115 NID_dsaWithSHA OP_COOKIE_EXCHANGE XN_FLAG_FN_ALIGN
9116 NID_dsaWithSHA1 OP_CRYPTOPRO_TLSEXT_BUG XN_FLAG_FN_LN
9117 NID_dsaWithSHA1_2 OP_DONT_INSERT_EMPTY_FRAGMENTS XN_FLAG_FN_MASK
9118 NID_dsa_2 OP_EPHEMERAL_RSA XN_FLAG_FN_NONE
9119 NID_email_protect OP_LEGACY_SERVER_CONNECT XN_FLAG_FN_OID
9120 NID_ext_key_usage OP_MICROSOFT_BIG_SSLV3_BUFFER XN_FLAG_FN_SN
9121 NID_ext_req OP_MICROSOFT_SESS_ID_BUG XN_FLAG_MULTILINE
9122 NID_friendlyName OP_MSIE_SSLV2_RSA_PADDING XN_FLAG_ONELINE
9123 NID_givenName OP_NETSCAPE_CA_DN_BUG XN_FLAG_RFC2253
9124 NID_hmacWithSHA1 OP_NETSCAPE_CHALLENGE_BUG XN_FLAG_SEP_COMMA_PLUS
9125 NID_id_ad OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG XN_FLAG_SEP_CPLUS_SPC
9126 NID_id_ce OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG XN_FLAG_SEP_MASK
9127 NID_id_kp OP_NON_EXPORT_FIRST XN_FLAG_SEP_MULTILINE
9128 NID_id_pbkdf2 OP_NO_CLIENT_RENEGOTIATION XN_FLAG_SEP_SPLUS_SPC
9129 NID_id_pe OP_NO_COMPRESSION XN_FLAG_SPC_EQ
9130 NID_id_pkix OP_NO_ENCRYPT_THEN_MAC
9131
9132 INTERNAL ONLY functions (do not use these)
9133 The following functions are not intended for use from outside of
9134 Net::SSLeay module. They might be removed, renamed or changed without
9135 prior notice in future version.
9136
9137 Simply DO NOT USE THEM!
9138
9139 · hello
9140
9141 · blength
9142
9143 · constant
9144
9146 One very good example to look at is the implementation of "sslcat()" in
9147 the "SSLeay.pm" file.
9148
9149 The following is a simple SSLeay client (with too little error checking
9150 :-(
9151
9152 #!/usr/bin/perl
9153 use Socket;
9154 use Net::SSLeay qw(die_now die_if_ssl_error) ;
9155 Net::SSLeay::load_error_strings();
9156 Net::SSLeay::SSLeay_add_ssl_algorithms();
9157 Net::SSLeay::randomize();
9158
9159 ($dest_serv, $port, $msg) = @ARGV; # Read command line
9160 $port = getservbyname ($port, 'tcp') unless $port =~ /^\d+$/;
9161 $dest_ip = gethostbyname ($dest_serv);
9162 $dest_serv_params = sockaddr_in($port, $dest_ip);
9163
9164 socket (S, &AF_INET, &SOCK_STREAM, 0) or die "socket: $!";
9165 connect (S, $dest_serv_params) or die "connect: $!";
9166 select (S); $| = 1; select (STDOUT); # Eliminate STDIO buffering
9167
9168 # The network connection is now open, lets fire up SSL
9169
9170 $ctx = Net::SSLeay::CTX_new() or die_now("Failed to create SSL_CTX $!");
9171 Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL)
9172 or die_if_ssl_error("ssl ctx set options");
9173 $ssl = Net::SSLeay::new($ctx) or die_now("Failed to create SSL $!");
9174 Net::SSLeay::set_fd($ssl, fileno(S)); # Must use fileno
9175 $res = Net::SSLeay::connect($ssl) and die_if_ssl_error("ssl connect");
9176 print "Cipher `" . Net::SSLeay::get_cipher($ssl) . "'\n";
9177
9178 # Exchange data
9179
9180 $res = Net::SSLeay::write($ssl, $msg); # Perl knows how long $msg is
9181 die_if_ssl_error("ssl write");
9182 CORE::shutdown S, 1; # Half close --> No more output, sends EOF to server
9183 $got = Net::SSLeay::read($ssl); # Perl returns undef on failure
9184 die_if_ssl_error("ssl read");
9185 print $got;
9186
9187 Net::SSLeay::free ($ssl); # Tear down connection
9188 Net::SSLeay::CTX_free ($ctx);
9189 close S;
9190
9191 The following is a simple SSLeay echo server (non forking):
9192
9193 #!/usr/bin/perl -w
9194 use Socket;
9195 use Net::SSLeay qw(die_now die_if_ssl_error);
9196 Net::SSLeay::load_error_strings();
9197 Net::SSLeay::SSLeay_add_ssl_algorithms();
9198 Net::SSLeay::randomize();
9199
9200 $our_ip = "\0\0\0\0"; # Bind to all interfaces
9201 $port = 1235;
9202 $sockaddr_template = 'S n a4 x8';
9203 $our_serv_params = pack ($sockaddr_template, &AF_INET, $port, $our_ip);
9204
9205 socket (S, &AF_INET, &SOCK_STREAM, 0) or die "socket: $!";
9206 bind (S, $our_serv_params) or die "bind: $!";
9207 listen (S, 5) or die "listen: $!";
9208 $ctx = Net::SSLeay::CTX_new () or die_now("CTX_new ($ctx): $!");
9209 Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL)
9210 or die_if_ssl_error("ssl ctx set options");
9211
9212 # Following will ask password unless private key is not encrypted
9213 Net::SSLeay::CTX_use_RSAPrivateKey_file ($ctx, 'plain-rsa.pem',
9214 &Net::SSLeay::FILETYPE_PEM);
9215 die_if_ssl_error("private key");
9216 Net::SSLeay::CTX_use_certificate_file ($ctx, 'plain-cert.pem',
9217 &Net::SSLeay::FILETYPE_PEM);
9218 die_if_ssl_error("certificate");
9219
9220 while (1) {
9221 print "Accepting connections...\n";
9222 ($addr = accept (NS, S)) or die "accept: $!";
9223 select (NS); $| = 1; select (STDOUT); # Piping hot!
9224
9225 ($af,$client_port,$client_ip) = unpack($sockaddr_template,$addr);
9226 @inetaddr = unpack('C4',$client_ip);
9227 print "$af connection from " .
9228 join ('.', @inetaddr) . ":$client_port\n";
9229
9230 # We now have a network connection, lets fire up SSLeay...
9231
9232 $ssl = Net::SSLeay::new($ctx) or die_now("SSL_new ($ssl): $!");
9233 Net::SSLeay::set_fd($ssl, fileno(NS));
9234
9235 $err = Net::SSLeay::accept($ssl) and die_if_ssl_error('ssl accept');
9236 print "Cipher `" . Net::SSLeay::get_cipher($ssl) . "'\n";
9237
9238 # Connected. Exchange some data.
9239
9240 $got = Net::SSLeay::read($ssl); # Returns undef on fail
9241 die_if_ssl_error("ssl read");
9242 print "Got `$got' (" . length ($got) . " chars)\n";
9243
9244 Net::SSLeay::write ($ssl, uc ($got)) or die "write: $!";
9245 die_if_ssl_error("ssl write");
9246
9247 Net::SSLeay::free ($ssl); # Tear down connection
9248 close NS;
9249 }
9250
9251 Yet another echo server. This one runs from "/etc/inetd.conf" so it
9252 avoids all the socket code overhead. Only caveat is opening an rsa key
9253 file - it had better be without any encryption or else it will not know
9254 where to ask for the password. Note how "STDIN" and "STDOUT" are wired
9255 to SSL.
9256
9257 #!/usr/bin/perl
9258 # /etc/inetd.conf
9259 # ssltst stream tcp nowait root /path/to/server.pl server.pl
9260 # /etc/services
9261 # ssltst 1234/tcp
9262
9263 use Net::SSLeay qw(die_now die_if_ssl_error);
9264 Net::SSLeay::load_error_strings();
9265 Net::SSLeay::SSLeay_add_ssl_algorithms();
9266 Net::SSLeay::randomize();
9267
9268 chdir '/key/dir' or die "chdir: $!";
9269 $| = 1; # Piping hot!
9270 open LOG, ">>/dev/console" or die "Can't open log file $!";
9271 select LOG; print "server.pl started\n";
9272
9273 $ctx = Net::SSLeay::CTX_new() or die_now "CTX_new ($ctx) ($!)";
9274 $ssl = Net::SSLeay::new($ctx) or die_now "new ($ssl) ($!)";
9275 Net::SSLeay::set_options($ssl, &Net::SSLeay::OP_ALL)
9276 and die_if_ssl_error("ssl set options");
9277
9278 # We get already open network connection from inetd, now we just
9279 # need to attach SSLeay to STDIN and STDOUT
9280 Net::SSLeay::set_rfd($ssl, fileno(STDIN));
9281 Net::SSLeay::set_wfd($ssl, fileno(STDOUT));
9282
9283 Net::SSLeay::use_RSAPrivateKey_file ($ssl, 'plain-rsa.pem',
9284 Net::SSLeay::FILETYPE_PEM);
9285 die_if_ssl_error("private key");
9286 Net::SSLeay::use_certificate_file ($ssl, 'plain-cert.pem',
9287 Net::SSLeay::FILETYPE_PEM);
9288 die_if_ssl_error("certificate");
9289
9290 Net::SSLeay::accept($ssl) and die_if_ssl_err("ssl accept: $!");
9291 print "Cipher `" . Net::SSLeay::get_cipher($ssl) . "'\n";
9292
9293 $got = Net::SSLeay::read($ssl);
9294 die_if_ssl_error("ssl read");
9295 print "Got `$got' (" . length ($got) . " chars)\n";
9296
9297 Net::SSLeay::write ($ssl, uc($got)) or die "write: $!";
9298 die_if_ssl_error("ssl write");
9299
9300 Net::SSLeay::free ($ssl); # Tear down the connection
9301 Net::SSLeay::CTX_free ($ctx);
9302 close LOG;
9303
9304 There are also a number of example/test programs in the examples
9305 directory:
9306
9307 sslecho.pl - A simple server, not unlike the one above
9308 minicli.pl - Implements a client using low level SSLeay routines
9309 sslcat.pl - Demonstrates using high level sslcat utility function
9310 get_page.pl - Is a utility for getting html pages from secure servers
9311 callback.pl - Demonstrates certificate verification and callback usage
9312 stdio_bulk.pl - Does SSL over Unix pipes
9313 ssl-inetd-serv.pl - SSL server that can be invoked from inetd.conf
9314 httpd-proxy-snif.pl - Utility that allows you to see how a browser
9315 sends https request to given server and what reply
9316 it gets back (very educative :-)
9317 makecert.pl - Creates a self signed cert (does not use this module)
9318
9320 See README and README.* in the distribution directory for installation
9321 guidance on a variety of platforms.
9322
9324 "Net::SSLeay::read()" uses an internal buffer of 32KB, thus no single
9325 read will return more. In practice one read returns much less, usually
9326 as much as fits in one network packet. To work around this, you should
9327 use a loop like this:
9328
9329 $reply = '';
9330 while ($got = Net::SSLeay::read($ssl)) {
9331 last if print_errs('SSL_read');
9332 $reply .= $got;
9333 }
9334
9335 Although there is no built-in limit in "Net::SSLeay::write()", the
9336 network packet size limitation applies here as well, thus use:
9337
9338 $written = 0;
9339
9340 while ($written < length($message)) {
9341 $written += Net::SSLeay::write($ssl, substr($message, $written));
9342 last if print_errs('SSL_write');
9343 }
9344
9345 Or alternatively you can just use the following convenience functions:
9346
9347 Net::SSLeay::ssl_write_all($ssl, $message) or die "ssl write failure";
9348 $got = Net::SSLeay::ssl_read_all($ssl) or die "ssl read failure";
9349
9351 An OpenSSL bug CVE-2015-0290 "OpenSSL Multiblock Corrupted Pointer
9352 Issue" can cause POST requests of over 90kB to fail or crash. This bug
9353 is reported to be fixed in OpenSSL 1.0.2a.
9354
9355 Autoloader emits a
9356
9357 Argument "xxx" isn't numeric in entersub at blib/lib/Net/SSLeay.pm'
9358
9359 warning if die_if_ssl_error is made autoloadable. If you figure out
9360 why, drop me a line.
9361
9362 Callback set using "SSL_set_verify()" does not appear to work. This may
9363 well be an openssl problem (e.g. see "ssl/ssl_lib.c" line 1029). Try
9364 using "SSL_CTX_set_verify()" instead and do not be surprised if even
9365 this stops working in future versions.
9366
9367 Callback and certificate verification stuff is generally too little
9368 tested.
9369
9370 Random numbers are not initialized randomly enough, especially if you
9371 do not have "/dev/random" and/or "/dev/urandom" (such as in Solaris
9372 platforms - but it's been suggested that cryptorand daemon from the
9373 SUNski package solves this). In this case you should investigate third
9374 party software that can emulate these devices, e.g. by way of a named
9375 pipe to some program.
9376
9377 Another gotcha with random number initialization is randomness
9378 depletion. This phenomenon, which has been extensively discussed in
9379 OpenSSL, Apache-SSL, and Apache-mod_ssl forums, can cause your script
9380 to block if you use "/dev/random" or to operate insecurely if you use
9381 "/dev/urandom". What happens is that when too much randomness is drawn
9382 from the operating system's randomness pool then randomness can
9383 temporarily be unavailable. "/dev/random" solves this problem by
9384 waiting until enough randomness can be gathered - and this can take a
9385 long time since blocking reduces activity in the machine and less
9386 activity provides less random events: a vicious circle. "/dev/urandom"
9387 solves this dilemma more pragmatically by simply returning predictable
9388 "random" numbers. Some" /dev/urandom" emulation software however
9389 actually seems to implement "/dev/random" semantics. Caveat emptor.
9390
9391 I've been pointed to two such daemons by Mik Firestone
9392 <mik@@speed.stdio._com> who has used them on Solaris 8:
9393
9394 1. Entropy Gathering Daemon (EGD) at
9395 <http://www.lothar.com/tech/crypto/>
9396
9397 2. Pseudo-random number generating daemon (PRNGD) at
9398 <http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/prngd.html>
9399
9400 If you are using the low level API functions to communicate with other
9401 SSL implementations, you would do well to call
9402
9403 Net::SSLeay::CTX_set_options($ctx, &Net::SSLeay::OP_ALL)
9404 or die_if_ssl_error("ssl ctx set options");
9405
9406 to cope with some well know bugs in some other SSL implementations. The
9407 high level API functions always set all known compatibility options.
9408
9409 Sometimes "sslcat()" (and the high level HTTPS functions that build on
9410 it) is too fast in signaling the EOF to legacy HTTPS servers. This
9411 causes the server to return empty page. To work around this problem you
9412 can set the global variable
9413
9414 $Net::SSLeay::slowly = 1; # Add sleep so broken servers can keep up
9415
9416 HTTP/1.1 is not supported. Specifically this module does not know to
9417 issue or serve multiple http requests per connection. This is a serious
9418 shortcoming, but using the SSL session cache on your server helps to
9419 alleviate the CPU load somewhat.
9420
9421 As of version 1.09 many newer OpenSSL auxiliary functions were added
9422 (from "REM_AUTOMATICALLY_GENERATED_1_09" onwards in "SSLeay.xs").
9423 Unfortunately I have not had any opportunity to test these. Some of
9424 them are trivial enough that I believe they "just work", but others
9425 have rather complex interfaces with function pointers and all. In these
9426 cases you should proceed wit great caution.
9427
9428 This module defaults to using OpenSSL automatic protocol negotiation
9429 code for automatically detecting the version of the SSL protocol that
9430 the other end talks. With most web servers this works just fine, but
9431 once in a while I get complaints from people that the module does not
9432 work with some web servers. Usually this can be solved by explicitly
9433 setting the protocol version, e.g.
9434
9435 $Net::SSLeay::ssl_version = 2; # Insist on SSLv2
9436 $Net::SSLeay::ssl_version = 3; # Insist on SSLv3
9437 $Net::SSLeay::ssl_version = 10; # Insist on TLSv1
9438
9439 Although the autonegotiation is nice to have, the SSL standards do not
9440 formally specify any such mechanism. Most of the world has accepted the
9441 SSLeay/OpenSSL way of doing it as the de facto standard. But for the
9442 few that think differently, you have to explicitly speak the correct
9443 version. This is not really a bug, but rather a deficiency in the
9444 standards. If a site refuses to respond or sends back some nonsensical
9445 error codes (at the SSL handshake level), try this option before
9446 mailing me.
9447
9448 On some systems, OpenSSL may be compiled without support for SSLv2. If
9449 this is the case, Net::SSLeay will warn if ssl_version has been set to
9450 2.
9451
9452 The high level API returns the certificate of the peer, thus allowing
9453 one to check what certificate was supplied. However, you will only be
9454 able to check the certificate after the fact, i.e. you already sent
9455 your form data by the time you find out that you did not trust them,
9456 oops.
9457
9458 So, while being able to know the certificate after the fact is surely
9459 useful, the security minded would still choose to do the connection and
9460 certificate verification first and only then exchange data with the
9461 site. Currently none of the high level API functions do this, thus you
9462 would have to program it using the low level API. A good place to start
9463 is to see how the "Net::SSLeay::http_cat()" function is implemented.
9464
9465 The high level API functions use a global file handle "SSLCAT_S"
9466 internally. This really should not be a problem because there is no way
9467 to interleave the high level API functions, unless you use threads (but
9468 threads are not very well supported in perl anyway (as of version
9469 5.6.1). However, you may run into problems if you call undocumented
9470 internal functions in an interleaved fashion. The best solution is to
9471 "require Net::SSLeay" in one thread after all the threads have been
9472 created.
9473
9475 Random number generator not seeded!!!
9476 (W) This warning indicates that "randomize()" was not able to read
9477 "/dev/random" or "/dev/urandom", possibly because your system does
9478 not have them or they are differently named. You can still use SSL,
9479 but the encryption will not be as strong.
9480
9481 open_tcp_connection: destination host not found:`server' (port 123)
9482 ($!)
9483 Name lookup for host named "server" failed.
9484
9485 open_tcp_connection: failed `server', 123 ($!)
9486 The name was resolved, but establishing the TCP connection failed.
9487
9488 msg 123: 1 - error:140770F8:SSL routines:SSL23_GET_SERVER_HELLO:unknown
9489 proto
9490 SSLeay error string. The first number (123) is the PID, the second
9491 number (1) indicates the position of the error message in SSLeay
9492 error stack. You often see a pile of these messages as errors
9493 cascade.
9494
9495 msg 123: 1 - error:02001002::lib(2) :func(1) :reason(2)
9496 The same as above, but you didn't call load_error_strings() so
9497 SSLeay couldn't verbosely explain the error. You can still find out
9498 what it means with this command:
9499
9500 /usr/local/ssl/bin/ssleay errstr 02001002
9501
9502 Password is being asked for private key
9503 This is normal behaviour if your private key is encrypted. Either
9504 you have to supply the password or you have to use an unencrypted
9505 private key. Scan OpenSSL.org for the FAQ that explains how to do
9506 this (or just study examples/makecert.pl which is used during "make
9507 test" to do just that).
9508
9510 You can mitigate some of the security vulnerabilities that might be
9511 present in your SSL/TLS application:
9512
9513 BEAST Attack
9514 http://blogs.cisco.com/security/beat-the-beast-with-tls/
9515 https://community.qualys.com/blogs/securitylabs/2011/10/17/mitigating-the-beast-attack-on-tls
9516 http://blog.zoller.lu/2011/09/beast-summary-tls-cbc-countermeasures.html
9517
9518 The BEAST attack relies on a weakness in the way CBC mode is used in
9519 SSL/TLS. In OpenSSL versions 0.9.6d and later, the protocol-level
9520 mitigation is enabled by default, thus making it not vulnerable to the
9521 BEAST attack.
9522
9523 Solutions:
9524
9525 · Compile with OpenSSL versions 0.9.6d or later, which enables
9526 SSL_OP_ALL by default
9527
9528 · Ensure SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS is not enabled (its not
9529 enabled by default)
9530
9531 · Don't support SSLv2, SSLv3
9532
9533 · Actively control the ciphers your server supports with
9534 set_cipher_list:
9535
9536 Net::SSLeay::set_cipher_list($ssl, 'RC4-SHA:HIGH:!ADH');
9537
9538 Session Resumption
9539 http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html
9540
9541 The SSL Labs vulnerability test on your SSL server might report in red:
9542
9543 Session resumption No (IDs assigned but not accepted)
9544
9545 This report is not really bug or a vulnerability, since the server will
9546 not accept session resumption requests. However, you can prevent this
9547 noise in the report by disabling the session cache altogether:
9548 Net::SSLeay::CTX_set_session_cache_mode($ssl_ctx,
9549 Net::SSLeay::SESS_CACHE_OFF()); Use 0 if you don't have SESS_CACHE_OFF
9550 constant.
9551
9552 Secure Renegotiation and DoS Attack
9553 https://community.qualys.com/blogs/securitylabs/2011/10/31/tls-renegotiation-and-denial-of-service-attacks
9554
9555 This is not a "security flaw," it is more of a DoS vulnerability.
9556
9557 Solutions:
9558
9559 · Do not support SSLv2
9560
9561 · Do not set the SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION option
9562
9563 · Compile with OpenSSL 0.9.8m or later
9564
9566 Please report any bugs or feature requests to "bug-Net-SSLeay at
9567 rt.cpan.org", or through the web interface at
9568 <http://rt.cpan.org/Public/Dist/Display.html?Name=Net-SSLeay>. I will
9569 be notified, and then you'll automatically be notified of progress on
9570 your bug as I make changes.
9571
9572 Subversion access to the latest source code etc can be obtained at
9573 <http://alioth.debian.org/projects/net-ssleay>
9574
9575 The developer mailing list (for people interested in contributing to
9576 the source code) can be found at
9577 <http://lists.alioth.debian.org/mailman/listinfo/net-ssleay-devel>
9578
9579 You can find documentation for this module with the "perldoc" command.
9580
9581 perldoc Net::SSLeay
9582
9583 You can also look for information at:
9584
9585 · AnnoCPAN: Annotated CPAN documentation
9586
9587 <http://annocpan.org/dist/Net-SSLeay>
9588
9589 · CPAN Ratings
9590
9591 <http://cpanratings.perl.org/d/Net-SSLeay>
9592
9593 · Search CPAN
9594
9595 <http://search.cpan.org/dist/Net-SSLeay>
9596
9597 Commercial support for Net::SSLeay may be obtained from
9598
9599 Symlabs (netssleay@symlabs.com)
9600 Tel: +351-214.222.630
9601 Fax: +351-214.222.637
9602
9604 Maintained by Mike McCauley and Florian Ragwitz since November 2005
9605
9606 Originally written by Sampo Kellomäki <sampo@symlabs.com>
9607
9609 Copyright (c) 1996-2003 Sampo Kellomäki <sampo@symlabs.com>
9610
9611 Copyright (C) 2005-2006 Florian Ragwitz <rafl@debian.org>
9612
9613 Copyright (C) 2005 Mike McCauley <mikem@airspayce.com>
9614
9615 All Rights Reserved.
9616
9617 Distribution and use of this module is under the same terms as the
9618 OpenSSL package itself (i.e. free, but mandatory attribution; NO
9619 WARRANTY). Please consult LICENSE file in the root of the Net-SSLeay
9620 distribution, and also included in this distribution.
9621
9622 The Authors credit Eric Young and the OpenSSL team with the development
9623 of the excellent OpenSSL library, which this Perl package uses.
9624
9625 And remember, you, and nobody else but you, are responsible for
9626 auditing this module and OpenSSL library for security problems,
9627 backdoors, and general suitability for your application.
9628
9630 From version 1.66 onwards, this Net-SSLeay library is issued under the
9631 "Perl Artistic License 2.0", the same license as Perl itself.
9632
9633 (ignore this line: this is to keep kwalitee happy by saying: Not GPL)
9634
9636 Net::SSLeay::Handle - File handle interface
9637 ./examples - Example servers and a clients
9638 <http://www.openssl.org/> - OpenSSL source, documentation, etc
9639 openssl-users-request@openssl.org - General OpenSSL mailing list
9640 <http://www.ietf.org/rfc/rfc2246.txt> - TLS 1.0 specification
9641 <http://www.w3c.org> - HTTP specifications
9642 <http://www.ietf.org/rfc/rfc2617.txt> - How to send password
9643 <http://www.lothar.com/tech/crypto/> - Entropy Gathering Daemon (EGD)
9644 <http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/prngd.html>
9645 - pseudo-random number generating daemon (PRNGD)
9646 perl(1)
9647 perlref(1)
9648 perllol(1)
9649 perldoc ~openssl/doc/ssl/SSL_CTX_set_verify.pod
9650
9651
9652
9653perl v5.28.1 2019-01-19 Net::SSLeay(3)