[PUP-2582] Enable TLSv1.2 in apache vhost config Created: 2014/05/15 Updated: 2014/07/28 Resolved: 2014/05/20 Status: Project: Component/s: Affects Version/s: Fix Version/s: Closed Puppet None None Type: Reporter: Resolution: Labels: Remaining Estimate: Time Spent: Original Estimate: Bug Josh Cooper Fixed None Not Specified Issue Links: Relates relates to PUP-2177 PR (2494) Insecure shipped Cipher set... Template: Story Points: Sprint: PUP 3.6.1 Priority: Assignee: Votes: Normal Unassigned 0 Not Specified Not Specified Closed customfield_10700 true 1 Week 2014-5-14 to 2014-5-21 Description Our apache vhost configuration is used when building passenger packages on debian. It was added in d85d73c and hasn't been updated since. Thanks goes to Aaron Zauner for bringing this to our attention in . However, we've run into a problem creating a single ciphersuite string that works correctly in openssl versions 0.9.7m <= version < 1.0.0a, and versions >= 1.0.0a. See discussion at https://github.com/puppetlabs/puppet/pull/2494 and http://marc.info/?l=openssldev&m=139993778731161&w=2 We would like to merge a subset of the changes proposed in for immediate release in 3.6.1. Specifically, adding support for TLSv1.2, removing AECDH, and other insecure algorithms, e.g DES, MD5. Once the compatibility issues described in PR 2494 are resolved, we'll bring in those changes, which optimize for even greater security, such as PFS. Comments Comment by Josh Cooper [ 2014/05/15 ] Merged to stable for 3.6.1 in 214c526 Comment by Josh Cooper [ 2014/05/15 ] For release notes Previously the apache vhost defined an SSLCipherSuite which included several weak ciphers. This commit disables the following algorithms: aNULL, eNULL, DES, 3DES, IDEA, SEED, DSS, PSK, RC4, MD5 Second, previously LOW, SSLv2, and EXP were removed, but not killed from the list, which meant that they could be added again in subsequent declarations. Third, ALL:!ADH meant that AECDH was enabled. This commit uses !aNULL to disable all anonymous authentication algorithms. It also explicitly specifies !eNULL (anonymous encryption algorithms). Fourth, we were only enabling SSLv3 and TLSv1, but not TLSv1.1 or TLSv1.2. TLSv1.2 protects against attacks known to work against SSLv3 and TLSv1.0. Finally, SSLHonorCipherOrder is set to on, because certain clients do not send ciphers in the correct preferred order, and this setting will help mitigate that problem. Thanks to Aaron Zauner <azet@azet.org> for bringing this to our attention. Comment by Josh Cooper [ 2014/05/15 ] For functional review: Install a puppetmaster-passenger package on a system supporting openssl 1.0.x, e.g. ubuntu saucy, and apache 2.2.26 (or later). The later is required for mod_ssl to support ECC based ciphersuites. Verify /etc/apache2/sites-enabled/puppetmaster.conf matches the change made here. Verify an older agent (ruby 1.8.7 & openssl 0.9.8, like debian squeeze) can connect to the master. Verify that SSLv2 connections rejected, but SSLv3, TLSv1.0, TLSv1.1, and TLSv1.2 are accepted # alias sclient='openssl s_client -connect localhost:8140 -CAfile /var/lib/puppet/ssl/certs/ca.pem -cert /var/lib/puppet/ssl/certs/ubuntu1310.corp.puppetlabs.net.pem -key /var/lib/puppet/ssl/private_keys/ubuntu1310.corp.puppetlabs.net.pem' # sclient -tls1_2 .. SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 .. Verify openssl supports AECDH: # openssl ciphers AECDH AECDH-AES256-SHA Mac=SHA1 AECDH-DES-CBC3-SHA Mac=SHA1 AECDH-AES128-SHA Mac=SHA1 AECDH-RC4-SHA Mac=SHA1 AECDH-NULL-SHA Mac=SHA1 -v SSLv3 Kx=ECDH Au=None Enc=AES(256) SSLv3 Kx=ECDH Au=None Enc=3DES(168) SSLv3 Kx=ECDH Au=None Enc=AES(128) SSLv3 Kx=ECDH Au=None Enc=RC4(128) SSLv3 Kx=ECDH Au=None Enc=None Verify clients trying to connect using AECDH-AES128-SHA are rejected: # sclient -cipher AECDH-AES128-SHA CONNECTED(00000004) 140538286978752:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:741 Repeat with DES, 3DES, RC4, e.g. # sclient -cipher RC4-SHA CONNECTED(00000004) 140225087456960:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:741: Verify client ciphersuite order is ignored: # sclient -cipher AES128-SHA:AES256-SHA ... SSL-Session: Protocol : TLSv1.1 Cipher : AES256-SHA Comment by Kurt Wall [ 2014/05/20 ] As far as I can tell, this verifies in master at SHA=d8afc3395ef45dd83425064f8f38913f50b50c4: # sclient -tls1_2 | grep -A4 -- SSL-Session depth=1 CN = Puppet CA: ubuntu.localdomain verify return:1 depth=0 CN = ubuntu13-10-base.localdomain verify return:1 SSL-Session: Protocol : TLSv1.2 Cipher : DHE-RSA-AES256-GCM-SHA384 Session-ID: A9757882EFF5D14D666B10A013AFC60C6A7D3AA3D5EB96F2C1D756EB8FB48C44 Session-ID-ctx: AECDH support is present: # openssl ciphers AECDH AECDH-AES256-SHA Mac=SHA1 AECDH-DES-CBC3-SHA Mac=SHA1 AECDH-AES128-SHA Mac=SHA1 AECDH-RC4-SHA Mac=SHA1 AECDH-NULL-SHA Mac=SHA1 -v SSLv3 Kx=ECDH Au=None Enc=AES(256) SSLv3 Kx=ECDH Au=None Enc=3DES(168) SSLv3 Kx=ECDH Au=None Enc=AES(128) SSLv3 Kx=ECDH Au=None Enc=RC4(128) SSLv3 Kx=ECDH Au=None Enc=None v2 connections appear to be rejected: # sclient -cipher AECDH-AES256-SHA CONNECTED(00000003) 140042815358656:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:741: --no peer certificate available --No client certificate CA names sent --SSL handshake has read 7 bytes and written 127 bytes --New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE --# sclient -cipher AECDH-DES-CB3-SHA error setting cipher list 140390033082048:error:1410D0B9:SSL routines:SSL_CTX_set_cipher_list:no cipher match:ssl_lib.c:1314: root@ubuntu13-10-base:/etc/apt/sources.list.d# sclient -cipher AECDH-AES128-SHA CONNECTED(00000003) 140715999475392:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:741: --no peer certificate available --No client certificate CA names sent --SSL handshake has read 7 bytes and written 127 bytes --New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE ... and so forth for the other ciphers we want to disable. Client ciphersuite is ignored: CONNECTED(00000003) depth=1 CN = Puppet CA: ubuntu.localdomain verify return:1 depth=0 CN = ubuntu13-10-base.localdomain verify return:1 --Certificate chain 0 s:/CN=ubuntu13-10-base.localdomain i:/CN=Puppet CA: ubuntu.localdomain 1 s:/CN=Puppet CA: ubuntu.localdomain i:/CN=Puppet CA: ubuntu.localdomain ... Start Time: 1400611441 Timeout : 300 (sec) Verify return code: 0 (ok) --closed Comment by Kurt Wall [ 2014/05/20 ] Resolved per previous comment. Generated at Tue Feb 09 13:02:56 PST 2016 using JIRA 6.4.12#64027sha1:e3691cc1283c0f3cef6d65d3ea82d47743692b57.