Commit Graph

562 Commits

Author SHA1 Message Date
Benjamin Saunders 2e478fdcf4 Expose early I/O 2018-05-22 20:25:28 -07:00
Steven Fackler 7a7f98a32c
Revert "Move proto version accessors to SslContextRef" 2018-05-20 20:55:20 -07:00
Steven Fackler b976b5fd52 Move proto version accessors to SslContextRef
Add a Derf impl for SslContextBuilder so existing use still works.
2018-05-20 20:47:00 -07:00
Steven Fackler f0347fbce8 Improve error Display impls 2018-05-20 19:37:19 -07:00
Steven Fackler 4c1fdf1d81 Support ALPN on libressl
Closes #690
2018-05-20 12:52:49 -07:00
Steven Fackler a6fcef01c0 Overhaul openssl cfgs
Also expose hostname verification on libressl
2018-05-20 12:33:02 -07:00
Steven Fackler d991566f2b Support min/max version in LibreSSL
Their implementations of the accessors don't behave expected with no
bounds, so we ignore those bits of the tests.
2018-05-19 19:57:12 -07:00
Benjamin Saunders 69c75a178b Expose early keying material export 2018-05-17 13:16:41 -07:00
Benjamin Saunders d5d414b16f Expose max TLS1.3 early data accessors 2018-05-17 12:02:32 -07:00
Benjamin Cheng 47a68e2929
Add wrapper for SSL_CTX_set_psk_server_callback 2018-05-16 17:49:36 -04:00
Steven Fackler ff2c7ffefd Merge Ssl impl blocks 2018-05-12 16:50:50 +01:00
Steven Fackler c25b6f3e26 Clean up SSL callbacks
Also add an Arc to avoid a weird use after free edge case if a callback
changes a callback.
2018-05-12 15:02:53 +01:00
Steven Fackler 5cfbe7ac6a Disable tests that talk to Google on LibreSSL 2.5.0
They're flickering, and I'm assuming it's just because that version is
so old.
2018-05-12 13:59:22 +01:00
Steven Fackler e5d65306e7 Change SslContext callback handling
Use the existing infrastructure!
2018-05-12 13:19:01 +01:00
Steven Fackler 7a1b59d605 Fix base version for min/max proto accessors
Closes #911
2018-05-09 20:04:43 +01:00
Benjamin Saunders 47431f66bb Expose SslSession <-> DER conversion 2018-04-29 01:54:16 -07:00
Steven Fackler aa619c81c0 Some misc cleanup 2018-04-27 15:41:12 -07:00
Steven Fackler e423da2d12
Merge pull request #858 from Ralith/stateless-api
Introduce SslStreamBuilder
2018-03-31 11:28:03 -07:00
Steven Fackler 1bbe1b6a8f Clean up a couple of holdovers from old features 2018-03-29 10:20:18 +02:00
Benjamin Saunders f99c101559 Add test for stateless connection 2018-03-28 18:14:48 -07:00
Benjamin Saunders 99fdb2bd0b Introduce SslStreamBuilder 2018-03-28 18:14:48 -07:00
Benjamin Saunders bbb1cb61f6 Update to OpenSSL 1.1.1-pre3 2018-03-28 18:14:44 -07:00
Steven Fackler 7c33346960 Remove version-specific features
Closes #852
2018-03-19 00:41:33 -07:00
Benjamin Saunders 09b1fe9a0d Expose additional cipher and digest accessors 2018-03-16 20:33:23 -07:00
Steven Fackler 9f5ef88880 Add a Sync + Send bound to the custom ext type
It's stored inside of the Ssl, so this is probably tecnically
necessarly?
2018-03-11 15:36:47 -07:00
Steven Fackler d0329473bd
Merge branch 'master' into custom-extensions 2018-03-11 15:27:28 -07:00
Benjamin Saunders e02dbde2f7 Generic custom extension add fn return type 2018-03-10 22:30:54 -08:00
Steven Fackler 562fe79f4c Add one more set of impls 2018-03-10 08:53:46 -08:00
Benjamin Saunders b0bc1c770e High-level API for OpenSSL 1.1.1 custom extension support 2018-03-09 20:33:49 -08:00
Benjamin Saunders f92de22b8d Add SslOptions::ENABLE_MIDDLEBOX_COMPAT 2018-03-03 14:57:38 -08:00
Steven Fackler b7ba577339 Add min/max protocol version support 2018-02-25 23:20:10 -08:00
Steven Fackler d5dd6575c1 Restore error stack in cookie callback 2018-02-25 22:11:08 -08:00
Benjamin Saunders e04dbfa3ee Expose cookie generate/verify callback setters 2018-02-25 20:05:15 -08:00
Steven Fackler cebfbd9a25
Merge pull request #850 from sfackler/put-error
Add the ability to push errors back onto the error stack.
2018-02-24 20:58:07 -08:00
Steven Fackler 5fd23d38d5 Add the ability to push errors back onto the error stack. 2018-02-24 20:46:03 -08:00
Steven Fackler f72f35e9bd Add RFC 5705 support 2018-02-23 22:04:57 -08:00
Steven Fackler 7e0591a377 Actually add version stuff 2018-02-21 23:25:28 -08:00
Steven Fackler 15048f4c02 Inline connector constants 2018-02-21 19:41:06 -08:00
Steven Fackler 6977e9e89f Don't special case 1.0.1
It appears that 1.0.1's defaults are actually okay.
2018-02-21 18:44:04 -08:00
Steven Fackler 7192a5291f Update SslConnector cipher list
Based off of python/cpython#3532, we use OpenSSL's default cipher list
and turn of things we don't like. This can't be used with 1.0.1,
however, which had a poor default set. There, we use the old defaults,
with the bits that aren't implemented in 1.0.1 removed (namely TLSv1.3
suites and ChaCha).
2018-02-20 22:27:54 -08:00
Steven Fackler 2daaf3fdea Add some debugging-related bindings 2018-02-17 17:49:49 -08:00
Steven Fackler 90d5f85511 Add SSL_version binding 2018-02-17 13:44:21 -08:00
Steven Fackler 3f5e3f095e Fix session cloning 2018-02-17 10:12:47 -08:00
Steven Fackler e5123d266b Bind remove and get session callbacks 2018-02-16 22:24:34 -08:00
Steven Fackler 4dffa0c33f SSL session callbacks have always been around 2018-02-16 21:31:09 -08:00
Steven Fackler af4832e145 Doc tweak 2018-02-15 21:33:39 -08:00
Steven Fackler a9d8bea33c Add more session cache support 2018-02-15 21:30:20 -08:00
Steven Fackler f4ddd66b03 Tweak features
We should keep the version features totally separate for now.
2018-02-14 22:11:24 -08:00
Steven Fackler e8fd63bae3 Fix tests for TLS 1.3
Google yells at you when using TLS 1.3 without SNI by sending a bogus
self-signed cert!
2018-02-14 19:36:11 -08:00
Steven Fackler 2765775535 OpenSSL 1.1.1 support 2018-02-13 22:31:37 -08:00
Stepan Koltsov 81f7d17822 tests: if server failed to start, print exit code instead of timing out
```
% cargo +stable test --lib ssl::test::test_connect_with_alpn_successful_single_match --features=v102
    Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
     Running /Users/nga/devel/left/rust-openssl/target/debug/deps/openssl-a38e12a3527f6932

running 1 test
test ssl::test::test_connect_with_alpn_successful_single_match ... FAILED

failures:

---- ssl::test::test_connect_with_alpn_successful_single_match stdout ----
	thread 'ssl::test::test_connect_with_alpn_successful_single_match' panicked at 'server exited: exit code: 1', src/ssl/test.rs:91:24
note: Run with `RUST_BACKTRACE=1` for a backtrace.


failures:
    ssl::test::test_connect_with_alpn_successful_single_match

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 159 filtered out
```
2018-01-24 00:27:13 -08:00
Steven Fackler 692562470b Add setters to ConnectConfiguration 2018-01-11 17:24:38 -08:00
Steven Fackler be1e787ce6 Add from conversion
This is needed for tokio-openssl
2018-01-10 22:26:32 -08:00
Steven Fackler af7aa52364 Adjust the SNI callback
Brings it more in line with how the raw callback is structured.
2018-01-06 22:20:20 -08:00
Steven Fackler f50dd20cb6 Fix docs 2018-01-06 21:42:37 -08:00
Steven Fackler 3c19702299 Rename key serialization/deserialization methods
Also document their specific formats.

