summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2013-08-13 08:21:25 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2013-08-13 08:33:04 -0400
commit5c5edfa9b3a2f3baad06802269e7acd1d3e77566 (patch)
tree2b909ac63c9848d0e991eb25c105b8a5a204ad03 /doc
parent1fd3b4cb3151a993b5f62b57898fafc7ff020b98 (diff)
downloadbcfg2-5c5edfa9b3a2f3baad06802269e7acd1d3e77566.tar.gz
bcfg2-5c5edfa9b3a2f3baad06802269e7acd1d3e77566.tar.bz2
bcfg2-5c5edfa9b3a2f3baad06802269e7acd1d3e77566.zip
Rewrote SSLCA as Cfg handler.
This adds encryption support to SSL key creation (much like SSH private keys), and the ability to generate keys and certs that are specific to groups, instead of just to hosts. It also moves the SSLCA data (the XML files describing keys and certs as well as the keys and certs themselves) into the Cfg tree, rather than off in their own separate place. tools/upgrade/1.4/migrate_sslca.py can be used to migrate to the new format. This also adds XMLCfgCreator, a CfgCreator that makes it easier to create data based on XML descriptions of it (which is exactly what the SSH key and SSL CA creators do), including built-in support for host- and group-specific data, encryption, and so on.
Diffstat (limited to 'doc')
-rw-r--r--doc/appendix/guides/sslca_howto.txt183
-rw-r--r--doc/man/bcfg2.conf.txt16
-rw-r--r--doc/server/info.txt3
-rw-r--r--doc/server/plugins/generators/cfg.txt223
-rw-r--r--doc/server/plugins/generators/sslca.txt361
-rw-r--r--doc/server/plugins/structures/bundler/bcfg2.txt3
-rw-r--r--doc/server/xml-common.txt108
7 files changed, 448 insertions, 449 deletions
diff --git a/doc/appendix/guides/sslca_howto.txt b/doc/appendix/guides/sslca_howto.txt
new file mode 100644
index 000000000..9c939dcd3
--- /dev/null
+++ b/doc/appendix/guides/sslca_howto.txt
@@ -0,0 +1,183 @@
+.. -*- mode: rst -*-
+
+.. _appendix-guides-sslca_howto:
+
+====================================
+ Automated Bcfg2 SSL Authentication
+====================================
+
+This how-to describes one possible scenario for automating SSL
+certificate generation and distribution for bcfg2 client/server
+communication using the :ref:`SSL CA feature
+<server-plugins-generators-cfg-ssl-certificates>` of
+:ref:`server-plugins-generators-cfg`. The process involves configuring
+a certificate authority (CA), generating the CA cert and key pair,
+configuring the Cfg SSL CA feature and a Bundle to use the generated
+certs to authenticate the Bcfg2 client and server.
+
+OpenSSL CA
+==========
+
+If you already have a SSL CA available you can skip this section,
+otherwise you can easily build one on the server using openssl. The
+paths should be adjusted to suite your preferences.
+
+#. Prepare the directories and files::
+
+ mkdir -p /etc/pki/CA/newcerts
+ mkdir /etc/pki/CA/crl
+ echo '01' > /etc/pki/CA/serial
+ touch /etc/pki/CA/index.txt
+ touch /etc/pki/CA/crlnumber
+
+#. Edit the ``openssl.cnf`` config file, and in the **[ CA_default ]**
+ section adjust the following parameters::
+
+ dir = /etc/pki # Where everything is kept
+ certs = /etc/pki/CA/certs # Where the issued certs are kept
+ database = /etc/pki/CA/index.txt # database index file.
+ new_certs_dir = /etc/pki/CA/newcerts # default place for new certs.
+ certificate = /etc/pki/CA/certs/bcfg2ca.crt # The CA certificate
+ serial = /etc/pki/CA/serial # The current serial number
+ crl_dir = /etc/pki/CA/crl # Where the issued crl are kept
+ crlnumber = /etc/pki/CA/crlnumber # the current crl number
+ crl = /etc/pki/CA/crl.pem # The current CRL
+ private_key = /etc/pki/CA/private/bcfg2ca.key # The private key
+
+#. Create the CA root certificate and key pair. You'll be asked to
+ supply a passphrase, and some organizational info. The most
+ important bit is **Common Name** which you should set to be the
+ hostname of your bcfg2 server that your clients will see when doing
+ a reverse DNS query on it's ip address.::
+
+ openssl req -new -x509 -extensions v3_ca -keyout bcfg2ca.key \
+ -out bcfg2ca.crt -days 3650
+
+#. Move the generated cert and key to the locations specified in
+ ``openssl.cnf``::
+
+ mv bcfg2ca.key /etc/pki/CA/private/
+ mv bcfg2ca.crt /etc/pki/CA/certs/
+
+Your self-signing CA is now ready to use.
+
+Bcfg2
+=====
+
+SSL CA Feature
+--------------
+
+The SSL CA feature of Cfg was not designed specifically to manage
+Bcfg2 client/server communication, though it is certainly able to
+provide certificate generation and management services for that
+purpose. You'll need to configure Cfg as described in
+:ref:`server-plugins-generators-cfg-ssl-certificates`, including:
+
+* Configuring a ``[sslca_default]`` section in ``bcfg2.conf`` that
+ describes the CA you created above;
+* Creating ``Cfg/etc/pki/tls/certs/bcfg2client.crt/sslcert.xml`` and
+ ``Cfg/etc/pki/tls/private/bcfg2client.key/sslkey.xml`` to describe
+ the key and cert you want generated.
+
+In general, the defaults in ``sslcert.xml`` and ``sslkey.xml`` should
+be fine, so those files can look like this:
+
+``Cfg/etc/pki/tls/certs/bcfg2client.crt/sslcert.xml``:
+
+.. code-block:: xml
+
+ <CertInfo>
+ <Cert key="/etc/pki/tls/private/bcfg2client.key"/>
+ </CertInfo>
+
+``Cfg/etc/pki/tls/private/bcfg2client.key/sslkey.xml``:
+
+.. code-block:: xml
+
+ <KeyInfo/>
+
+Client Bundle
+-------------
+
+To automate the process of generating and distributing certs to the
+clients we need define at least the cert and key paths created by Cfg,
+as well as the CA certificate path in a Bundle. For example:
+
+.. code-block:: xml
+
+ <Path name='/etc/pki/tls/certs/bcfg2ca.crt'/>
+ <Path name='/etc/pki/tls/bcfg2client.crt'/>
+ <Path name='/etc/pki/tls/private/bcfg2client.key'/>
+
+Here's a more complete example bcfg2-client bundle:
+
+.. code-block:: xml
+
+ <Bundle>
+ <Path name='/etc/bcfg2.conf'/>
+ <Path name='/etc/cron.d/bcfg2-client'/>
+ <Package name='bcfg2'/>
+ <Service name='bcfg2'/>
+ <Group name='rpm'>
+ <Path name='/etc/sysconfig/bcfg2'/>
+ <Path name='/etc/pki/tls/certs/bcfg2ca.crt'/>
+ <Path name='/etc/pki/tls/certs/bcfg2client.crt'/>
+ <Path name='/etc/pki/tls/private/bcfg2client.key'/>
+ </Group>
+ <Group name='deb'>
+ <Path name='/etc/default/bcfg2' altsrc='/etc/sysconfig/bcfg2'/>
+ <Path name='/etc/ssl/certs/bcfg2ca.crt' altsrc='/etc/pki/tls/certs/bcfg2ca.crt'/>
+ <Path name='/etc/ssl/certs/bcfg2client.crt' altsrc='/etc/pki/tls/certs/bcfg2client.crt'/>
+ <Path name='/etc/ssl/private/bcfg2client.key' altsrc='/etc/pki/tls/private/bcfg2client.key'/>
+ </Group>
+ </Bundle>
+
+The ``bcfg2.conf`` client config needs at least 5 parameters set for
+SSL auth.
+
+#. ``key`` : This is the host specific key that Cfg will create.
+#. ``certificate`` : This is the host specific cert that Cfg will
+ create.
+#. ``ca`` : This is a copy of your CA certificate. Not generated by
+ Cfg.
+#. ``password`` : Set to arbitrary string when using certificate
+ auth. This also *shouldn't* be required. See:
+ http://trac.mcs.anl.gov/projects/bcfg2/ticket/1019
+
+Here's what a functional **[communication]** section in a
+``bcfg2.conf`` genshi template for clients might look like.::
+
+ [communication]
+ protocol = xmlrpc/ssl
+ {% if metadata.uuid != None %}\
+ user = ${metadata.uuid}
+ {% end %}\
+ password = DUMMYPASSWORDFORCERTAUTH
+ {% choose %}\
+ {% when 'rpm' in metadata.groups %}\
+ certificate = /etc/pki/tls/certs/bcfg2client.crt
+ key = /etc/pki/tls/private/bcfg2client.key
+ ca = /etc/pki/tls/certs/bcfg2ca.crt
+ {% end %}\
+ {% when 'deb' in metadata.groups %}\
+ certificate = /etc/ssl/certs/bcfg2client.crt
+ key = /etc/ssl/private/bcfg2client.key
+ ca = /etc/ssl/certs/bcfg2ca.crt
+ {% end %}\
+ {% end %}\
+
+As a client will not be able to authenticate with certificates it does
+not yet posses we need to overcome the chicken and egg scenario the
+first time we try to connect such a client to the server. We can do so
+using password based auth to bootstrap the client manually specifying
+all the relevant auth parameters like so::
+
+ bcfg2 -qv -S https://fqdn.of.bcfg2-server:6789 -u fqdn.of.client \
+ -x SUPER_SECRET_PASSWORD
+
+If all goes well the client should recieve a freshly generated key and
+cert and you should be able to run ``bcfg2`` again without specifying
+the connection parameters.
+
+If you do run into problems you may want to review
+:ref:`appendix-guides-authentication`.
diff --git a/doc/man/bcfg2.conf.txt b/doc/man/bcfg2.conf.txt
index 24bcb5142..f5612e08f 100644
--- a/doc/man/bcfg2.conf.txt
+++ b/doc/man/bcfg2.conf.txt
@@ -107,7 +107,6 @@ plugins
SEModules
ServiceCompat
SSHbase
- SSLCA
Svn
TemplateHelper
Trigger
@@ -364,12 +363,6 @@ The SSHbase generator plugin manages ssh host keys (both v1 and v2) for
hosts. It also manages the ssh_known_hosts file. It can integrate host
keys from other management domains and similarly export its keys.
-SSLCA Plugin
-++++++++++++
-
-The SSLCA plugin is designed to handle creation of SSL privatekeys and
-certificates on request.
-
Svn Plugin
++++++++++
@@ -610,11 +603,12 @@ the configuration file.
running in paranoid mode. Only the most recent versions of these
copies will be kept.
-SSLCA options
--------------
+SSL CA options
+--------------
-These options are necessary to configure the SSLCA plugin and can be
-found in the **[sslca_default]** section of the configuration file.
+These options are necessary to configure the SSL CA feature of the Cfg
+plugin and can be found in the **[sslca_default]** section of the
+configuration file.
config
Specifies the location of the openssl configuration file for
diff --git a/doc/server/info.txt b/doc/server/info.txt
index 2c50f0031..8342e1cee 100644
--- a/doc/server/info.txt
+++ b/doc/server/info.txt
@@ -7,8 +7,7 @@ info.xml
========
Various file properties for entries served by most generator plugins,
-including :ref:`server-plugins-generators-cfg`,
-:ref:`server-plugins-generators-sslca`, and
+including :ref:`server-plugins-generators-cfg` and
:ref:`server-plugins-generators-sshbase`, are controlled through the
use of ``info.xml`` files.
diff --git a/doc/server/plugins/generators/cfg.txt b/doc/server/plugins/generators/cfg.txt
index 4d35a5970..56804db99 100644
--- a/doc/server/plugins/generators/cfg.txt
+++ b/doc/server/plugins/generators/cfg.txt
@@ -413,7 +413,7 @@ See :ref:`server-encryption` for more details on encryption in Bcfg2
in general.
``pubkey.xml``
-~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~
``pubkey.xml`` only ever contains a single line:
@@ -560,29 +560,163 @@ Example
Hopefully, the performance concerns can be resolved in a future
release and these features can be added.
+.. _server-plugins-generators-sslca:
+.. _server-plugins-generators-cfg-ssl-certificates:
+
+SSL Keys and Certificates
+=========================
+
+Cfg can also create SSL keys and certs on the fly, and store the
+generated data in the repo so that subsequent requests do not result
+in repeated key/cert recreation. In the event that a new key or cert
+is needed, the old file can simply be removed from the
+repository, and the next time that host checks in, a new file will be
+created. If that file happens to be the key, any dependent
+certificates will also be regenerated.
+
+See also :ref:`appendix-guides-sslca_howto` for a detailed example
+that uses the SSL key management feature to automate Bcfg2 certificate
+authentication.
+
+Getting started
+---------------
+
+In order to use the SSL certificate generation feature, you must first
+have at least one CA configured on your system. For details on
+setting up your own OpenSSL based CA, please see
+http://www.openssl.org/docs/apps/ca.html for details of the suggested
+directory layout and configuration directives.
+
+For SSL cert generation to work, the openssl.cnf (or other
+configuration file) for that CA must contain full (not relative)
+paths.
+
+#. Add a section to your ``/etc/bcfg2.conf`` called ``sslca_foo``,
+ replacing foo with the name you wish to give your CA so you can
+ reference it in certificate definitions. (If you only have one CA,
+ you can name it ``sslca_default``, and it will be the default CA
+ for all other operations.)
+
+#. Under that section, add a ``config`` option that gives the location
+ of the ``openssl.cnf`` file for your CA.
+
+#. If necessary, add a ``passphrase`` option containing the passphrase
+ for the CA's private key. If no passphrase is entry exists, it is
+ assumed that the private key is stored unencrypted.
+
+#. Optionally, add a ``chaincert`` option that points to the location
+ of your ssl chaining certificate. This is used when preexisting
+ certificate hostfiles are found, so that they can be validated and
+ only regenerated if they no longer meet the specification. If
+ you're using a self signing CA this would be the CA cert that you
+ generated. If the chain cert is a root CA cert (e.g., if it is a
+ self-signing CA), also add an entry ``root_ca = true``. If
+ ``chaincert`` is omitted, certificate verification will not be
+ performed.
+
+#. Once all this is done, you should have a section in your
+ ``/etc/bcfg2.conf`` that looks similar to the following::
+
+ [sslca_default]
+ config = /etc/pki/CA/openssl.cnf
+ passphrase = youReallyThinkIdShareThis?
+ chaincert = /etc/pki/CA/chaincert.crt
+ root_ca = true
+
+#. You are now ready to create key and certificate definitions. For
+ this example we'll assume you've added Path entries for the key,
+ ``/etc/pki/tls/private/localhost.key``, and the certificate,
+ ``/etc/pki/tls/certs/localhost.crt`` to a bundle.
+
+#. Within the ``Cfg/etc/pki/tls/private/localhost.key`` directory,
+ create a `sslkey.xml`_ file containing the following:
+
+ .. code-block:: xml
+
+ <KeyInfo/>
+
+#. This will cause the generation of an SSL key when a client requests
+ that Path. (By default, it will be a 2048-bit RSA key; see
+ `sslkey.xml`_ for details on how to change the key type and size.)
+
+#. Similarly, create `sslcert.xml`_ in
+ ``Cfg/etc/pki/tls/certs/localhost.cfg/``, containing the following:
+
+ .. code-block:: xml
+
+ <CertInfo>
+ <Cert key="/etc/pki/tls/private/localhost.key" ca="foo"/>
+ </CertInfo>
+
+#. When a client requests the cert path, a certificate will be
+ generated using the key hostfile at the specified key location,
+ using the CA matching the ``ca`` attribute. ie. ``ca="foo"`` will
+ match ``[sslca_default]`` in your ``/etc/bcfg2.conf``
+
+The :ref:`Bcfg2 bundle example
+<server-plugins-structures-bundler-bcfg2-server>` contains entries to
+automate the process of setting up a CA.
+
Configuration
-------------
-In addition to ``privkey.xml`` and ``authorized_keys.xml``, described
-above, the behavior of the SSH key generation feature can be
-influenced by several options in the ``[sshkeys]`` section of
-``bcfg2.conf``:
+``bcfg2.conf``
+~~~~~~~~~~~~~~
-+----------------+---------------------------------------------------------+-----------------------+------------+
-| Option | Description | Values | Default |
-+================+=========================================================+=======================+============+
-| ``passphrase`` | Use the named passphrase to encrypt private keys on the | String | None |
-| | filesystem. The passphrase must be defined in the | | |
-| | ``[encryption]`` section. See :ref:`server-encryption` | | |
-| | for more details on encryption in Bcfg2 in general. | | |
-+----------------+---------------------------------------------------------+-----------------------+------------+
-| ``category`` | Generate keys specific to groups in the given category. | String | None |
-| | It is best to pick a category that all clients have a | | |
-| | group from. | | |
-+----------------+---------------------------------------------------------+-----------------------+------------+
+In ``bcfg2.conf``, you must declare your CA(s) in ``[sslca_<name>]``
+sections. At least one is required. Valid options are detailed
+below, in `Cfg Configuration`_.
+
+Only the ``config`` option is required; i.e., the simplest possible CA
+section is::
+
+ [sslca_default]
+ config = /etc/pki/CA/openssl.cnf
+
+``sslcert.xml``
+~~~~~~~~~~~~~~~
+
+.. xml:schema:: sslca-cert.xsd
+ :linktotype:
+ :inlinetypes: CertType
+
+Example
+^^^^^^^
+
+.. code-block:: xml
+
+ <CertInfo>
+ <subjectAltName>test.example.com</subjectAltName>
+ <Group name="apache">
+ <Cert key="/etc/pki/tls/private/foo.key" days="730"/>
+ </Group>
+ <Group name="nginx">
+ <Cert key="/etc/pki/tls/private/foo.key" days="730"
+ append_chain="true"/>
+ </Group>
+ </CertInfo>
+
+``sslkey.xml``
+~~~~~~~~~~~~~~
+
+.. xml:schema:: sslca-key.xsd
+ :linktotype:
+ :inlinetypes: KeyType
+
+Example
+^^^^^^^
+
+.. code-block:: xml
+
+ <KeyInfo>
+ <Group name="fast">
+ <Key type="rsa" bits="1024"/>
+ </Group>
+ <Group name="secure">
+ <Key type="rsa" bits="4096"/>
+ </Group>
+ </KeyInfo>
-See :ref:`server-encryption` for more details on encryption in Bcfg2
-in general.
.. _server-plugins-generators-cfg-validation:
@@ -637,3 +771,54 @@ File permissions
File permissions for entries handled by Cfg are controlled via the use
of :ref:`server-info` files. Note that you **cannot** use both a
Permissions entry and a Path entry to handle the same file.
+
+Cfg Configuration
+=================
+
+The behavior of many bits of the Cfg plugin can be configured in
+``bcfg2.conf`` with the following options.
+
+In addition to ``privkey.xml`` and ``authorized_keys.xml``, described
+above, the behavior of the SSH key generation feature can be
+influenced by several options in the ``[sshkeys]`` section of
+``bcfg2.conf``:
+
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+| Section | Option | Description | Values | Default |
++================+=========================================================+=======================+============+
+| ``cfg`` | ``passphrase`` | Use the named passphrase to encrypt created data on the | String | None |
+| | | filesystem. (E.g., SSH and SSL keys.) The passphrase | | |
+| | | must be defined in the ``[encryption]`` section. | | |
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+| ``cfg`` | ``category`` | Generate data (e.g., SSH keys, SSL keys and certs) | String | None |
+| | | specific to groups in the given category. It is best to | | |
+| | | pick a category that all clients have a group from. | | |
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+| ``cfg`` | ``validation`` | Whether or not to perform `Content Validation`_ | Boolean | True |
+| | | specific to groups in the given category. It is best to | | |
+| | | pick a category that all clients have a group from. | | |
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+| ``sshkeys`` | ``passphrase`` | Override the global Cfg passphrase with a specific | String | None |
+| | | passphrase for encrypting created SSH private keys. | | |
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+| ``sshkeys`` | ``category`` | Override the global Cfg category with a specific | String | None |
+| | | category for created SSH keys. | | |
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+| ``sslca`` | ``passphrase`` | Override the global Cfg passphrase with a specific | String | None |
+| | | passphrase for encrypting created SSL keys. | | |
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+| ``sslca`` | ``category`` | Override the global Cfg category with a specific | String | None |
+| | | category for created SSL keys and certs. | | |
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+| ``sslca_*`` | ``config`` | Path to the openssl config for the CA | String | None |
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+| ``sslca_*`` | ``passphrase`` | Passphrase for the CA private key | String | None |
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+| ``sslca_*`` | ``chaincert`` | Path to the SSL chaining certificate for verification | String | None |
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+| ``sslca_*`` | ``root_ca`` | Whether or not ``<chaincert>`` is a root CA (as | Boolean | False |
+| | | opposed to an intermediate cert) | | |
++-------------+----------------+---------------------------------------------------------+-----------------------+------------+
+
+See :ref:`server-encryption` for more details on encryption in Bcfg2
+in general.
diff --git a/doc/server/plugins/generators/sslca.txt b/doc/server/plugins/generators/sslca.txt
deleted file mode 100644
index 2a7e3ecad..000000000
--- a/doc/server/plugins/generators/sslca.txt
+++ /dev/null
@@ -1,361 +0,0 @@
-.. -*- mode: rst -*-
-
-.. _server-plugins-generators-sslca:
-
-=====
-SSLCA
-=====
-
-SSLCA is a generator plugin designed to handle creation of SSL private
-keys and certificates on request.
-
-Borrowing ideas from :ref:`server-plugins-generators-cfg-genshi` and
-the :ref:`server-plugins-generators-sshbase` plugin, SSLCA automates
-the generation of SSL certificates by allowing you to specify key and
-certificate definitions. Then, when a client requests a Path that
-contains such a definition within the SSLCA repository, the matching
-key/cert is generated, and stored in a hostfile in the repo so that
-subsequent requests do not result in repeated key/cert recreation. In
-the event that a new key or cert is needed, the offending hostfile can
-simply be removed from the repository, and the next time that host
-checks in, a new file will be created. If that file happens to be the
-key, any dependent certificates will also be regenerated.
-
-.. _getting-started:
-
-Getting started
-===============
-
-In order to use SSLCA, you must first have at least one CA configured
-on your system. For details on setting up your own OpenSSL based CA,
-please see http://www.openssl.org/docs/apps/ca.html for details of the
-suggested directory layout and configuration directives.
-
-For SSLCA to work, the openssl.cnf (or other configuration file) for
-that CA must contain full (not relative) paths.
-
-#. Add SSLCA to the **plugins** line in ``/etc/bcfg2.conf`` and
- restart the server -- This enabled the SSLCA plugin on the Bcfg2
- server.
-
-#. Add a section to your ``/etc/bcfg2.conf`` called ``sslca_foo``,
- replacing foo with the name you wish to give your CA so you can
- reference it in certificate definitions.
-
-#. Under that section, add an entry for ``config`` that gives the
- location of the openssl configuration file for your CA.
-
-#. If necessary, add an entry for ``passphrase`` containing the
- passphrase for the CA's private key. We store this in
- ``/etc/bcfg2.conf`` as the permissions on that file should have it
- only readable by the bcfg2 user. If no passphrase is entry exists,
- it is assumed that the private key is stored unencrypted.
-
-#. Optionally, Add an entry ``chaincert`` that points to the location
- of your ssl chaining certificate. This is used when preexisting
- certifcate hostfiles are found, so that they can be validated and
- only regenerated if they no longer meet the specification. If
- you're using a self signing CA this would be the CA cert that you
- generated. If the chain cert is a root CA cert (e.g., if it is a
- self-signing CA), also add an entry ``root_ca = true``. If
- ``chaincert`` is omitted, certificate verification will not be
- performed.
-
-#. Once all this is done, you should have a section in your
- ``/etc/bcfg2.conf`` that looks similar to the following::
-
- [sslca_default]
- config = /etc/pki/CA/openssl.cnf
- passphrase = youReallyThinkIdShareThis?
- chaincert = /etc/pki/CA/chaincert.crt
- root_ca = true
-
-#. You are now ready to create key and certificate definitions. For
- this example we'll assume you've added Path entries for the key,
- ``/etc/pki/tls/private/localhost.key``, and the certificate,
- ``/etc/pki/tls/certs/localhost.crt`` to a bundle or base.
-
-#. Defining a key or certificate is similar to defining a Cfg file.
- Under your Bcfg2's ``SSLCA/`` directory, create the directory
- structure to match the path to your key. In this case this would be
- something like
- ``/var/lib/bcfg2/SSLCA/etc/pki/tls/private/localhost.key``.
-
-#. Within that directory, create a `key.xml`_ file containing the
- following:
-
- .. code-block:: xml
-
- <KeyInfo>
- <Key type="rsa" bits="2048" />
- </KeyInfo>
-
-#. This will cause the generation of an 2048 bit RSA key when a client
- requests that Path. Alternatively you can specify ``dsa`` as the
- keytype, or a different number of bits.
-
-#. Similarly, create the matching directory structure for the
- certificate path, and a `cert.xml`_ containing the following:
-
- .. code-block:: xml
-
- <CertInfo>
- <Cert format="pem" key="/etc/pki/tls/private/localhost.key"
- ca="default" days="365" c="US" l="New York" st="New York"
- o="Your Company Name" />
- </CertInfo>
-
-#. When a client requests the cert path, a certificate will be
- generated using the key hostfile at the specified key location,
- using the CA matching the ca attribute. ie. ca="default" will match
- [sslca_default] in your ``/etc/bcfg2.conf``
-
-.. _sslca-configuration:
-
-Configuration
-=============
-
-bcfg2.conf
-----------
-
-``bcfg2.conf`` contains miscellaneous configuration options for the
-SSLCA plugin. These are described in some detail above in
-`getting-started`, but are also enumerated here as a reference. Any
-booleans in the config file accept the values "1", "yes", "true", and
-"on" for True, and "0", "no", "false", and "off" for False.
-
-Each directive below should appear at most once in each
-``[sslca_<name>]`` section. The following directives are understood:
-
-+--------------+------------------------------------------+---------+---------+
-| Name | Description | Values | Default |
-+==============+==========================================+=========+=========+
-| config | Path to the openssl config for the CA | String | None |
-+--------------+------------------------------------------+---------+---------+
-| passphrase | Passphrase for the CA private key | String | None |
-+--------------+------------------------------------------+---------+---------+
-| chaincert | Path to the SSL chaining certificate for | String | None |
-| | verification | | |
-+--------------+------------------------------------------+---------+---------+
-| root_ca | Whether or not ``<chaincert>`` is a root | Boolean | false |
-| | CA (as opposed to an intermediate cert) | | |
-+--------------+------------------------------------------+---------+---------+
-
-Only ``config`` is required.
-
-cert.xml
---------
-
-.. xml:schema:: sslca-cert.xsd
- :linktotype:
- :inlinetypes: CertType
-
-Example
-^^^^^^^
-
-.. code-block:: xml
-
- <CertInfo>
- <subjectAltName>test.example.com</subjectAltName>
- <Group name="apache">
- <Cert key="/etc/pki/tls/private/foo.key" days="730"/>
- </Group>
- <Group name="nginx">
- <Cert key="/etc/pki/tls/private/foo.key" days="730"
- append_chain="true"/>
- </Group>
- </CertInfo>
-
-key.xml
--------
-
-.. xml:schema:: sslca-key.xsd
- :linktotype:
- :inlinetypes: KeyType
-
-Example
-^^^^^^^
-
-.. code-block:: xml
-
- <KeyInfo>
- <Group name="fast">
- <Key type="rsa" bits="1024"/>
- </Group>
- <Group name="secure">
- <Key type="rsa" bits="4096"/>
- </Group>
- </KeyInfo>
-
-Automated Bcfg2 SSL Authentication
-==================================
-
-This section describes one possible scenario for automating ssl
-certificate generation and distribution for bcfg2 client/server
-communication using SSLCA. The process involves configuring a
-certificate authority (CA), generating the CA cert and key pair,
-configuring the bcfg2 SSLCA plugin and a Bundle to use the SSLCA
-generated certs to authenticate the bcfg2 client and server.
-
-OpenSSL CA
-----------
-
-If you already have a SSL CA available you can skip this section,
-otherwise you can easily build one on the server using openssl. The
-paths should be adjusted to suite your preferences.
-
-#. Prepare the directories and files::
-
- mkdir -p /etc/pki/CA/newcerts
- mkdir /etc/pki/CA/crl
- echo '01' > /etc/pki/CA/serial
- touch /etc/pki/CA/index.txt
- touch /etc/pki/CA/crlnumber
-
-#. Edit the ``openssl.cnf`` config file, and in the **[ CA_default ]**
- section adjust the following parameters::
-
- dir = /etc/pki # Where everything is kept
- certs = /etc/pki/CA/certs # Where the issued certs are kept
- database = /etc/pki/CA/index.txt # database index file.
- new_certs_dir = /etc/pki/CA/newcerts # default place for new certs.
- certificate = /etc/pki/CA/certs/bcfg2ca.crt # The CA certificate
- serial = /etc/pki/CA/serial # The current serial number
- crl_dir = /etc/pki/CA/crl # Where the issued crl are kept
- crlnumber = /etc/pki/CA/crlnumber # the current crl number
- crl = /etc/pki/CA/crl.pem # The current CRL
- private_key = /etc/pki/CA/private/bcfg2ca.key # The private key
-
-#. Create the CA root certificate and key pair. You'll be asked to
- supply a passphrase, and some organizational info. The most
- important bit is **Common Name** which you should set to be the
- hostname of your bcfg2 server that your clients will see when doing
- a reverse DNS query on it's ip address.::
-
- openssl req -new -x509 -extensions v3_ca -keyout bcfg2ca.key \
- -out bcfg2ca.crt -days 3650
-
-#. Move the generated cert and key to the locations specified in
- ``openssl.cnf``::
-
- mv bcfg2ca.key /etc/pki/CA/private/
- mv bcfg2ca.crt /etc/pki/CA/certs/
-
-Your self-signing CA is now ready to use.
-
-Bcfg2
------
-
-SSLCA
-^^^^^
-
-The SSLCA plugin was not designed specifically to manage bcfg2
-client/server communication though it is certainly able to provide
-certificate generation and management services for that
-purpose. You'll need to configure the **SSLCA** plugin to serve the
-key, and certificate paths that we will define later in our client's
-``bcfg2.conf`` file.
-
-The rest of these instructions will assume that you've configured the
-**SSLCA** plugin as described above and that the files
-``SSLCA/etc/pki/tls/certs/bcfg2client.crt/cert.xml`` and
-``SSLCA/etc/pki/tls/private/bcfg2client.key/key.xml`` represent the
-cert and key paths you want generated for SSL auth.
-
-Client Bundle
-^^^^^^^^^^^^^
-
-To automate the process of generating and distributing certs to the
-clients we need define at least the Cert and Key paths served by the
-SSLCA plugin, as well as the ca certificate path in a Bundle. For
-example:
-
-.. code-block:: xml
-
- <Path name='/etc/pki/tls/certs/bcfg2ca.crt'/>
- <Path name='/etc/pki/tls/bcfg2client.crt'/>
- <Path name='/etc/pki/tls/private/bcfg2client.key'/>
-
-Here's a more complete example bcfg2-client bundle:
-
-.. code-block:: xml
-
- <Bundle>
- <Path name='/etc/bcfg2.conf'/>
- <Path name='/etc/cron.d/bcfg2-client'/>
- <Package name='bcfg2'/>
- <Service name='bcfg2'/>
- <Group name='rpm'>
- <Path name='/etc/sysconfig/bcfg2'/>
- <Path name='/etc/pki/tls/certs/bcfg2ca.crt'/>
- <Path name='/etc/pki/tls/certs/bcfg2client.crt'/>
- <Path name='/etc/pki/tls/private/bcfg2client.key'/>
- </Group>
- <Group name='deb'>
- <Path name='/etc/default/bcfg2' altsrc='/etc/sysconfig/bcfg2'/>
- <Path name='/etc/ssl/certs/bcfg2ca.crt' altsrc='/etc/pki/tls/certs/bcfg2ca.crt'/>
- <Path name='/etc/ssl/certs/bcfg2client.crt' altsrc='/etc/pki/tls/certs/bcfg2client.crt'/>
- <Path name='/etc/ssl/private/bcfg2client.key' altsrc='/etc/pki/tls/private/bcfg2client.key'/>
- </Group>
- </Bundle>
-
-In the above example we told Bcfg2 that it also needs to serve
-``/etc/bcfg2.conf``. This is optional but convenient.
-
-The ``bcfg2.conf`` client config needs at least 5 parameters set for
-SSL auth.
-
-#. ``key`` : This is the host specific key that SSLCA will generate.
-#. ``certificate`` : This is the host specific cert that SSLCA will
- generate.
-#. ``ca`` : This is a copy of your CA certificate. Not generated by
- SSLCA.
-#. ``user`` : Usually set to fqdn of client. This *shouldn't* be
- required but is as of 1.3.0. See:
- http://trac.mcs.anl.gov/projects/bcfg2/ticket/1019
-#. ``password`` : Set to arbitrary string when using certificate
- auth. This also *shouldn't* be required. See:
- http://trac.mcs.anl.gov/projects/bcfg2/ticket/1019
-
-Here's what a functional **[communication]** section in a
-``bcfg2.conf`` genshi template for clients might look like.::
-
- [communication]
- protocol = xmlrpc/ssl
- {% if metadata.uuid != None %}\
- user = ${metadata.uuid}
- {% end %}\
- password = DUMMYPASSWORDFORCERTAUTH
- {% choose %}\
- {% when 'rpm' in metadata.groups %}\
- certificate = /etc/pki/tls/certs/bcfg2client.crt
- key = /etc/pki/tls/private/bcfg2client.key
- ca = /etc/pki/tls/certs/bcfg2ca.crt
- {% end %}\
- {% when 'deb' in metadata.groups %}\
- certificate = /etc/ssl/certs/bcfg2client.crt
- key = /etc/ssl/private/bcfg2client.key
- ca = /etc/ssl/certs/bcfg2ca.crt
- {% end %}\
- {% end %}\
-
-As a client will not be able to authenticate with certificates it does
-not yet posses we need to overcome the chicken and egg scenario the
-first time we try to connect such a client to the server. We can do so
-using password based auth to boot strap the client manually specifying
-all the relevant auth parameters like so::
-
- bcfg2 -qv -S https://fqdn.of.bcfg2-server:6789 -u fqdn.of.client \
- -x SUPER_SECRET_PASSWORD
-
-If all goes well the client should recieve a freshly generated key and
-cert and you should be able to run ``bcfg2`` again without specifying
-the connection parameters.
-
-If you do run into problems you may want to review
-:ref:`appendix-guides-authentication`.
-
-TODO
-====
-
-#. Add generation of pkcs12 format certs
diff --git a/doc/server/plugins/structures/bundler/bcfg2.txt b/doc/server/plugins/structures/bundler/bcfg2.txt
index 7465f15cb..0fd0a3fdf 100644
--- a/doc/server/plugins/structures/bundler/bcfg2.txt
+++ b/doc/server/plugins/structures/bundler/bcfg2.txt
@@ -52,7 +52,7 @@ entries between Bundler and Rules.
<BoundPOSIXUser name='bcfg2' shell='/sbin/nologin' gecos='Bcfg2 User'/>
<Path name="/home/bcfg2/.ssh/id_rsa"/>
- <!-- SSLCA setup -->
+ <!-- SSL CA setup -->
<BoundPath name="/etc/pki/CA" type="directory" important="true"
owner="bcfg2" group="bcfg2" mode="755"/>
<BoundPath name="/etc/pki/CA/crl" type="directory" owner="bcfg2"
@@ -85,4 +85,3 @@ entries between Bundler and Rules.
name="create-CA-crlnumber" timing="post" when="always" status="check"
command="[ -e /etc/pki/CA/crlnumber ] || touch /etc/pki/CA/crlnumber"/>
</Bundle>
-
diff --git a/doc/server/xml-common.txt b/doc/server/xml-common.txt
index 073e409b2..fad054213 100644
--- a/doc/server/xml-common.txt
+++ b/doc/server/xml-common.txt
@@ -324,60 +324,60 @@ tag, described above, if a glob may potentially find no files.
Feature Matrix
==============
-+-------------------------------------------------+--------------+--------+------------+------------+
-| File | Group/Client | Genshi | Encryption | XInclude |
-+=================================================+==============+========+============+============+
-| :ref:`ACL ip.xml <server-plugins-misc-acl>` | No | No | No | Yes |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`ACL metadata.xml | Yes | Yes | Yes | Yes |
-| <server-plugins-misc-acl>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`Bundler | Yes | Yes | Yes | Yes |
-| <server-plugins-structures-bundler-index>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`info.xml <server-info>` | Yes [#f1]_ | Yes | Yes | Yes |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`privkey.xml and pubkey.xml | Yes | Yes | Yes | Yes [#f2]_ |
-| <server-plugins-generators-cfg-sshkeys>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`authorizedkeys.xml | Yes | Yes | Yes | Yes |
-| <server-plugins-generators-cfg-sshkeys>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`Decisions | Yes | Yes | Yes | Yes |
-| <server-plugins-generators-decisions>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`Defaults | Yes | Yes | Yes | Yes |
-| <server-plugins-structures-defaults>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`FileProbes | Yes | Yes | Yes | Yes |
-| <server-plugins-probes-fileprobes>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`GroupPatterns | No | No | No | Yes |
-| <server-plugins-grouping-grouppatterns>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`Metadata clients.xml | No | No | No | Yes |
-| <server-plugins-grouping-metadata-clients-xml>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`Metadata groups.xml | Yes [#f3]_ | No | No | Yes |
-| <server-plugins-grouping-metadata-groups-xml>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`NagiosGen | Yes | Yes | Yes | Yes |
-| <server-plugins-generators-nagiosgen>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`Packages | Yes | Yes | Yes | Yes |
-| <server-plugins-generators-packages>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`Pkgmgr | Yes | No | No | No |
-| <server-plugins-generators-pkgmgr>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`Properties | Yes [#f4]_ | Yes | Yes | Yes |
-| <server-plugins-connectors-properties>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`Rules <server-plugins-generators-rules>` | Yes | Yes | Yes | Yes |
-+-------------------------------------------------+--------------+--------+------------+------------+
-| :ref:`SSLCA cert.xml and key.xml | Yes | Yes | Yes | Yes |
-| <server-plugins-generators-sslca>` | | | | |
-+-------------------------------------------------+--------------+--------+------------+------------+
++---------------------------------------------------+--------------+--------+------------+------------+
+| File | Group/Client | Genshi | Encryption | XInclude |
++===================================================+==============+========+============+============+
+| :ref:`ACL ip.xml <server-plugins-misc-acl>` | No | No | No | Yes |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`ACL metadata.xml | Yes | Yes | Yes | Yes |
+| <server-plugins-misc-acl>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`Bundler | Yes | Yes | Yes | Yes |
+| <server-plugins-structures-bundler-index>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`info.xml <server-info>` | Yes [#f1]_ | Yes | Yes | Yes |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`privkey.xml and pubkey.xml | Yes | Yes | Yes | Yes [#f2]_ |
+| <server-plugins-generators-cfg-sshkeys>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`authorizedkeys.xml | Yes | Yes | Yes | Yes |
+| <server-plugins-generators-cfg-sshkeys>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`sslcert.xml and sslkey.xml | Yes | Yes | Yes | Yes |
+| <server-plugins-generators-cfg-ssl-certificates>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`Decisions | Yes | Yes | Yes | Yes |
+| <server-plugins-generators-decisions>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`Defaults | Yes | Yes | Yes | Yes |
+| <server-plugins-structures-defaults>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`FileProbes | Yes | Yes | Yes | Yes |
+| <server-plugins-probes-fileprobes>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`GroupPatterns | No | No | No | Yes |
+| <server-plugins-grouping-grouppatterns>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`Metadata clients.xml | No | No | No | Yes |
+| <server-plugins-grouping-metadata-clients-xml>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`Metadata groups.xml | Yes [#f3]_ | No | No | Yes |
+| <server-plugins-grouping-metadata-groups-xml>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`NagiosGen | Yes | Yes | Yes | Yes |
+| <server-plugins-generators-nagiosgen>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`Packages | Yes | Yes | Yes | Yes |
+| <server-plugins-generators-packages>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`Pkgmgr | Yes | No | No | No |
+| <server-plugins-generators-pkgmgr>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`Properties | Yes [#f4]_ | Yes | Yes | Yes |
+| <server-plugins-connectors-properties>` | | | | |
++---------------------------------------------------+--------------+--------+------------+------------+
+| :ref:`Rules <server-plugins-generators-rules>` | Yes | Yes | Yes | Yes |
++---------------------------------------------------+--------------+--------+------------+------------+
.. rubric:: Footnotes