Jump to: navigation, search

Difference between revisions of "Neutron/LBaaS/SSL"

< Neutron‎ | LBaaS
(SSL Trusted keys Managing)
(CLI changes)
Line 191: Line 191:
 
=== CLI changes ===
 
=== CLI changes ===
  
*neutron '''ssl-policy-create''' --protocols SSLv3, TLSv1, TLSv1.1 --cipher-suites DES-CBC-SHA, EXP-DES-CBC-SHA '''<policy name>'''
+
*neutron '''ssl-policy-create''' --enable-front-end-termination true --front-end-protocols SSLv3, TLSv1, TLSv1.1 --front-end-cipher-suites DES-CBC-SHA, EXP-DES-CBC-SHA --enable-back-end-termination true --back-end-protocols SSLv3, TLSv1, TLSv1.1 --back-end-cipher-suites DES-CBC-SHA, EXP-DES-CBC-SHA --pass-info cipher, bits '''<policy name>'''
*neutron '''ssl-policy-update''' --policy_id --protocols TLSv1, TLSv1.1
+
*neutron '''ssl-policy-update''' --policy_id --front-end-protocols TLSv1, TLSv1.1
 
*neutron '''ssl-policy-delete''' --policy_id
 
*neutron '''ssl-policy-delete''' --policy_id
  
Line 203: Line 203:
 
*neutron '''ssl-trusted-key-delete''' --key-id
 
*neutron '''ssl-trusted-key-delete''' --key-id
  
*neutron '''vip-ssl-policy-associate''' --vip-id VIP-ID --ssl-policy-id SSL-POLICY-ID
+
*neutron '''vip-ssl-associate''' --vip-id VIP-ID --ssl-policy-id my_policy --ssl-certificate-id google_cert_id, facebook_cert_id --ssl-trusted-key-id trust_1, trust_2, trust_3
*neutron '''vip-ssl-certificate-associate''' --vip-id VIP-ID --ssl-certificate-id SSL-POLICY-ID
+
*neutron '''vip-ssl-disassociate''' --vip-id VIP-ID
*neutron '''vip-ssl-trusted-key-associate''' --vip-id VIP-ID --ssl-trusted-key-id SSL-POLICY-ID
 
*neutron '''vip-ssl-policy-disassociate''' --vip-id VIP-ID --ssl-policy-id SSL-POLICY-ID
 
*neutron '''vip-ssl-certificate-disassociate''' --vip-id VIP-ID --ssl-certificate-id SSL-POLICY-ID
 
*neutron '''vip-ssl-trusted-key-disassociate''' --vip-id VIP-ID --ssl-trusted-key-id SSL-POLICY-ID
 
  
 
=== Implementation Plan ===
 
=== Implementation Plan ===

Revision as of 13:11, 8 December 2013

Description

Terminating SSL connection on the load balancer and encrypting traffic back to the back end nodes, is a capabilities expected from modern load balancers and incorporated into many applications. This capability enables better certificate management and improved application based load balancing (ex: cookie based persistency, L7 Policies, etc.)

For giving LBaaS SSL termination ability, new extension called SSL will be added.

Rationale

The rational is giving user the ability to use SSL on LBaaS.

User should be able to apply SSL certificates on LBaaS and configure SSL on vip, front-end and back-end. Certificates chain should be supported for the Front-End certificate. Trusted certificates should be supported for the Back-End certificate.

User should be able to create SSL policies, SSL certificates and SSL trusted keys. Vip creation will remain with no change.

User should be able to associate vip with SSL policy and SSL certificates for front-end offload, and SSL trusted keys for back-end encryption.

SSL certificate creation will allow to enter the private key of the certificate if user will check a "remember" check box. In this case private key will be persistent in DB and user will not be required to enter it when associating certificate with a vip. If user chooses not to store private key in OpenStack DB, private key of the certificate will be requested every time when user will associate certificate with a vip.

User Experience

SSL Policy Managing

