yuezonghe | 824eb0c | 2024-06-27 02:32:26 -0700 | [diff] [blame] | 1 | =pod |
| 2 | |
| 3 | =head1 NAME |
| 4 | |
| 5 | SSL_shutdown - shut down a TLS/SSL connection |
| 6 | |
| 7 | =head1 SYNOPSIS |
| 8 | |
| 9 | #include <openssl/ssl.h> |
| 10 | |
| 11 | int SSL_shutdown(SSL *ssl); |
| 12 | |
| 13 | =head1 DESCRIPTION |
| 14 | |
| 15 | SSL_shutdown() shuts down an active TLS/SSL connection. It sends the |
| 16 | close_notify shutdown alert to the peer. |
| 17 | |
| 18 | =head1 NOTES |
| 19 | |
| 20 | SSL_shutdown() tries to send the close_notify shutdown alert to the peer. |
| 21 | Whether the operation succeeds or not, the SSL_SENT_SHUTDOWN flag is set and |
| 22 | a currently open session is considered closed and good and will be kept in the |
| 23 | session cache for further reuse. |
| 24 | |
| 25 | Note that SSL_shutdown() must not be called if a previous fatal error has |
| 26 | occurred on a connection i.e. if SSL_get_error() has returned SSL_ERROR_SYSCALL |
| 27 | or SSL_ERROR_SSL. |
| 28 | |
| 29 | The shutdown procedure consists of two steps: sending of the close_notify |
| 30 | shutdown alert, and reception of the peer's close_notify shutdown alert. |
| 31 | The order of those two steps depends on the application. |
| 32 | |
| 33 | It is acceptable for an application to only send its shutdown alert and |
| 34 | then close the underlying connection without waiting for the peer's response. |
| 35 | This way resources can be saved, as the process can already terminate or |
| 36 | serve another connection. |
| 37 | This should only be done when it is known that the other side will not send more |
| 38 | data, otherwise there is a risk of a truncation attack. |
| 39 | |
| 40 | When a client only writes and never reads from the connection, and the server |
| 41 | has sent a session ticket to establish a session, the client might not be able |
| 42 | to resume the session because it did not received and process the session ticket |
| 43 | from the server. |
| 44 | In case the application wants to be able to resume the session, it is recommended to |
| 45 | do a complete shutdown procedure (bidirectional close_notify alerts). |
| 46 | |
| 47 | When the underlying connection shall be used for more communications, the |
| 48 | complete shutdown procedure must be performed, so that the peers stay |
| 49 | synchronized. |
| 50 | |
| 51 | SSL_shutdown() only closes the write direction. |
| 52 | It is not possible to call SSL_write() after calling SSL_shutdown(). |
| 53 | The read direction is closed by the peer. |
| 54 | |
| 55 | =head2 First to close the connection |
| 56 | |
| 57 | When the application is the first party to send the close_notify |
| 58 | alert, SSL_shutdown() will only send the alert and then set the |
| 59 | SSL_SENT_SHUTDOWN flag (so that the session is considered good and will |
| 60 | be kept in the cache). |
| 61 | If successful, SSL_shutdown() will return 0. |
| 62 | |
| 63 | If a unidirectional shutdown is enough (the underlying connection shall be |
| 64 | closed anyway), this first successful call to SSL_shutdown() is sufficient. |
| 65 | |
| 66 | In order to complete the bidirectional shutdown handshake, the peer needs |
| 67 | to send back a close_notify alert. |
| 68 | The SSL_RECEIVED_SHUTDOWN flag will be set after receiving and processing |
| 69 | it. |
| 70 | |
| 71 | The peer is still allowed to send data after receiving the close_notify |
| 72 | event. |
| 73 | When it is done sending data, it will send the close_notify alert. |
| 74 | SSL_read() should be called until all data is received. |
| 75 | SSL_read() will indicate the end of the peer data by returning <= 0 |
| 76 | and SSL_get_error() returning SSL_ERROR_ZERO_RETURN. |
| 77 | |
| 78 | =head2 Peer closes the connection |
| 79 | |
| 80 | If the peer already sent the close_notify alert B<and> it was |
| 81 | already processed implicitly inside another function |
| 82 | (L<SSL_read(3)>), the SSL_RECEIVED_SHUTDOWN flag is set. |
| 83 | SSL_read() will return <= 0 in that case, and SSL_get_error() will return |
| 84 | SSL_ERROR_ZERO_RETURN. |
| 85 | SSL_shutdown() will send the close_notify alert, set the SSL_SENT_SHUTDOWN |
| 86 | flag. |
| 87 | If successful, SSL_shutdown() will return 1. |
| 88 | |
| 89 | Whether SSL_RECEIVED_SHUTDOWN is already set can be checked using the |
| 90 | SSL_get_shutdown() (see also L<SSL_set_shutdown(3)> call. |
| 91 | |
| 92 | =head1 NOTES |
| 93 | |
| 94 | The behaviour of SSL_shutdown() additionally depends on the underlying BIO. |
| 95 | If the underlying BIO is B<blocking>, SSL_shutdown() will only return once the |
| 96 | handshake step has been finished or an error occurred. |
| 97 | |
| 98 | If the underlying BIO is B<nonblocking>, SSL_shutdown() will also return |
| 99 | when the underlying BIO could not satisfy the needs of SSL_shutdown() |
| 100 | to continue the handshake. In this case a call to SSL_get_error() with the |
| 101 | return value of SSL_shutdown() will yield B<SSL_ERROR_WANT_READ> or |
| 102 | B<SSL_ERROR_WANT_WRITE>. The calling process then must repeat the call after |
| 103 | taking appropriate action to satisfy the needs of SSL_shutdown(). |
| 104 | The action depends on the underlying BIO. When using a nonblocking socket, |
| 105 | nothing is to be done, but select() can be used to check for the required |
| 106 | condition. When using a buffering BIO, like a BIO pair, data must be written |
| 107 | into or retrieved out of the BIO before being able to continue. |
| 108 | |
| 109 | After SSL_shutdown() returned 0, it is possible to call SSL_shutdown() again |
| 110 | to wait for the peer's close_notify alert. |
| 111 | SSL_shutdown() will return 1 in that case. |
| 112 | However, it is recommended to wait for it using SSL_read() instead. |
| 113 | |
| 114 | SSL_shutdown() can be modified to only set the connection to "shutdown" |
| 115 | state but not actually send the close_notify alert messages, |
| 116 | see L<SSL_CTX_set_quiet_shutdown(3)>. |
| 117 | When "quiet shutdown" is enabled, SSL_shutdown() will always succeed |
| 118 | and return 1. |
| 119 | Note that this is not standard compliant behaviour. |
| 120 | It should only be done when the peer has a way to make sure all |
| 121 | data has been received and doesn't wait for the close_notify alert |
| 122 | message, otherwise an unexpected EOF will be reported. |
| 123 | |
| 124 | There are implementations that do not send the required close_notify alert. |
| 125 | If there is a need to communicate with such an implementation, and it's clear |
| 126 | that all data has been received, do not wait for the peer's close_notify alert. |
| 127 | Waiting for the close_notify alert when the peer just closes the connection will |
| 128 | result in an error being generated. |
| 129 | |
| 130 | =head1 RETURN VALUES |
| 131 | |
| 132 | The following return values can occur: |
| 133 | |
| 134 | =over 4 |
| 135 | |
| 136 | =item Z<>0 |
| 137 | |
| 138 | The shutdown is not yet finished: the close_notify was sent but the peer |
| 139 | did not send it back yet. |
| 140 | Call SSL_read() to do a bidirectional shutdown. |
| 141 | |
| 142 | Unlike most other function, returning 0 does not indicate an error. |
| 143 | L<SSL_get_error(3)> should not get called, it may misleadingly |
| 144 | indicate an error even though no error occurred. |
| 145 | |
| 146 | =item Z<>1 |
| 147 | |
| 148 | The shutdown was successfully completed. The close_notify alert was sent |
| 149 | and the peer's close_notify alert was received. |
| 150 | |
| 151 | =item E<lt>0 |
| 152 | |
| 153 | The shutdown was not successful. |
| 154 | Call L<SSL_get_error(3)> with the return value B<ret> to find out the reason. |
| 155 | It can occur if an action is needed to continue the operation for nonblocking |
| 156 | BIOs. |
| 157 | |
| 158 | It can also occur when not all data was read using SSL_read(). |
| 159 | |
| 160 | =back |
| 161 | |
| 162 | =head1 SEE ALSO |
| 163 | |
| 164 | L<SSL_get_error(3)>, L<SSL_connect(3)>, |
| 165 | L<SSL_accept(3)>, L<SSL_set_shutdown(3)>, |
| 166 | L<SSL_CTX_set_quiet_shutdown(3)>, |
| 167 | L<SSL_clear(3)>, L<SSL_free(3)>, |
| 168 | L<ssl(7)>, L<bio(7)> |
| 169 | |
| 170 | =head1 COPYRIGHT |
| 171 | |
| 172 | Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved. |
| 173 | |
| 174 | Licensed under the OpenSSL license (the "License"). You may not use |
| 175 | this file except in compliance with the License. You can obtain a copy |
| 176 | in the file LICENSE in the source distribution or at |
| 177 | L<https://www.openssl.org/source/license.html>. |
| 178 | |
| 179 | =cut |