<?xml version="1.0"?>
<!--

 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.

-->

<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="Java-Broker-Security-Configuration-Encryption">
  <title>Configuration Encryption</title>
  <para> The Broker is capable of encrypting passwords and other security items stored in the
    Broker's configuration. This is means that items such as keystore/truststore passwords, JDBC
    passwords, and LDAP passwords can be stored in the configure in a form that is difficult to
    read.</para>
  <para>The Broker ships with an encryptor implementation called <literal>AESKeyFile</literal>. This
    uses a securely generated random key of 256bit<footnote><para>Java Cryptography Extension (JCE)
        Unlimited Strength required</para></footnote> to encrypt the secrets stored within a key
    file. Of course, the key itself must be guarded carefully, otherwise the passwords encrypted
    with it may be compromised. For this reason, the Broker ensures that the file's permissions
    allow the file to be read exclusively by the user account used for running the Broker.</para>
  <important>
    <para>If the keyfile is lost or corrupted, the secrets will be irrecoverable.</para>
  </important>
  <section xml:id="Java-Broker-Security-Configuration-Encryption-Configuration">
    <title>Configuration</title>
    <para>The <literal>AESKeyFile</literal> encyptor provider is enabled/disabled via the <link linkend="Java-Broker-Management-Managing-Broker">Broker attributes</link> within the
      Web Management Console.  On enabling the provider, any existing passwords within the
      configuration will be automatically rewritten in the encrypted form.</para>
    <para>Note that passwords stored by the Authentication Providers <link linkend="Java-Broker-Security-PlainPasswordFile-Provider">PlainPasswordFile</link> and.
        <link linkend="Java-Broker-Security-Base64MD5PasswordFile-Provider">PlainPasswordFile</link>
      with the external password files are <emphasis>not</emphasis> encrypted by the key. Use the
      Scram Authentication Managers instead; these make use of the Configuration Encryption when
      storing the users' passwords. </para>
  </section>
  <section xml:id="Java-Broker-Security-Configuration-Encryption-Alternate-Implementations">
    <title>Alternate Implementations</title>
    <para>If the <literal>AESKeyFile</literal> encryptor implementation does not meet the needs of
      the user, perhaps owing to the security standards of their institution, the
        <literal>ConfigurationSecretEncrypter</literal> interface is designed as an extension point.
      Users may implement their own implementation of ConfigurationSecretEncrypter perhaps to employ
      stronger encryption or delegating the storage of the key to an Enterprise Password
      Safe.</para>
  </section>
</section>