Under Project tab->Manage Network->SSL(NEW)->Policies (tab), user will see a table of SSL policies with "Add" and "Delete" buttons, as usual.

On "Add", as usual, form pops-up with:

  • Name : text field
  • Enable Front-End termination
  • Front-End supported protocols : multiple selector (at least one should be selected)
  • Front-End supported cipher suites : multiple selector (at least one should be selected)
  • Enable Back-End encryption
  • Back-End supported protocols : multiple selector (at least one should be selected)
  • Back-End supported cipher suites : multiple selector (at least one should be selected)
  • Pass info
    • Cipher : check box
    • Version : check box
    • Bits : check box
    • Frontend – add “Front-End-Https:” to headers : check box

On "Delete", as usual, confirmation. Associated policies are deletion protected.

On Actions->"Edit Policy" button, form opens-up with all fields allowed for change

On Actions column->"More" button contains delete option only

SSL Certificate Managing

Under Project tab->Manage Network->SSL(NEW)->Certificates(NEW), user will see a table of SSL certificates with "Add" and "Delete" buttons, as usual.

On "Add", as usual, form pops-up with:

  • Name : text field
  • Public key : text field
  • Pass phrase : text field
  • Certificate chain : text field
  • Persist private key : check box
 (Hint: If checked, certificate private key will be stored in OpenStack repository 
 and will not be requested when associating the certificate to a vip. 
 If unchecked, certificate private key will be requested each time 
 when certificate will be associated to a vip)
  • Private key : text field (disabled if "persist private key" check box is not checked)


On "Delete", as usual, confirmation. Associated certificates are deletion protected.

On Actions->"Edit Certificate" button, form opens-up with all fields allowed for change

On Actions column->"More" button contains delete option only

SSL Trusted keys Managing

Under Project tab->Manage Network->SSL(NEW)->Trusted keys(NEW), user will see a table of SSL trusted keys with "Add" and "Delete" buttons, as usual.

On "Add", as usual, form pops-up with:

  • Name : text field
  • Public key : text field


On "Delete", as usual, confirmation. Associated keys are deletion protected.

On Actions->"Edit Key" button, form opens-up with all fields allowed for change

On Actions column->"More" button contains delete option only

Vip SSL Association

On Project->Load Balancers screen, More->VIP SSL association(NEW) option of a specific pool, new form opens-up.

Single SSL policy may be selected from policies table containing selection check box and policy name.

Depending on policy, if front-end termination is enabled, SSL certificates table will be enabled for choosing certificates.

SSL certificates table contains certificate name, and private key text box. Private key text box contains the key and is disabled if private key is persistent in OpenStack repository. Private key text box is editable if private key is not persistent. User must supply it. At least one certificate must be selected.

Depending on policy, if back-end encryption is enabled, SSL trusted keys table will be enabled for choosing keys.

SSL trusted keys table contains selection check box and key name. User may select none or multiple keys.

To save:

  • SSL policy must be selected
  • If front-end termination enabled, at least one SSL certificate must be selected

API change

  • Vip CRUD API of the LBaaS plugin will not be changed.
  • New extension named "ssl" will be added, including SSL policies, certificates and trusted keys resources, quota etc.
  • Vip SSL association API should be added to the LBaaS plugin

Resources change

  • vip resource remains the same
  • SSL policy (new)
*front-end-termination : boolean
*front-end-protocols
    List of comma-separated values from a list of allowed values (SSLv3, TLSv1, TLSv1.1, TLSv1.2), default=None
*front-end-cipher_suites:
    List of coma-separated values from allowed values list in format 
        <key exchange algorithm>_<bulk encryption algorithm>_<message authentication code>_<pseudorandom function>
*back-end-encryption : boolean
*back-end-protocols
    List of comma-separated values from a list of allowed values (SSLv3, TLSv1, TLSv1.1, TLSv1.2), default=None
*back-end-cipher_suites:
    List of coma-separated values from allowed values list in format 
        <key exchange algorithm>_<bulk encryption algorithm>_<message authentication code>_<pseudorandom function>
