SSL_key_update.3ossl 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42)
  2. .\"
  3. .\" Standard preamble:
  4. .\" ========================================================================
  5. .de Sp \" Vertical space (when we can't use .PP)
  6. .if t .sp .5v
  7. .if n .sp
  8. ..
  9. .de Vb \" Begin verbatim text
  10. .ft CW
  11. .nf
  12. .ne \\$1
  13. ..
  14. .de Ve \" End verbatim text
  15. .ft R
  16. .fi
  17. ..
  18. .\" Set up some character translations and predefined strings. \*(-- will
  19. .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  20. .\" double quote, and \*(R" will give a right double quote. \*(C+ will
  21. .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
  22. .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
  23. .\" nothing in troff, for use with C<>.
  24. .tr \(*W-
  25. .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  26. .ie n \{\
  27. . ds -- \(*W-
  28. . ds PI pi
  29. . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  30. . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  31. . ds L" ""
  32. . ds R" ""
  33. . ds C` ""
  34. . ds C' ""
  35. 'br\}
  36. .el\{\
  37. . ds -- \|\(em\|
  38. . ds PI \(*p
  39. . ds L" ``
  40. . ds R" ''
  41. . ds C`
  42. . ds C'
  43. 'br\}
  44. .\"
  45. .\" Escape single quotes in literal strings from groff's Unicode transform.
  46. .ie \n(.g .ds Aq \(aq
  47. .el .ds Aq '
  48. .\"
  49. .\" If the F register is >0, we'll generate index entries on stderr for
  50. .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
  51. .\" entries marked with X<> in POD. Of course, you'll have to process the
  52. .\" output yourself in some meaningful fashion.
  53. .\"
  54. .\" Avoid warning from groff about undefined register 'F'.
  55. .de IX
  56. ..
  57. .nr rF 0
  58. .if \n(.g .if rF .nr rF 1
  59. .if (\n(rF:(\n(.g==0)) \{\
  60. . if \nF \{\
  61. . de IX
  62. . tm Index:\\$1\t\\n%\t"\\$2"
  63. ..
  64. . if !\nF==2 \{\
  65. . nr % 0
  66. . nr F 2
  67. . \}
  68. . \}
  69. .\}
  70. .rr rF
  71. .\"
  72. .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  73. .\" Fear. Run. Save yourself. No user-serviceable parts.
  74. . \" fudge factors for nroff and troff
  75. .if n \{\
  76. . ds #H 0
  77. . ds #V .8m
  78. . ds #F .3m
  79. . ds #[ \f1
  80. . ds #] \fP
  81. .\}
  82. .if t \{\
  83. . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  84. . ds #V .6m
  85. . ds #F 0
  86. . ds #[ \&
  87. . ds #] \&
  88. .\}
  89. . \" simple accents for nroff and troff
  90. .if n \{\
  91. . ds ' \&
  92. . ds ` \&
  93. . ds ^ \&
  94. . ds , \&
  95. . ds ~ ~
  96. . ds /
  97. .\}
  98. .if t \{\
  99. . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  100. . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  101. . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  102. . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  103. . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  104. . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  105. .\}
  106. . \" troff and (daisy-wheel) nroff accents
  107. .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
  108. .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  109. .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
  110. .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
  111. .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  112. .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
  113. .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
  114. .ds ae a\h'-(\w'a'u*4/10)'e
  115. .ds Ae A\h'-(\w'A'u*4/10)'E
  116. . \" corrections for vroff
  117. .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
  118. .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  119. . \" for low resolution devices (crt and lpr)
  120. .if \n(.H>23 .if \n(.V>19 \
  121. \{\
  122. . ds : e
  123. . ds 8 ss
  124. . ds o a
  125. . ds d- d\h'-1'\(ga
  126. . ds D- D\h'-1'\(hy
  127. . ds th \o'bp'
  128. . ds Th \o'LP'
  129. . ds ae ae
  130. . ds Ae AE
  131. .\}
  132. .rm #[ #] #H #V #F C
  133. .\" ========================================================================
  134. .\"
  135. .IX Title "SSL_KEY_UPDATE 3ossl"
  136. .TH SSL_KEY_UPDATE 3ossl "2024-09-03" "3.3.2" "OpenSSL"
  137. .\" For nroff, turn off justification. Always turn off hyphenation; it makes
  138. .\" way too many mistakes in technical documents.
  139. .if n .ad l
  140. .nh
  141. .SH "NAME"
  142. SSL_key_update,
  143. SSL_get_key_update_type,
  144. SSL_renegotiate,
  145. SSL_renegotiate_abbreviated,
  146. SSL_renegotiate_pending
  147. \&\- initiate and obtain information about updating connection keys
  148. .SH "SYNOPSIS"
  149. .IX Header "SYNOPSIS"
  150. .Vb 1
  151. \& #include <openssl/ssl.h>
  152. \&
  153. \& int SSL_key_update(SSL *s, int updatetype);
  154. \& int SSL_get_key_update_type(const SSL *s);
  155. \&
  156. \& int SSL_renegotiate(SSL *s);
  157. \& int SSL_renegotiate_abbreviated(SSL *s);
  158. \& int SSL_renegotiate_pending(const SSL *s);
  159. .Ve
  160. .SH "DESCRIPTION"
  161. .IX Header "DESCRIPTION"
  162. \&\fBSSL_key_update()\fR schedules an update of the keys for the current \s-1TLS\s0 connection.
  163. If the \fBupdatetype\fR parameter is set to \fB\s-1SSL_KEY_UPDATE_NOT_REQUESTED\s0\fR then
  164. the sending keys for this connection will be updated and the peer will be
  165. informed of the change. If the \fBupdatetype\fR parameter is set to
  166. \&\fB\s-1SSL_KEY_UPDATE_REQUESTED\s0\fR then the sending keys for this connection will be
  167. updated and the peer will be informed of the change along with a request for the
  168. peer to additionally update its sending keys. It is an error if \fBupdatetype\fR is
  169. set to \fB\s-1SSL_KEY_UPDATE_NONE\s0\fR.
  170. .PP
  171. \&\fBSSL_key_update()\fR must only be called after the initial handshake has been
  172. completed and TLSv1.3 or \s-1QUIC\s0 has been negotiated, at the same time, the
  173. application needs to ensure that the writing of data has been completed. The key
  174. update will not take place until the next time an \s-1IO\s0 operation such as
  175. \&\fBSSL_read_ex()\fR or \fBSSL_write_ex()\fR takes place on the connection. Alternatively
  176. \&\fBSSL_do_handshake()\fR can be called to force the update to take place immediately.
  177. .PP
  178. \&\fBSSL_get_key_update_type()\fR can be used to determine whether a key update
  179. operation has been scheduled but not yet performed. The type of the pending key
  180. update operation will be returned if there is one, or \s-1SSL_KEY_UPDATE_NONE\s0
  181. otherwise.
  182. .PP
  183. \&\fBSSL_renegotiate()\fR and \fBSSL_renegotiate_abbreviated()\fR should only be called for
  184. connections that have negotiated TLSv1.2 or less. Calling them on any other
  185. connection will result in an error.
  186. .PP
  187. When called from the client side, \fBSSL_renegotiate()\fR schedules a completely new
  188. handshake over an existing \s-1SSL/TLS\s0 connection. The next time an \s-1IO\s0 operation
  189. such as \fBSSL_read_ex()\fR or \fBSSL_write_ex()\fR takes place on the connection a check
  190. will be performed to confirm that it is a suitable time to start a
  191. renegotiation. If so, then it will be initiated immediately. OpenSSL will not
  192. attempt to resume any session associated with the connection in the new
  193. handshake.
  194. .PP
  195. When called from the client side, \fBSSL_renegotiate_abbreviated()\fR works in the
  196. same was as \fBSSL_renegotiate()\fR except that OpenSSL will attempt to resume the
  197. session associated with the current connection in the new handshake.
  198. .PP
  199. When called from the server side, \fBSSL_renegotiate()\fR and
  200. \&\fBSSL_renegotiate_abbreviated()\fR behave identically. They both schedule a request
  201. for a new handshake to be sent to the client. The next time an \s-1IO\s0 operation is
  202. performed then the same checks as on the client side are performed and then, if
  203. appropriate, the request is sent. The client may or may not respond with a new
  204. handshake and it may or may not attempt to resume an existing session. If
  205. a new handshake is started then this will be handled transparently by calling
  206. any OpenSSL \s-1IO\s0 function.
  207. .PP
  208. If an OpenSSL client receives a renegotiation request from a server then again
  209. this will be handled transparently through calling any OpenSSL \s-1IO\s0 function. For
  210. a \s-1TLS\s0 connection the client will attempt to resume the current session in the
  211. new handshake. For historical reasons, \s-1DTLS\s0 clients will not attempt to resume
  212. the session in the new handshake.
  213. .PP
  214. The \fBSSL_renegotiate_pending()\fR function returns 1 if a renegotiation or
  215. renegotiation request has been scheduled but not yet acted on, or 0 otherwise.
  216. .SH "USAGE WITH QUIC"
  217. .IX Header "USAGE WITH QUIC"
  218. \&\fBSSL_key_update()\fR can also be used to perform a key update when using \s-1QUIC.\s0 The
  219. function must be called on a \s-1QUIC\s0 connection \s-1SSL\s0 object. This is normally done
  220. automatically when needed. Since a locally initiated \s-1QUIC\s0 key update always
  221. causes a peer to also trigger a key update, passing
  222. \&\fB\s-1SSL_KEY_UPDATE_NOT_REQUESTED\s0\fR as \fBupdatetype\fR has the same effect as passing
  223. \&\fB\s-1SSL_KEY_UPDATE_REQUESTED\s0\fR.
  224. .PP
  225. The \s-1QUIC\s0 connection must have been fully established before a key update can be
  226. performed, and other \s-1QUIC\s0 protocol rules govern how frequently \s-1QUIC\s0 key update
  227. can be performed. \fBSSL_key_update()\fR will fail if these requirements are not met.
  228. .PP
  229. Because \s-1QUIC\s0 key updates are always handled immediately,
  230. \&\fBSSL_get_key_update_type()\fR always returns \s-1SSL_KEY_UPDATE_NONE\s0 when called on a
  231. \&\s-1QUIC\s0 connection \s-1SSL\s0 object.
  232. .SH "RETURN VALUES"
  233. .IX Header "RETURN VALUES"
  234. \&\fBSSL_key_update()\fR, \fBSSL_renegotiate()\fR and \fBSSL_renegotiate_abbreviated()\fR return 1
  235. on success or 0 on error.
  236. .PP
  237. \&\fBSSL_get_key_update_type()\fR returns the update type of the pending key update
  238. operation or \s-1SSL_KEY_UPDATE_NONE\s0 if there is none.
  239. .PP
  240. \&\fBSSL_renegotiate_pending()\fR returns 1 if a renegotiation or renegotiation request
  241. has been scheduled but not yet acted on, or 0 otherwise.
  242. .SH "SEE ALSO"
  243. .IX Header "SEE ALSO"
  244. \&\fBssl\fR\|(7), \fBSSL_read_ex\fR\|(3),
  245. \&\fBSSL_write_ex\fR\|(3),
  246. \&\fBSSL_do_handshake\fR\|(3)
  247. .SH "HISTORY"
  248. .IX Header "HISTORY"
  249. The \fBSSL_key_update()\fR and \fBSSL_get_key_update_type()\fR functions were added in
  250. OpenSSL 1.1.1.
  251. .SH "COPYRIGHT"
  252. .IX Header "COPYRIGHT"
  253. Copyright 2017\-2023 The OpenSSL Project Authors. All Rights Reserved.
  254. .PP
  255. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  256. this file except in compliance with the License. You can obtain a copy
  257. in the file \s-1LICENSE\s0 in the source distribution or at
  258. <https://www.openssl.org/source/license.html>.