Closes #502
2018-01-06 13:27:44 -08:00
Steven Fackler 1553447385 Misc cleanup 2018-01-01 12:23:41 -08:00
Steven Fackler 9043cf9aa7 Move X509Filetype to SslFiletype
These constants have the same values, but X509_FILETYPE_DEFAULT doesn't
work in the Ssl methods and using the SSL_* names is a bit less
confusing.
2018-01-01 11:50:07 -08:00
Steven Fackler d207897458 Parameterize keys over what they contain
Closes #790
2017-12-30 21:53:39 -08:00
Steven Fackler 1085e79447 Remove `SslRef::compression`
TLS compression is extremely deprecated, so no-one should be messing
with this in the first place.
2017-12-28 20:22:05 -08:00
Steven Fackler 23bab6336e Add a parameter to servername 2017-12-28 10:18:23 -08:00
Steven Fackler 7fbda61609 Overhaul ALPN
There was previously a lot of behind the scenes magic. We now bind much
more directly to the relevant functions.

Also remove APN support. That protocol is supersceded by ALPN - let's
see if anyone actually needs to use it.
2017-12-27 16:24:01 -07:00
Steven Fackler 52a06adc08 Overhaul ssl error 2017-12-26 21:03:49 -07:00
Steven Fackler f9866cd44f Split X509StoreContextRef::ssl up 2017-12-26 14:53:35 -07:00
Steven Fackler 129b6b9d84 Overhaul verify error type
Also set the error in the hostname verification callback for 1.0.1
2017-12-26 14:43:10 -07:00
Steven Fackler 19dc6ce1eb Adjust SslConnector and SslAcceptor construction 2017-12-26 10:39:21 -07:00
Steven Fackler ce0641f093 Drop Any bounds 2017-12-26 08:55:12 -07:00
Steven Fackler 2adf2cf12b Remove deprecated APIs 2017-12-25 22:09:27 -07:00
Steven Fackler 3744e31e16 Fix a bunch of FIXMEs 2017-12-25 21:44:41 -07:00
Steven Fackler 7cc6c9b2f2 Tweak default ssl options 2017-12-25 21:18:49 -07:00
Steven Fackler 7d0c6c9442 Fix tests 2017-12-25 20:32:06 -07:00
Steven Fackler 77448362ce Rename X509FileType to X509Filetype 2017-12-25 19:57:02 -07:00
Steven Fackler 3eab162dc2 Move to associated consts 2017-12-25 19:56:27 -07:00
Steven Fackler bbae793eb3 Upgrade bitflags to 1.0
Closes #756
2017-12-25 19:38:11 -07:00
Steven Fackler 34d700309c Clean up 1.0.1 hostname verification 2017-12-23 19:32:33 -07:00
Steven Fackler 196a855d2a Allow SNI and hostname verification to be configured separately
Closes #728
2017-12-23 12:47:38 -08:00
Steven Fackler 4b732dad19 Fix link 2017-12-09 15:50:23 -08:00
Steven Fackler 3207e57a09 Finish documentation for the ssl module
Closes #727
2017-12-04 22:15:56 -08:00
Steven Fackler bf70d3dd71 Docs for the ssl module.
cc #727
2017-12-03 23:10:56 -08:00
Steven Fackler 4a10c31219 Impl deref for acceptor/connector builders 2017-12-03 19:24:11 -08:00
Steven Fackler e9ad9f1afd Upgrade foreign-types
foreign-types 0.3 and 0.2 now share the same types and traits, so this
is backwards compatible.
2017-11-26 17:07:24 -07:00
Steven Fackler de987f20c8
Revert "Update foreign-types to 0.3" 2017-11-21 08:51:37 -08:00
Anthony Ramine 93be1c4f2f Update foreign-types to 0.3 2017-11-21 09:17:39 +01:00
Steven Fackler 55bf390dbe Adjust libressl version detection
The 2.5.3+ and 2.6.3+ series are ABI-stable, so we don't need to
whitelist individual releases in those ranges.
2017-11-13 21:51:55 -08:00
phoebe jenkins 6257835757 Add support for LibreSSL 2.6.3 2017-11-13 09:51:17 -05:00
Steven Fackler 8830bd5daf Add a couple of FIXMEs 2017-11-05 10:47:05 -08:00
Steven Fackler a1a3219483 Handle local retries
OpenSSL can return SSL_ERROR_WANT_READ even on blocking sockets after
renegotiation or heartbeats. Heartbeats ignore the flag that normally
makes these things handled internally anyway on 1.0.2. To handle this
more properly, we now have a special error type we use to signal this
event. The `Read` and `Write` implementation automatically retry in this
situation since that's what you normally want. People can use `ssl_read`
and `ssl_write` if they want the lower level control.

