=pod

=head1 NAME

SSL_get_peer_certificate,
SSL_get0_peer_certificate,
SSL_get1_peer_certificate - get the X509 certificate of the peer

=head1 SYNOPSIS

 #include <openssl/ssl.h>

 X509 *SSL_get_peer_certificate(const SSL *ssl);
 X509 *SSL_get0_peer_certificate(const SSL *ssl);
 X509 *SSL_get1_peer_certificate(const SSL *ssl);

=head1 DESCRIPTION

These functions return a pointer to the X509 certificate the
peer presented. If the peer did not present a certificate, NULL is returned.

=head1 NOTES

Due to the protocol definition, a TLS/SSL server will always send a
certificate, if present. A client will only send a certificate when
explicitly requested to do so by the server (see
L<SSL_CTX_set_verify(3)>). If an anonymous cipher
is used, no certificates are sent.

That a certificate is returned does not indicate information about the
verification state, use L<SSL_get_verify_result(3)>
to check the verification state.

The reference count of the X509 object returned by SSL_get1_peer_certificate()
is incremented by one, so that it will not be destroyed when the session
containing the peer certificate is freed. The X509 object must be explicitly
freed using X509_free().

The reference count of the X509 object returned by SSL_get0_peer_certificate()
is not incremented, and must not be freed.

SSL_get_peer_certificate() is an alias of SSL_get1_peer_certificate().

=head1 RETURN VALUES

The following return values can occur:

=over 4

=item NULL

No certificate was presented by the peer or no connection was established.

=item Pointer to an X509 certificate

The return value points to the certificate presented by the peer.

=back

=head1 SEE ALSO

L<ssl(7)>, L<SSL_get_verify_result(3)>,
L<SSL_CTX_set_verify(3)>

=head1 HISTORY

SSL_get0_peer_certificate() and SSL_get1_peer_certificate() were added in 3.0.0.
SSL_get_peer_certificate() was deprecated in 3.0.0.

=head1 COPYRIGHT

Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
