Re: TLS 1.2 for Dynamic C 10 -- released

"Tom Collins tom-lnEA/wrDJtNWk0Htik3J/[email protected] [rabbit-semi]" <[email protected]> Wed, 17 Feb 2016 15:44:16 -0800
Newsgroups gmane.comp.hardware.rabbit-semiconductor
Message-ID <[email protected]>
Just a quick followup on on my previous email to announce that I've completed work on TLS 1.2 for Dynamic C 10, and it's been released to the "master" branch on GitHub.

https://github.com/digidotcom/DCRabbit_10/

In addition, we are planning to release a "Dynamic C 10.72A" installer with the TLS 1.2 code along with other bug fixes and improvements.  The installer should be completed and ready on Digi's website by the end of March.

-Tom


On Jan 26, 2016, at 10:21 AM, Tom Collins tom-lnEA/wrDJtNWk0Htik3J/[email protected] [rabbit-semi] wrote:
> I've been working to update Dynamic C 10's TLS (the protocol formerly known as SSL) implementation from 1.0 to 1.2, and feel that it's ready for testing if anyone is interested.  Modern web browsers will refuse to connect to Rabbit products with the TLS 1.0 implementation, hence the push to support 1.2.  Along the way, I removed support for protocols and ciphers now considered insecure.
> 
> I've pasted the draft release notes to the end of this email, and you can find the beta code on GitHub: https://github.com/digidotcom/DCRabbit_10/tree/feature-tls1.2
> 
> If you haven't already worked with the GitHub repository, be sure to follow the instructions in the README on how to link a Dynamic C installation to the repository so you can pull updates.  If you are an inexperienced Git user, please make sure your Dynamic C directory is backed up, especially if you've made modifications to any of the files.  I always recommend keeping your project files outside of the Dynamic C directory.
> 
> I have done some testing of HTTP server code (i.e., HTTPS), along with HTTP, SMTP and POP client code.  I've run some OpenSSL scripts against the HTTP server to confirm correct operation (and an ability to handle large cipher lists in the Client Hello).
> 
> All testing has been with RSA certificates and not pre-shared keys (PSK mode).
> 
> If you are using PSK or some other uncommon TLS configuration, but don't have time to test the new release yourself, please email me with some details of how you've used TLS and I'll try to test that functionality myself.
> 
> Note that the update only supports the TLS 1.2 protocol, and cannot negotiate a TLS 1.1 or TLS 1.0 connection.  This should make it more secure, but could cause problems with legacy web browsers that don't support TLS 1.2.
> 
> If you know of any TLS bugs (or even non-TLS bugs) present in 10.72, please let me know so I can ensure that they're addressed in an upcoming release.  Please open issues on GitHub for tracking purposes, but feel free to email bug reports if that's your preference.
> 
> -Tom
> 
> ReleaseNotes_TLS1.2.txt:
> 
> Dynamic C 10.72A includes an update from TLS 1.0 to 1.2.  This document
> summarizes the impact this may have on your programs, and calls out
> changes to "Dynamic C TCP/IP User’s Manual, Volume 3: Security".
> 
>    http://ftp1.digi.com/support/documentation/90001160_a.pdf
> 
> This document assumes your program was already working with Dynamic C
> 10.72 before attempting an upgrade to 10.72A.  SSL/TLS support has
> changed with various Dynamic C releases, please test with 10.72 before
> upgrading in order to isolate potential failures.
> 
> With TLS 1.2, Dynamic C 10.72A:
>   - Is compatible with modern web browsers.
>   - Removes support for insecure SSLv2, SSLv3 and TLS 1.0 protocols.
>   - Removes support for insecure RC4 cipher and MD5 digest.
>   - Automatically enables required AES128_CBC cipher.
>   - Adds optional AES256_CBC cipher, SHA256 digests, and support for
>     SHA256 signatures in X.509 (TLS/SSL) certificates.
> 
> Readers interested in the technical details of the switch from TLS 1.0
> to TLS 1.2 might want to read section 1.1 of RFC4346 and section 1.2
> of RFC5246, which document the differences between TLS 1.0/1.1 and
> TLS 1.1/1.2 respectively.
> 
>    https://tools.ietf.org/html/rfc4346#section-1.1
>    https://tools.ietf.org/html/rfc5246#section-1.2
> 
> 
> Macros used to configure TLS 1.2 (in addition to existing
> documentation):
> 
> TLS_VERBOSE: Define to see debugging information dumped to STDOUT that
>    may help in troubleshooting or reporting connectivity issues.  Be
>    sure to disable this in production firmware.
> 
> SSL_USE_AES256: Define to enable 256-bit versions of the AES128_CBC
>    ciphersuites (in addition to AES128_CBC which is always required).
> 
> SSL_USE_PSK: Define to use pre-shared keys for authentication.
> 
> SSL_DONT_USE_RSA: Define to disable support for RSA certificates (you
>    must then define SSL_USE_PSK to use pre-shared keys instead).
> 
> MP_SIZE: The default value of 130 only allows for 1024-bit RSA keys.
>    Most certificates are using 2048-bit keys (#define MP_SIZE 258) and
>    4096-bit keys will only become more common (#define MP_SIZE 514).
> 
> SSL_DISABLE_LEGACY_DCC: If you aren't using the ".dcc" filetype, you
>    can define this macro to reduce code size.
> 
> SSL_DISABLE_USERBLOCK: If you aren't storing certificates in the
>    UserBlock, you can define this macro to reduce code size.
> 
> The following macros are no longer used or have been deprecated:
> 
> SSL_USE_AES: Defining this macro previously enabled the optional
>    AES128_CBC cipher.  Since it's required by TLS 1.2, and support
>    for the insecure RC4 cipher was removed, AES128_CBC is enabled
>    by default and cannot be disbled.
> 
> SSL_DONT_USE_RC4: Support for RC4 was removed.
> 
> SSL_S_FORBID_MD5 and SSL_S_FORBID_RC4: TLS 1.2 doesn't use the MD5
>    digest or RC4 cipher, so it now ignores these flags.