Closes #760
2017-11-04 13:32:18 -07:00
Brian Vincent d5299a8d2b Fixed a typo in an error message, WANT_WRITE -> WANT_READ 2017-10-17 20:06:35 -05:00
Steven Fackler ff8f54812c Merge pull request #752 from chrisvittal/libressl262
Add support for LibreSSL 2.6.2
2017-10-03 22:11:29 -07:00
Christopher Vittal 1308cb2b52 Fix cfgs for libressl262 2017-10-04 00:53:09 -04:00
Christopher Vittal e0efd1d438 Add support for LibreSSL 2.6.2 2017-10-03 23:59:33 -04:00
johnthagen b5bb8de4f2 Convert try! usage to ? 2017-10-03 17:44:02 -04:00
Steven Fackler dc92a514ef Properly handle IPs in hostname verification 2017-09-20 10:04:09 -04:00
Steven Fackler f0db1dbc95 Merge pull request #695 from Keruspe/master
openssl-sys: support libressl 2.6.1
2017-09-17 13:57:18 -07:00
Marc-Antoine Perennou b73548da18 openssl: ecdh_tmp_callback doesn't work with libressl 2.6.1
Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2017-09-17 19:55:47 +02:00
Marc-Antoine Perennou 5091830379 openssl: libressl 2.6.1 dropped suuport for npn
Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2017-09-17 19:46:05 +02:00
Steven Fackler 7d41009a9c Update default client cipher list 2017-09-16 13:10:55 -04:00
Steven Fackler 9bd64edc08 Fix indentation 2017-09-15 22:31:03 -04:00
Alex Crichton 68a30c29c9 Set SSL_MODE_RELEASE_BUFFERS by default
Closes #696
2017-09-14 19:15:00 -07:00
Steven Fackler be1b573f6b Delete DTLS tests 2017-08-08 22:01:58 -07:00
Steven Fackler c2164a4864 Add peer_cert_chain 2017-07-29 10:34:10 -07:00
Steven Fackler a132834132 Ignore dtls tests
They're way too flaky.

