cloudstack/ui/scripts
Rohit Yadav 0f0e7f2011 FR12 (CLOUDSTACK-9993): Secure Agent Communications
This introduces a new certificate authority framework that allows
pluggable CA provider implementations to handle certificate operations
around issuance, revocation and propagation. The framework injects
itself to `NioServer` to handle agent connections securely. The
framework adds assumptions in `NioClient` that a keystore if available
with known name `cloud.jks` will be used for SSL negotiations and
handshake.

This includes a default 'root' CA provider plugin which creates its own
self-signed root certificate authority on first run and uses it for
issuance and provisioning of certificate to CloudStack agents such as
the KVM, CPVM and SSVM agents and also for the management server for
peer clustering.

Additional changes and notes:
- Comma separate list of management server IPs can be set to the 'host'
  global setting. Newly provisioned agents (KVM/CPVM/SSVM etc) will get
  radomized comma separated list to which they will attempt connection
  or reconnection in provided order. This removes need of a TCP LB on
  port 8250 (default) of the management server(s).
- All fresh deployment will enforce two-way SSL authentication where
  connecting agents will be required to present certificates issued
  by the 'root' CA plugin.
- Existing environment on upgrade will continue to use one-way SSL
  authentication and connecting agents will not be required to present
  certificates.
- A script `keystore-setup` is responsible for initial keystore setup
  and CSR generation on the agent/hosts.
- A script `keystore-cert-import` is responsible for import provided
  certificate payload to the java keystore file.
- Agent security (keystore, certificates etc) are setup initially using
  SSH, and later provisioning is handled via an existing agent connection
  using command-answers. The supported clients and agents are limited to
  CPVM, SSVM, and KVM agents, and clustered management server (peering).
- Certificate revocation does not revoke an existing agent-mgmt server
  connection, however rejects a revoked certificate used during SSL
  handshake.
- Older `cloudstackmanagement.keystore` is deprecated and will no longer
  be used by mgmt server(s) for SSL negotiations and handshake. New
  keystores will be named `cloud.jks`, any additional SSL certificates
  should not be imported in it for use with tomcat etc. The `cloud.jks`
  keystore is stricly used for agent-server communications.
- Management server keystore are validated and renewed on start up only,
  the validity of them are same as the CA certificates.

New APIs:
- listCaProviders: lists all available CA provider plugins
- listCaCertificate: lists the CA certificate(s)
- issueCertificate: issues X509 client certificate with/without a CSR
- provisionCertificate: provisions certificate to a host
- revokeCertificate: revokes a client certificate using its serial

Global settings for the CA framework:
- ca.framework.provider.plugin: The configured CA provider plugin
- ca.framework.cert.keysize: The key size for certificate generation
- ca.framework.cert.signature.algorithm: The certificate signature algorithm
- ca.framework.cert.validity.period: Certificate validity in days
- ca.framework.cert.automatic.renewal: Certificate auto-renewal setting
- ca.framework.background.task.delay: CA background task delay/interval
- ca.framework.cert.expiry.alert.period: Days to check and alert expiring certificates

Global settings for the default 'root' CA provider:
- ca.plugin.root.private.key: (hidden/encrypted) CA private key
- ca.plugin.root.public.key: (hidden/encrypted) CA public key
- ca.plugin.root.ca.certificate: (hidden/encrypted) CA certificate
- ca.plugin.root.issuer.dn: The CA issue distinguished name
- ca.plugin.root.auth.strictness: Are clients required to present certificates
- ca.plugin.root.allow.expired.cert: Are clients with expired certificates allowed

