Jump to: navigation, search

Difference between revisions of "Neutron/LBaaS/SSL"

< Neutron‎ | LBaaS
(Support Matrix)
(SSL Policies Managing)
Line 29: Line 29:
 
Under Project tab->Manage Network->Load Balancers->SSL Policies (new tab),
 
Under Project tab->Manage Network->Load Balancers->SSL Policies (new tab),
 
user will see a table of SSL policies with "Add" and "Delete" buttons, as usual.
 
user will see a table of SSL policies with "Add" and "Delete" buttons, as usual.
 +
Default policy will be available. It will have default set of protocols and cipher suites.
 +
User should be able to explore default policy details but should not be able to delete it.
  
 
On "Add", as usual, form pops-up with:
 
On "Add", as usual, form pops-up with:
Line 34: Line 36:
 
*Enable Front-End termination : check box
 
*Enable Front-End termination : check box
 
*Front-End supported protocols : multiple selector (at least one should be selected)
 
*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)
+
*Front-End supported cipher suites : Radio button with 4 choices:
 +
** LOW (OpenSSL LOW ciphers, Hint should show them all)
 +
** MEDIUM (OpenSSL MEDIUM ciphers, Hint should show them all)
 +
** HIGH (OpenSSL HIGH ciphers, Hint should show them all)
 +
** Custom: multiple selector (at least one suite should be selected)
 
*Enable Back-End encryption : check box
 
*Enable Back-End encryption : check box
 
*Back-End supported protocols : multiple selector (at least one should be selected)
 
*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)
+
*Back-End supported cipher suites : Radio button with 4 choices:
 +
** LOW (OpenSSL LOW ciphers, Hint should show them all)
 +
** MEDIUM (OpenSSL MEDIUM ciphers, Hint should show them all)
 +
** HIGH (OpenSSL HIGH ciphers, Hint should show them all)
 +
** Custom: multiple selector (at least one suite should be selected)
 
*Pass info
 
*Pass info
 
**Cipher : check box
 
**Cipher : check box

Revision as of 10:26, 12 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 manage SSL policies, SSL certificates and SSL trusted keys.
  • 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.

  • User should have a choice to store certificates private keys in OpenStack repository or not.

SSL certificate creation will let the user 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.

 Note: private key will be stored encrypted with a key specified in configuration file.

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 Policies Managing

Under Project tab->Manage Network->Load Balancers->SSL Policies (new tab), user will see a table of SSL policies with "Add" and "Delete" buttons, as usual. Default policy will be available. It will have default set of protocols and cipher suites. User should be able to explore default policy details but should not be able to delete it.

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

  • Name : text field
  • Enable Front-End termination : check box
  • Front-End supported protocols : multiple selector (at least one should be selected)
  • Front-End supported cipher suites : Radio button with 4 choices:
    • LOW (OpenSSL LOW ciphers, Hint should show them all)
    • MEDIUM (OpenSSL MEDIUM ciphers, Hint should show them all)
    • HIGH (OpenSSL HIGH ciphers, Hint should show them all)
    • Custom: multiple selector (at least one suite should be selected)
  • Enable Back-End encryption : check box
  • Back-End supported protocols : multiple selector (at least one should be selected)
  • Back-End supported cipher suites : Radio button with 4 choices:
    • LOW (OpenSSL LOW ciphers, Hint should show them all)
    • MEDIUM (OpenSSL MEDIUM ciphers, Hint should show them all)
    • HIGH (OpenSSL HIGH ciphers, Hint should show them all)
    • Custom: multiple selector (at least one suite should be selected)
  • Pass info
    • Cipher : check box
    • Version : check box
    • Bits : check box
    • Frontend – add “Front-End-Https:” to headers : check box
Note: Front-End or Back-End or both must be configured to SAVE.

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 Certificates Managing

Under Project tab->Manage Network->SSL 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)
Note: If private key persistence is enabled, private key must be supplied.

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->Load Balancers->SSL Trusted keys(new tab), 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

Important Note: Associating and disassociating SSL for a vip are atomic actions.
Saving the vip SSL association will require re-entering all missing certificate private keys.
SSL disassociating of a vip will remove all associations with policy, certificates and trusted keys. This is relevant for UI and CLI.

On Project->Load Balancers screen, For each pool, "More" button->VIP SSL association(new) option, 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 an association:

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

  • To remove association:

SSL policy must not be selected. All other fields will be disabled.