Closes #525
2017-07-29 09:54:04 -07:00
Steven Fackler 8fa9b58743 Tweak formatting on cipher list 2017-07-26 20:49:24 -07:00
Steven Fackler 374ad206d5 Use foreign-type's Opaque 2017-07-15 21:53:49 -07:00
Steven Fackler bcd0dcafcb Rustfmt 2017-07-15 21:46:11 -07:00
Steven Fackler 5c2410c38a Init before creating ex indexes 2017-07-15 18:58:24 -07:00
Steven Fackler dbbf446a9e Fix build 2017-07-15 17:25:02 -07:00
Steven Fackler c68db708ee Don't overwrite the configured verify mode
We can leverage the new extra data API to configure the verification
mode up front so users can reconfigure it as they like.
2017-07-15 16:50:36 -07:00
Steven Fackler fd52bbe85c Add an API to install extra data 2017-07-15 16:50:36 -07:00
Steven Fackler e3c7a2785c Move callbacks to a submodule 2017-07-15 16:50:36 -07:00
Steven Fackler 279bffccf5 Merge pull request #641 from luser/psk
Expose PSK via a SslContextBuilder::set_psk_callback method
2017-07-04 18:19:17 -10:00
Steven Fackler 240eb9731f Properly reexport ConnectConfiguration 2017-06-14 19:54:09 -07:00
Steven Fackler 98d343dd32 Fix for changes in OpenSSL 1.1.0f 2017-06-06 18:45:54 -04:00
Ted Mielczarek 4de58596d9 Make some changes for review comments 2017-06-02 08:20:03 -04:00
Steven Fackler 3028958bf6 Little docs fix 2017-05-29 21:11:49 -07:00
Steven Fackler c89af1d5f8 Add a fixme 2017-05-29 18:04:32 -07:00
Ted Mielczarek 16183f41f6 Expose PSK via a SslContextBuilder::set_psk_callback method 2017-05-26 14:51:04 -04:00
golem131 27728f6fd9 Update bitflags 0.8 -> 0.9 2017-05-22 12:44:22 +03:00
Steven Fackler 0efef98848 Add a note to rename variant 2017-05-06 16:35:55 -07:00
jethrogb dd3896fdc5 Clarify use of ssl::HandshakeError::Interrupted 2017-05-03 12:03:18 -07:00
Steven Fackler c8d1698f27 Logic to support client-side session reuse 2017-03-25 19:30:01 -07:00
Steven Fackler 618cc70d19 Add a fixme to drop const prefixes 2017-02-19 14:24:05 -08:00
Steven Fackler 710a30bb40 Tweaks 2017-02-18 21:58:38 -08:00
Benjamin Fry 88740c1374 add Ok to result 2017-02-16 19:59:02 -08:00
Benjamin Fry 323a646383 only forget in non-error condition 2017-02-16 19:50:58 -08:00
Benjamin Fry eef5b5d2ac review fixes: reorder forget() 2017-02-16 19:49:14 -08:00
Benjamin Fry d080c10910 fix cfg options for v102 and v110 2017-02-16 19:49:14 -08:00
Benjamin Fry f8298882a4 add set_verify_cert_store() to ssl ctx 2017-02-16 19:49:14 -08:00
Steven Fackler f2c69ae7e9 Merge remote-tracking branch 'origin/master' into x509-builder 2017-02-11 10:13:00 -08:00
Steven Fackler 12ae31ad47 Switch to foreign_types 2017-02-03 23:03:35 -08:00
Steven Fackler 722bdb6a4c Merge pull request #550 from Keruspe/master
LibreSSL support improvements
2017-01-22 18:39:34 +00:00
Steven Fackler 1ffdf8a1ab Fix test warnings 2017-01-21 14:43:43 +00:00
Steven Fackler 920ab0d6fb OCSP functionality 2017-01-14 21:09:38 -08:00
Steven Fackler 1fbe8f8d71 Fix typo 2017-01-08 11:04:47 -08:00
Steven Fackler 1942977408 Add methods to construct SslAcceptorBuilder without key and cert
This will allow, in particular, initialization directly from files
rather than having to load and parse them manually.
2017-01-08 10:57:04 -08:00
Marc-Antoine Perennou 0978f87095 libressl: make set_ecdh_auto available
Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2017-01-05 20:47:01 +01:00
Steven Fackler 404e0341d8 Provide master key access 2017-01-04 22:01:30 -08:00
Steven Fackler a2c118bf82 Add basic session tests 2017-01-04 21:18:13 -08:00
Steven Fackler 0b1bfee46d session is nullable 2017-01-04 21:15:09 -08:00
Steven Fackler 5d53405597 Provide access to the session ID 2017-01-04 21:11:06 -08:00
Steven Fackler 88a7032f4b Types and accessor for SslSession 2017-01-04 20:59:46 -08:00
Steven Fackler cfb2539ed4 Typo 2017-01-02 09:37:31 -08:00
Steven Fackler 0e0bee50a5 Clean up bio 2017-01-01 10:18:43 -08:00
Steven Fackler 7e035a7fd1 Merge pull request #538 from semarie/libressl
Add LibreSSL support
2016-12-22 11:59:19 -05:00
Sébastien Marie b3526cbd2b Add LibreSSL 2.5.0 support 2016-12-21 09:27:12 +01:00
Alex Crichton 8e01f8d250 Handle zero-length reads/writes
This commit adds some short-circuits for zero-length reads/writes to
`SslStream`. Because OpenSSL returns 0 on error, then we could mistakenly
confuse a 0-length success as an actual error, so we avoid writing or reading 0
bytes by returning quickly with a success.
2016-12-20 15:52:18 -08:00
Steven Fackler 146512099b Implement Clone for SslConnector and SslAcceptor 2016-11-27 21:35:35 -08:00
Steven Fackler 234f126d7d Cleanup 2016-11-27 21:00:59 -08:00
Steven Fackler 6794a45d60 Rename ec_key to ec 2016-11-14 22:37:01 +01:00
Steven Fackler 0d0b5080e2 Rename new_by_curve_name to from_curve_name 2016-11-13 20:21:44 +00:00