<?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-Management-Managing-Truststores">
    <title>Truststores</title>
    <para>
        <link linkend="Java-Broker-Concepts-Truststores">Truststores</link>
        have a number of roles within
        the Broker.
        <itemizedlist>
            <listitem>
                <para>A truststore is required by a Port in order to support SSL client authentication.</para>
            </listitem>
            <listitem>
                <para>Truststores have a optional role in end to end message encryption. The Broker acts as a
                    <link xmlns:xlink="http://www.w3.org/1999/xlink"
                          xlink:href="https://en.wikipedia.org/wiki/Key_server_(cryptographic)">
                        Key Server
                    </link>
                    so that publishing applications have convenient access to recipient's public keys.
                </para>
            </listitem>
            <listitem>
                <para>Some authentication providers also use a truststore when connecting to authentication systems that
                    are protected by a private issuer
                    SSL certificate.
                </para>
            </listitem>
        </itemizedlist>
    </para>
    <section xml:id="Java-Broker-Management-Managing-Truststores-Types">
        <title>Types</title>
        <para>The following truststore types are supported. <itemizedlist>
                <listitem>
                    <para><emphasis>File Trust Store</emphasis>. This type accepts the standard JKS
                        truststore format understood by Java and Java tools such as <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${oracleKeytool}">keytool</link>.</para>
                </listitem>
                <listitem>
                    <para><emphasis>Non Java Trust Store</emphasis>. A non java trust store accepts key
                        material in PEM and DER file formats. Either a path to the certificate on the server can be specified using the file:// protocol or the certificate can be uploaded with the data:// protocol</para>
                </listitem>
                <listitem>
                    <para><emphasis>Managed Certificate Store</emphasis>. This type accepts key
                        material in PEM and DER file formats. Contrary to the Non Java Trust Store this store allows the user to add multiple certificates and stores them in the broker configuration.</para>
                </listitem>
                <listitem>
                    <para><emphasis>Site Specific Trust Store</emphasis>. This type will download a certificate from the provided SSL/TLS enabled URL. Note that you must specify both the protocol and the port. Example: https://example.com:443</para>
                </listitem>
            </itemizedlist>
        </para>
    </section>
    <section xml:id="Java-Broker-Management-Managing-Truststores-Attributes">
        <title>Attributes</title>
        <para>
            <itemizedlist>
                <listitem>
                    <para><emphasis>Name the truststore</emphasis>. Used to identify the
                        truststore.</para>
                </listitem>
                <listitem>
                    <para><emphasis>Exposed as Message Source</emphasis>. If enabled, the Broker
                        will distribute certificates contained within the trustore to clients.
                        Used by the end to end message encryption feature.</para>
                </listitem>
            </itemizedlist>
        </para>
        <para>The following attributes apply to <emphasis>File Trust Stores</emphasis> only.</para>
        <para>
            <itemizedlist>

                <listitem>
                    <para><emphasis>Path</emphasis>. Path to truststore file</para>
                </listitem>
                <listitem>
                    <para><emphasis>Truststore password</emphasis>. Password used to secure the truststore<important>
                            <para> The password of the certificate used by the Broker <emphasis role="bold">must</emphasis> match the password of the keystore
                                itself. </para>
                        </important></para>
                </listitem>
                <listitem>
                    <para><emphasis>Certificate Alias</emphasis>. An optional way of specifying
                        which certificate the broker should use if the keystore contains multiple
                        entries.</para>
                </listitem>
                <listitem>
                    <para><emphasis>Manager Factory Algorithm</emphasis>. In keystores the have more
                        than one certificate, the alias identifies the certificate to be
                        used.</para>
                </listitem>
                <listitem>
                    <para><emphasis>Key Store Type</emphasis>. Type of Keystore.</para>
                </listitem>
                <listitem>
                    <para><emphasis>Peers only</emphasis>. When "Peers Only" option is selected for
                        the Truststore it will allow authenticate only those clients that present a
                        certificate exactly matching a certificate contained within the Truststore
                        database.</para>
                </listitem>
            </itemizedlist>
        </para>
        <para>The following attributes apply to <emphasis>Non Java Trust Stores</emphasis>
            only.</para>
        <para>
            <itemizedlist>
                <listitem>
                    <para><emphasis>Certificates</emphasis>. The cerificate(s) in DER or PEM
                        format.</para>
                </listitem>
            </itemizedlist>
        </para>
    </section>
    <section xml:id="Java-Broker-Management-Managing-Truststores-Children">
        <title>Children</title>
        <para>None</para>
    </section>
    <section xml:id="Java-Broker-Management-Managing-Truststores-Lifecycle">
        <title>Lifecycle</title>
        <para>Not supported</para>
    </section>
</section>