UI changes:
- Button to download/save the CA certificates.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2017-08-23 12:42:59 +02:00
..
ui APPLE-328: Metrics View APIs 2017-02-16 13:20:30 +05:30
ui-custom FR12 (CLOUDSTACK-9993): Secure Agent Communications 2017-08-23 12:42:59 +02:00
accounts.js FR20: Allow native CloudStack users to change password from the UI 2017-05-30 14:23:38 +05:30
accountsWizard.js CLOUDSTACK-8562: DB-Backed Dynamic Role Based API Access Checker 2016-04-25 14:52:02 +05:30
affinity.js CLOUDSTACK-7779: UI > affinity group action filter > extend scope from local to global. 2014-10-23 16:19:04 -07:00
autoscaler.js Fix Externalization of hard-coded label strings 2014-09-17 13:59:13 -07:00
cloud.core.callbacks.js CLOUDSTACK-8642: SSO Method not allowed bug fix. Due to CLOUDSTACK-8505 and commit 1c81b241e7 2015-07-16 21:44:58 +05:30
cloudStack.js CLOUDSTACK-8562: DB-Backed Dynamic Role Based API Access Checker 2016-04-25 14:52:02 +05:30
configuration.js CLOUDSTACK-6543 Sort domain lists in UI 2015-04-17 15:18:16 +02:00
dashboard.js CLOUDSTACK-8285: check and update IP capacity states based on allocation state 2015-02-25 16:46:12 +05:30
docs.js CLOUDSTACK-8457: SAML auth plugin improvements for production usage 2015-06-29 12:25:02 +02:00
domains.js CLOUDSTACK-8307: UI not showing all Domains, if there are more than 24 domains then the last domain gets cut off on firefox and IE. Added a flag in treeview widget and based on the flag adding css class which will make overflow as scroll instead of the default auto. 2015-03-09 14:27:23 +05:30
events.js CLOUDSTACK-6543 Sort domain lists in UI 2015-04-17 15:18:16 +02:00
globalSettings.js CLOUDSTACK-7816: UI > Global Settings > add "Baremetal Rack Configuration" section. 2014-10-30 11:27:38 -07:00
installWizard.js api: avoid sending sensitive data in api response 2015-03-11 16:34:11 +05:30
instanceWizard.js CLOUDSTACK-8075: UI > Instances menu > Add Instance > Select template/ISO > "shared" tab > select a shared template, click Next button => fix error "unable to find matched template object". 2014-12-17 10:58:43 -08:00
instances.js metrics: Increase UI width, fix metrics ui issues 2016-01-20 12:57:09 +01:00
lbStickyPolicy.js Fix Externalization of hard-coded label strings 2014-09-17 13:59:13 -07:00
metrics.js FR17: Metrics fix 2017-03-30 11:59:35 +05:30
network.js CLOUDSTACK-8231: Fixed UI empty drop-down list for LB rules 2015-05-29 21:19:26 +02:00
plugins.js Plugin API: Support multiple JS includes per plugin 2014-01-27 12:39:36 -08:00
projects.js CLOUDSTACK-6543 Sort domain lists in UI 2015-04-17 15:18:16 +02:00
regions.js CLOUDSTACK-6543 Sort domain lists in UI 2015-04-17 15:18:16 +02:00
roles.js CLOUDSTACK-8562: Make role permissions orderable 2016-05-09 10:53:45 +05:30
sharedFunctions.js CLOUDSTACK-8562: DB-Backed Dynamic Role Based API Access Checker 2016-04-25 14:52:02 +05:30
storage.js FR-17: KVM, Xen and VMware support + UI with Marvin test 2017-03-27 09:53:40 +05:30
system.js annotations on hosts 2017-07-13 10:29:51 +02:00
templates.js CLOUDSTACK-8766: Fix infinite scrolling pagination for zonal iso/template listing 2015-08-28 13:06:13 +05:30
vm_snapshots.js UI code cleanup: Fix trailing commas in JS 2013-09-24 11:16:13 -07:00
vpc.js CLOUDSTACK-7915: Remove hard-coded values for Load Balancer algorithms in UI 2014-11-25 11:56:34 +05:30
zoneWizard.js CLOUDSTACK-8301: Enable configuring local storage use for system VMs at zone level 2015-08-08 22:41:52 +05:30