*pass-info
    List of coma-separated values from allowed values list (cipher, protocol, bits, front-end)
  • SSL certificate (new)
public_key (PEM-formatted)
pass_phrase (not mandatory)
private_key (PEM-formatted, not mandatory)
certificate_chain (List of PEM-formatted public keys, not mandatory)
  • SSL trusted key (new)
public_key (PEM-formatted)

Data model change

  • vip entity will be associated with SSL policy, SSL certificate and SSL trusted key entities.
  • ssl_policy (NEW)
ssl-policy-id (string 36)
front-end-enabled (bool)
front-end-protocols (string 64)
front-end-cipher_suites (string 512)
back-end-enabled (boo)
back-end-protocols (string 64)
back-end-cipher_suites (string 512)
pass-info (string 64)
  • ssl_certificate (NEW)
ssl-certificate-id (string 36)
public_key (string 2048)
pass_phrase (string 64)
certificate_chain (string 10240)
private_key (string 2048)
  • ssl_trusted_key (NEW)
ssl-trusted-key-id (string 36)
key (string 2048)
  • vip_ssl_policy_assoc (one policy per vip)
vip-id (string 36)
ssl-policy-id (string 36)
status (string 16)
desc (string 255)
  • vip_ssl_certificate_assoc (multiple certificates per vip. certificate may be associated with multiple vips)
vip-id (string 36)
ssl-certificate-id (string 36)
status (string 16)
desc (string 255)
  • vip_ssl_trusted_key_assoc (multiple trusted keys per vip. trusted key may be associated with multiple vips)
vip-id
ssl-trusted-key-id
status (string 16)
desc (string 255)

DB Migration

No DB migration is needed

CLI changes

  • neutron ssl-policy-create --enable-front-end-termination true --front-end-protocols SSLv3, TLSv1, TLSv1.1 --front-end-cipher-suites DES-CBC-SHA, EXP-DES-CBC-SHA --enable-back-end-termination true --back-end-protocols SSLv3, TLSv1, TLSv1.1 --back-end-cipher-suites DES-CBC-SHA, EXP-DES-CBC-SHA --pass-info cipher, bits <policy name>
  • neutron ssl-policy-update --policy_id --front-end-protocols TLSv1, TLSv1.1
  • neutron ssl-policy-delete --policy_id
  • neutron ssl-certificate-create --public-key PUBLIC-KEY --persistent-private-key true --private-key PRIVATE-KEY --passphrase PASSPHRASE --cert-chain INTERMEDIATE-KEY1, INTERMEDIATE-KEY2 <certificate name>
  • neutron ssl-certificate-update --certificate-id --cert-chain INTERMEDIATE-KEY1, INTERMEDIATE-KEY2, INTERMEDIATE-KEY3
  • neutron ssl-certificate-delete --certificate_id
  • neutron ssl-trusted-key-create --key PUBLIC KEY <key name>
  • neutron ssl-trusted-key-update --key-id --key PUBLIC KEY
  • neutron ssl-trusted-key-delete --key-id
  • neutron vip-ssl-associate --vip-id VIP-ID --ssl-policy-id my_policy --ssl-certificate-id google_cert_id, facebook_cert_id --ssl-trusted-key-id trust_1, trust_2, trust_3
  • neutron vip-ssl-disassociate --vip-id VIP-ID

Implementation Plan

  • Modifying LBaaS Vip resources' attribute map with new parameters
  • Modifying LBaaS Vip DB Model with new parameters
  • Modifying LBaaS Vip DB Model tests to account new parameters if needed
  • Modifying LBaaS HA-Proxy driver to support SSL
  • Update HA-Proxy to version 1.5 {TBD}

Support Matrix

Provider Protocols Cipher Suites Certificate chain FE client auth. BE trusted keys BE client cert. SNI
HAProxy 1.5 SSLv3, TLSv1 As OpenSSL Yes Yes No No Yes
Amazon EC2 SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2 As OpenSSL Yes No Yes No No
OpenStack SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2 As OpenSSL Yes No Yes No No