| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 * The object containing the certificates to trust when making | 8 * The object containing the certificates to trust when making |
| 9 * a secure client connection, and the certificate chain and | 9 * a secure client connection, and the certificate chain and |
| 10 * private key to serve from a secure server. | 10 * private key to serve from a secure server. |
| 11 * | 11 * |
| 12 * The [SecureSocket] and [SecureServer] classes take a SecurityContext | 12 * The [SecureSocket] and [SecureServer] classes take a SecurityContext |
| 13 * as an argument to their connect and bind methods. | 13 * as an argument to their connect and bind methods. |
| 14 * | 14 * |
| 15 * Certificates and keys can be added to a SecurityContext from either PEM | 15 * Certificates and keys can be added to a SecurityContext from either PEM |
| 16 * or PKCS12 containers. | 16 * or PKCS12 containers. |
| 17 * | 17 * |
| 18 * iOS note: methods to add, remove, and inspect certificates are not yet | 18 * iOS note: Some methods to add, remove, and inspect certificates are not yet |
| 19 * implemented. That is, only the platform's built-in trusted certificates can | 19 * implemented. However, the platform's built-in trusted certificates can |
| 20 * be used, by way of [SecurityContext.defaultContext]. | 20 * be used, by way of [SecurityContext.defaultContext]. |
| 21 */ | 21 */ |
| 22 abstract class SecurityContext { | 22 abstract class SecurityContext { |
| 23 external factory SecurityContext(); | 23 external factory SecurityContext(); |
| 24 | 24 |
| 25 /** | 25 /** |
| 26 * Secure networking classes with an optional `context` parameter | 26 * Secure networking classes with an optional `context` parameter |
| 27 * use the [defaultContext] object if the parameter is omitted. | 27 * use the [defaultContext] object if the parameter is omitted. |
| 28 * This object can also be accessed, and modified, directly. | 28 * This object can also be accessed, and modified, directly. |
| 29 * Each isolate has a different [defaultContext] object. | 29 * Each isolate has a different [defaultContext] object. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 40 * | 40 * |
| 41 * A secure connection using this SecurityContext will use this key with | 41 * A secure connection using this SecurityContext will use this key with |
| 42 * the server or client certificate to sign and decrypt messages. | 42 * the server or client certificate to sign and decrypt messages. |
| 43 * [file] is the path to a PEM or PKCS12 file containing an encrypted | 43 * [file] is the path to a PEM or PKCS12 file containing an encrypted |
| 44 * private key, encrypted with [password]. Assuming it is well-formatted, all | 44 * private key, encrypted with [password]. Assuming it is well-formatted, all |
| 45 * other contents of [file] are ignored. An unencrypted file can be used, | 45 * other contents of [file] are ignored. An unencrypted file can be used, |
| 46 * but this is not usual. | 46 * but this is not usual. |
| 47 * | 47 * |
| 48 * NB: This function calls [ReadFileAsBytesSync], and will block on file IO. | 48 * NB: This function calls [ReadFileAsBytesSync], and will block on file IO. |
| 49 * Prefer using [usePrivateKeyBytes]. | 49 * Prefer using [usePrivateKeyBytes]. |
| 50 * |
| 51 * iOS note: Not yet implemented. |
| 50 */ | 52 */ |
| 51 void usePrivateKey(String file, {String password}); | 53 void usePrivateKey(String file, {String password}); |
| 52 | 54 |
| 53 /** | 55 /** |
| 54 * Sets the private key for a server certificate or client certificate. | 56 * Sets the private key for a server certificate or client certificate. |
| 55 * | 57 * |
| 56 * Like [usePrivateKey], but takes the contents of the file as a list | 58 * Like [usePrivateKey], but takes the contents of the file as a list |
| 57 * of bytes. | 59 * of bytes. |
| 60 * |
| 61 * iOS note: Not yet implemented. |
| 58 */ | 62 */ |
| 59 void usePrivateKeyBytes(List<int> keyBytes, {String password}); | 63 void usePrivateKeyBytes(List<int> keyBytes, {String password}); |
| 60 | 64 |
| 61 /** | 65 /** |
| 62 * Sets the set of trusted X509 certificates used by [SecureSocket] | 66 * Sets the set of trusted X509 certificates used by [SecureSocket] |
| 63 * client connections, when connecting to a secure server. | 67 * client connections, when connecting to a secure server. |
| 64 * | 68 * |
| 65 * [file] is the path to a PEM or PKCS12 file containing X509 certificates, | 69 * [file] is the path to a PEM or PKCS12 file containing X509 certificates, |
| 66 * usually root certificates from certificate authorities. For PKCS12 files, | 70 * usually root certificates from certificate authorities. For PKCS12 files, |
| 67 * [password] is the password for the file. For PEM files, [password] is | 71 * [password] is the password for the file. For PEM files, [password] is |
| 68 * ignored. Assuming it is well-formatted, all other contents of [file] are | 72 * ignored. Assuming it is well-formatted, all other contents of [file] are |
| 69 * ignored. | 73 * ignored. |
| 70 * | 74 * |
| 71 * NB: This function calls [ReadFileAsBytesSync], and will block on file IO. | 75 * NB: This function calls [ReadFileAsBytesSync], and will block on file IO. |
| 72 * Prefer using [setTrustedCertificatesBytes]. | 76 * Prefer using [setTrustedCertificatesBytes]. |
| 73 */ | 77 */ |
| 74 void setTrustedCertificates(String file, {String password}); | 78 void setTrustedCertificates(String file, {String password}); |
| 75 | 79 |
| 76 /** | 80 /** |
| 77 * Sets the set of trusted X509 certificates used by [SecureSocket] | 81 * Sets the set of trusted X509 certificates used by [SecureSocket] |
| 78 * client connections, when connecting to a secure server. | 82 * client connections, when connecting to a secure server. |
| 79 * | 83 * |
| 80 * Like [setTrustedCertificates] but takes the contents of the file. | 84 * Like [setTrustedCertificates] but takes the contents of the file. |
| 85 * |
| 86 * iOS note: On iOS, this call takes only the bytes for a single DER |
| 87 * encoded X509 certificate. It may be called multiple times to add |
| 88 * multiple trusted certificates to the context. A DER encoded certificate |
| 89 * can be obtained from a PEM encoded certificate by using the openssl tool: |
| 90 * |
| 91 * $ openssl x509 -outform der -in cert.pem -out cert.der |
| 81 */ | 92 */ |
| 82 void setTrustedCertificatesBytes(List<int> certBytes, {String password}); | 93 void setTrustedCertificatesBytes(List<int> certBytes, {String password}); |
| 83 | 94 |
| 84 /** | 95 /** |
| 85 * Sets the chain of X509 certificates served by [SecureServer] | 96 * Sets the chain of X509 certificates served by [SecureServer] |
| 86 * when making secure connections, including the server certificate. | 97 * when making secure connections, including the server certificate. |
| 87 * | 98 * |
| 88 * [file] is a PEM or PKCS12 file containing X509 certificates, starting with | 99 * [file] is a PEM or PKCS12 file containing X509 certificates, starting with |
| 89 * the root authority and intermediate authorities forming the signed | 100 * the root authority and intermediate authorities forming the signed |
| 90 * chain to the server certificate, and ending with the server certificate. | 101 * chain to the server certificate, and ending with the server certificate. |
| 91 * The private key for the server certificate is set by [usePrivateKey]. For | 102 * The private key for the server certificate is set by [usePrivateKey]. For |
| 92 * PKCS12 files, [password] is the password for the file. For PEM files, | 103 * PKCS12 files, [password] is the password for the file. For PEM files, |
| 93 * [password] is ignored. Assuming it is well-formatted, all | 104 * [password] is ignored. Assuming it is well-formatted, all |
| 94 * other contents of [file] are ignored. | 105 * other contents of [file] are ignored. |
| 95 * | 106 * |
| 96 * NB: This function calls [ReadFileAsBytesSync], and will block on file IO. | 107 * NB: This function calls [ReadFileAsBytesSync], and will block on file IO. |
| 97 * Prefer using [useCertificateChainBytes]. | 108 * Prefer using [useCertificateChainBytes]. |
| 109 * |
| 110 * iOS note: Not yet implemented. |
| 98 */ | 111 */ |
| 99 void useCertificateChain(String file, {String password}); | 112 void useCertificateChain(String file, {String password}); |
| 100 | 113 |
| 101 /** | 114 /** |
| 102 * Sets the chain of X509 certificates served by [SecureServer] | 115 * Sets the chain of X509 certificates served by [SecureServer] |
| 103 * when making secure connections, including the server certificate. | 116 * when making secure connections, including the server certificate. |
| 104 * | 117 * |
| 105 * Like [useCertificateChain] but takes the contents of the file. | 118 * Like [useCertificateChain] but takes the contents of the file. |
| 119 * |
| 120 * iOS note: Not yet implemented. |
| 106 */ | 121 */ |
| 107 void useCertificateChainBytes(List<int> chainBytes, {String password}); | 122 void useCertificateChainBytes(List<int> chainBytes, {String password}); |
| 108 | 123 |
| 109 /** | 124 /** |
| 110 * Sets the list of authority names that a [SecureServer] will advertise | 125 * Sets the list of authority names that a [SecureServer] will advertise |
| 111 * as accepted when requesting a client certificate from a connecting | 126 * as accepted when requesting a client certificate from a connecting |
| 112 * client. | 127 * client. |
| 113 * | 128 * |
| 114 * [file] is a PEM or PKCS12 file containing the accepted signing | 129 * [file] is a PEM or PKCS12 file containing the accepted signing |
| 115 * authority certificates - the authority names are extracted from the | 130 * authority certificates - the authority names are extracted from the |
| 116 * certificates. For PKCS12 files, [password] is the password for the file. | 131 * certificates. For PKCS12 files, [password] is the password for the file. |
| 117 * For PEM files, [password] is ignored. Assuming it is well-formatted, all | 132 * For PEM files, [password] is ignored. Assuming it is well-formatted, all |
| 118 * other contents of [file] are ignored. | 133 * other contents of [file] are ignored. |
| 119 * | 134 * |
| 120 * NB: This function calls [ReadFileAsBytesSync], and will block on file IO. | 135 * NB: This function calls [ReadFileAsBytesSync], and will block on file IO. |
| 121 * Prefer using [setClientAuthoritiesBytes]. | 136 * Prefer using [setClientAuthoritiesBytes]. |
| 137 * |
| 138 * iOS note: Not yet implemented. |
| 122 */ | 139 */ |
| 123 void setClientAuthorities(String file, {String password}); | 140 void setClientAuthorities(String file, {String password}); |
| 124 | 141 |
| 125 /** | 142 /** |
| 126 * Sets the list of authority names that a [SecureServer] will advertise | 143 * Sets the list of authority names that a [SecureServer] will advertise |
| 127 * as accepted, when requesting a client certificate from a connecting | 144 * as accepted, when requesting a client certificate from a connecting |
| 128 * client. | 145 * client. |
| 129 * | 146 * |
| 130 * Like [setClientAuthority] but takes the contents of the file. | 147 * Like [setClientAuthority] but takes the contents of the file. |
| 148 * |
| 149 * iOS note: Not yet implemented. |
| 131 */ | 150 */ |
| 132 void setClientAuthoritiesBytes(List<int> authCertBytes, {String password}); | 151 void setClientAuthoritiesBytes(List<int> authCertBytes, {String password}); |
| 133 | 152 |
| 134 /** | 153 /** |
| 135 * Whether the platform supports ALPN. | 154 * Whether the platform supports ALPN. |
| 136 */ | 155 */ |
| 137 external static bool get alpnSupported; | 156 external static bool get alpnSupported; |
| 138 | 157 |
| 139 /** | 158 /** |
| 140 * Sets the list of application-level protocols supported by a client | 159 * Sets the list of application-level protocols supported by a client |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 } | 260 } |
| 242 | 261 |
| 243 if (bytes.length >= (1 << 13)) { | 262 if (bytes.length >= (1 << 13)) { |
| 244 throw new ArgumentError( | 263 throw new ArgumentError( |
| 245 'The maximum message length supported is 2^13-1.'); | 264 'The maximum message length supported is 2^13-1.'); |
| 246 } | 265 } |
| 247 | 266 |
| 248 return new Uint8List.fromList(bytes); | 267 return new Uint8List.fromList(bytes); |
| 249 } | 268 } |
| 250 } | 269 } |
| OLD | NEW |