API change

  • Vip CRUD API of the LBaaS plugin will not be changed.
  • New extension named "ssl" will be added, including certificate resource
  • New SSL policy and trusted key entities will be added to the LBaaS service
  • Vip SSL association API should be added to the LBaaS plugin

Resources change

  • vip resource remains the same
  • SSL policy (new)
    • front-end-termination : bool
    • 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.
      • Format - <key exchange algorithm>_<bulk encryption algorithm>_<message authentication code>_<pseudorandom function>
    • back-end-encryption : bool
    • 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.
      • 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 string
    • pass_phrase : not mandatory string
    • private_key : PEM-formatted string, not mandatory
    • certificate_chain : list of PEM-formatted public keys, not mandatory
  • SSL trusted key (new)
    • public_key : PEM-formatted string

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)
ssl_policy_name (string 64)
front_end_enabled (bool)
front_end_protocols (string 32)
front_end_cipher_suites (string 512)
back_end_enabled (bool)
back_end_protocols (string 32)
back_end_cipher_suites (string 512)
pass_info (string 64)
  • ssl_certificate (new)
ssl-certificate_id (string 36)
ssl-certificate-name (string 64)
public_key (string 4096)
pass_phrase (string 64)
certificate_chain (string 20480)
private_key (string 4096)
  • ssl_trusted_key (new)
ssl_trusted_key_id (string 36)
ssl_trusted_key_name (string 64)
key (string 4096)
  • vip_ssl_policy_assoc (new, one policy per vip)
vip_id (string 36)
ssl_policy_id (string 36)
status (string 16)
desc (string 255)
  • vip_ssl_certificate_assoc (new, 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 (new, multiple trusted keys per vip. trusted key may be associated with multiple vips)
vip_id (string 36)
ssl_trusted_key_id (string 36)
status (string 16)
desc (string 255)

DB Migration

No DB migration is needed

CLI changes

SSL Policy
  • neutron ssl-policy-create --front-end-termination type=dict enable=true protocols=SSLv3,TLSv1,TLSv1.1 cipher-suites=DES-CBC-SHA,EXP-DES-CBC-SHA --back-end-termination type=dict enabled=true protocols=SSLv3,TLSv1,TLSv1.1 cipher-suites=DES-CBC-SHA,EXP-DES-CBC-SHA --pass-info type=dict cipher=true bits=true policy name
  • neutron ssl-policy-update --policy_id --front-end-termination type-dict protocols=TLSv1,TLSv1.1
  • neutron ssl-policy-delete --policy_id
  • neutron ssl-policy-list
  • neutron ssl-policy-show --policy_id
SSL Certificate
  • neutron ssl-certificate-create --public-key PUBLIC-KEY-FILE <--private-key PRIVATE-KEY-FILE> <--passphrase PASSPHRASE> <--cert-chain INTERMEDIATE-KEY-FILE-1, INTERMEDIATE-KEY-FILE-2> certificate name
  • neutron ssl-certificate-update --certificate-id --cert-chain INTERMEDIATE-KEY-FILE-1, INTERMEDIATE-KEY-FILE-2, INTERMEDIATE-KEY-FILE-3
  • neutron ssl-certificate-delete --certificate_id
  • neutron ssl-certificate-list
  • neutron ssl-certificate-show --certificate_id
SSL Trusted Key
  • neutron ssl-trusted-key-create --key PUBLIC-KEY-FILE key name
  • neutron ssl-trusted-key-update --key-id --key PUBLIC-KEY-FILE
  • neutron ssl-trusted-key-delete --key-id
  • neutron ssl-trusted-key-list
  • neutron ssl-trusted-key-show --key_id
Vip SSL Association
  • neutron vip-ssl-associate --vip-id VIP-ID --ssl-policy-id my_policy_id --ssl-certificate type=dict certificate-id=google_cert_id private-key=PRIVATE-KEY-FILE-1 --ssl-trusted-key type=dict key-id=KEY-ID-1
  • neutron vip-ssl-disassociate --vip-id VIP-ID
TODO: List of certificates and trusted keys should be supported

Implementation Plan

  • Creating new extension called "ssl" with SSL certificate and trusted key new entities
  • Add new SSL entities CRUD API to the LBaaS Plugin
  • Add new DB entities and associations
  • Add unit testing for SSL functionality
  • Modifying LBaaS HA-Proxy driver to support SSL extension
  • 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 Yes