| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * A high-level class for communicating securely over a TCP socket, using | 8 * A high-level class for communicating securely over a TCP socket, using |
| 9 * TLS and SSL. The [SecureSocket] exposes both a [Stream] and an | 9 * TLS and SSL. The [SecureSocket] exposes both a [Stream] and an |
| 10 * [IOSink] interface, making it ideal for using together with | 10 * [IOSink] interface, making it ideal for using together with |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 * The certificate provided by the server is checked | 21 * The certificate provided by the server is checked |
| 22 * using the trusted certificates set in the SecurityContext object. | 22 * using the trusted certificates set in the SecurityContext object. |
| 23 * The default SecurityContext object contains a built-in set of trusted | 23 * The default SecurityContext object contains a built-in set of trusted |
| 24 * root certificates for well-known certificate authorities. | 24 * root certificates for well-known certificate authorities. |
| 25 * | 25 * |
| 26 * [onBadCertificate] is an optional handler for unverifiable certificates. | 26 * [onBadCertificate] is an optional handler for unverifiable certificates. |
| 27 * The handler receives the [X509Certificate], and can inspect it and | 27 * The handler receives the [X509Certificate], and can inspect it and |
| 28 * decide (or let the user decide) whether to accept | 28 * decide (or let the user decide) whether to accept |
| 29 * the connection or not. The handler should return true | 29 * the connection or not. The handler should return true |
| 30 * to continue the [SecureSocket] connection. | 30 * to continue the [SecureSocket] connection. |
| 31 * |
| 32 * [supportedProtocols] is an optional list of protocols (in decreasing |
| 33 * order of preference) to use during the ALPN protocol negogiation with the |
| 34 * server. Example values are "http/1.1" or "h2". The selected protocol |
| 35 * can be obtained via [SecureSocket.selectedProtocol]. |
| 31 */ | 36 */ |
| 32 static Future<SecureSocket> connect(host, int port, | 37 static Future<SecureSocket> connect(host, int port, |
| 33 {SecurityContext context, | 38 {SecurityContext context, |
| 34 bool onBadCertificate(X509Certificate certificate), | 39 bool onBadCertificate(X509Certificate certificate), |
| 35 List<String> supportedProtocols}) { | 40 List<String> supportedProtocols}) { |
| 36 return RawSecureSocket | 41 return RawSecureSocket |
| 37 .connect(host, port, | 42 .connect(host, port, |
| 38 context: context, | 43 context: context, |
| 39 onBadCertificate: onBadCertificate, | 44 onBadCertificate: onBadCertificate, |
| 40 supportedProtocols: supportedProtocols) | 45 supportedProtocols: supportedProtocols) |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 /** | 127 /** |
| 123 * Get the peer certificate for a connected SecureSocket. If this | 128 * Get the peer certificate for a connected SecureSocket. If this |
| 124 * SecureSocket is the server end of a secure socket connection, | 129 * SecureSocket is the server end of a secure socket connection, |
| 125 * [peerCertificate] will return the client certificate, or null, if no | 130 * [peerCertificate] will return the client certificate, or null, if no |
| 126 * client certificate was received. If it is the client end, | 131 * client certificate was received. If it is the client end, |
| 127 * [peerCertificate] will return the server's certificate. | 132 * [peerCertificate] will return the server's certificate. |
| 128 */ | 133 */ |
| 129 X509Certificate get peerCertificate; | 134 X509Certificate get peerCertificate; |
| 130 | 135 |
| 131 /** | 136 /** |
| 132 * Get the protocol which was selected during protocol negotiation. | 137 * The protocol which was selected during ALPN protocol negotiation. |
| 138 * |
| 139 * Returns null if one of the peers does not have support for ALPN, did not |
| 140 * specify a list of supported ALPN protocols or there was no common |
| 141 * protocol between client and server. |
| 133 */ | 142 */ |
| 134 String get selectedProtocol; | 143 String get selectedProtocol; |
| 135 | 144 |
| 136 /** | 145 /** |
| 137 * Renegotiate an existing secure connection, renewing the session keys | 146 * Renegotiate an existing secure connection, renewing the session keys |
| 138 * and possibly changing the connection properties. | 147 * and possibly changing the connection properties. |
| 139 * | 148 * |
| 140 * This repeats the SSL or TLS handshake, with options that allow clearing | 149 * This repeats the SSL or TLS handshake, with options that allow clearing |
| 141 * the session cache and requesting a client certificate. | 150 * the session cache and requesting a client certificate. |
| 142 */ | 151 */ |
| (...skipping 24 matching lines...) Expand all Loading... |
| 167 * certificates set in the SecurityContext object If a certificate and key are | 176 * certificates set in the SecurityContext object If a certificate and key are |
| 168 * set on the client, using [SecurityContext.useCertificateChain] and | 177 * set on the client, using [SecurityContext.useCertificateChain] and |
| 169 * [SecurityContext.usePrivateKey], and the server asks for a client | 178 * [SecurityContext.usePrivateKey], and the server asks for a client |
| 170 * certificate, then that client certificate is sent to the server. | 179 * certificate, then that client certificate is sent to the server. |
| 171 * | 180 * |
| 172 * [onBadCertificate] is an optional handler for unverifiable certificates. | 181 * [onBadCertificate] is an optional handler for unverifiable certificates. |
| 173 * The handler receives the [X509Certificate], and can inspect it and | 182 * The handler receives the [X509Certificate], and can inspect it and |
| 174 * decide (or let the user decide) whether to accept | 183 * decide (or let the user decide) whether to accept |
| 175 * the connection or not. The handler should return true | 184 * the connection or not. The handler should return true |
| 176 * to continue the [RawSecureSocket] connection. | 185 * to continue the [RawSecureSocket] connection. |
| 186 * |
| 187 * [supportedProtocols] is an optional list of protocols (in decreasing |
| 188 * order of preference) to use during the ALPN protocol negogiation with the |
| 189 * server. Example values are "http/1.1" or "h2". The selected protocol |
| 190 * can be obtained via [RawSecureSocket.selectedProtocol]. |
| 177 */ | 191 */ |
| 178 static Future<RawSecureSocket> connect(host, int port, | 192 static Future<RawSecureSocket> connect(host, int port, |
| 179 {SecurityContext context, | 193 {SecurityContext context, |
| 180 bool onBadCertificate(X509Certificate certificate), | 194 bool onBadCertificate(X509Certificate certificate), |
| 181 List<String> supportedProtocols}) { | 195 List<String> supportedProtocols}) { |
| 182 _RawSecureSocket._verifyFields( | 196 _RawSecureSocket._verifyFields( |
| 183 host, port, false, false, false, onBadCertificate); | 197 host, port, false, false, false, onBadCertificate); |
| 184 return RawSocket.connect(host, port).then((socket) { | 198 return RawSocket.connect(host, port).then((socket) { |
| 185 return secure(socket, | 199 return secure(socket, |
| 186 context: context, | 200 context: context, |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 /** | 307 /** |
| 294 * Get the peer certificate for a connected RawSecureSocket. If this | 308 * Get the peer certificate for a connected RawSecureSocket. If this |
| 295 * RawSecureSocket is the server end of a secure socket connection, | 309 * RawSecureSocket is the server end of a secure socket connection, |
| 296 * [peerCertificate] will return the client certificate, or null, if no | 310 * [peerCertificate] will return the client certificate, or null, if no |
| 297 * client certificate was received. If it is the client end, | 311 * client certificate was received. If it is the client end, |
| 298 * [peerCertificate] will return the server's certificate. | 312 * [peerCertificate] will return the server's certificate. |
| 299 */ | 313 */ |
| 300 X509Certificate get peerCertificate; | 314 X509Certificate get peerCertificate; |
| 301 | 315 |
| 302 /** | 316 /** |
| 303 * Get the protocol which was selected during protocol negotiation. | 317 * The protocol which was selected during protocol negotiation. |
| 318 * |
| 319 * Returns null if one of the peers does not have support for ALPN, did not |
| 320 * specify a list of supported ALPN protocols or there was no common |
| 321 * protocol between client and server. |
| 304 */ | 322 */ |
| 305 String get selectedProtocol; | 323 String get selectedProtocol; |
| 306 } | 324 } |
| 307 | 325 |
| 308 /** | 326 /** |
| 309 * X509Certificate represents an SSL certificate, with accessors to | 327 * X509Certificate represents an SSL certificate, with accessors to |
| 310 * get the fields of the certificate. | 328 * get the fields of the certificate. |
| 311 */ | 329 */ |
| 312 abstract class X509Certificate { | 330 abstract class X509Certificate { |
| 313 external factory X509Certificate._(); | 331 external factory X509Certificate._(); |
| (...skipping 895 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1209 | 1227 |
| 1210 /** | 1228 /** |
| 1211 * An exception that happens in the handshake phase of establishing | 1229 * An exception that happens in the handshake phase of establishing |
| 1212 * a secure network connection, when looking up or verifying a | 1230 * a secure network connection, when looking up or verifying a |
| 1213 * certificate. | 1231 * certificate. |
| 1214 */ | 1232 */ |
| 1215 class CertificateException extends TlsException { | 1233 class CertificateException extends TlsException { |
| 1216 const CertificateException([String message = "", OSError osError = null]) | 1234 const CertificateException([String message = "", OSError osError = null]) |
| 1217 : super._("CertificateException", message, osError); | 1235 : super._("CertificateException", message, osError); |
| 1218 } | 1236 } |
| OLD | NEW |