<?xml version='1.0'?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
	"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">

<refentry id="p11-kit">

<refentryinfo>
	<title>p11-kit</title>
	<productname>p11-kit</productname>
	<authorgroup>
		<author>
			<contrib>Maintainer</contrib>
			<firstname>Stef</firstname>
			<surname>Walter</surname>
			<email>stef@thewalter.net</email>
		</author>
	</authorgroup>
</refentryinfo>

<refmeta>
	<refentrytitle>p11-kit</refentrytitle>
	<manvolnum>8</manvolnum>
	<refmiscinfo class="manual">System Commands</refmiscinfo>
</refmeta>

<refnamediv>
	<refname>p11-kit</refname>
	<refpurpose>Tool for operating on configured PKCS#11 modules</refpurpose>
</refnamediv>

<refsynopsisdiv>
	<cmdsynopsis>
		<command>p11-kit list-modules</command>
	</cmdsynopsis>
	<cmdsynopsis>
		<command>p11-kit extract</command> <arg choice="plain">--filter=&lt;what&gt;</arg>
			<arg choice="plain">--format=&lt;type&gt;</arg> /path/to/destination
	</cmdsynopsis>
</refsynopsisdiv>

<refsect1>
	<title>Description</title>
	<para><command>p11-kit</command> is a command line tool that
	can be used to perform operations on PKCS#11 modules configured on the
	system.</para>

	<para>See the various sub commands below. The following global options
	can be used:</para>

	<variablelist>
		<varlistentry>
			<term><option>-v, --verbose</option></term>
			<listitem><para>Run in verbose mode with debug
			output.</para></listitem>
		</varlistentry>
		<varlistentry>
			<term><option>-q, --quiet</option></term>
			<listitem><para>Run in quiet mode without warning or
			failure messages.</para></listitem>
		</varlistentry>
	</variablelist>

</refsect1>

<refsect1>
	<title>List Modules</title>

	<para>List system configured PKCS#11 modules.</para>

<programlisting>
$ p11-kit list-modules
</programlisting>

	<para>The modules, information about them and the tokens present in
	the PKCS#11 modules will be displayed.</para>

</refsect1>

<refsect1>
	<title>Extract</title>

	<para>Extract certificates from configured PKCS#11 modules.</para>

<programlisting>
$ p11-kit extract --format=x509-directory --filter=ca-certificates /path/to/directory
</programlisting>

	<para>You can specify the following options to control what to extract.
	The <option>--filter</option> and <option>--format</option> arguments
	should be specified. By default this command will not overwrite the
	destination file or directory.</para>

	<variablelist>
		<varlistentry>
			<term><option>--comment</option></term>
			<listitem><para>Add identifying comments to PEM bundle output files
			before each certificate.</para></listitem>
		</varlistentry>
		<varlistentry>
			<term><option>--filter=&lt;what&gt;</option></term>
			<listitem>
			<para>Specifies what certificates to extract. You can specify the following values:
			<variablelist>
				<varlistentry>
					<term><option>ca-anchors</option></term>
					<listitem><para>Certificate anchors (default)</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>trust-policy</option></term>
					<listitem><para>Anchors and blacklist</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>blacklist</option></term>
					<listitem><para>Blacklisted certificates</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>certificates</option></term>
					<listitem><para>All certificates</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>pkcs11:object=xx</option></term>
					<listitem><para>A PKCS#11 URI</para></listitem>
				</varlistentry>
			</variablelist>
			</para>

			<para>If an output format is chosen that cannot support type what has been
			specified by the filter, a message will be printed.</para>

			<para>None of the available formats support storage of blacklist entries
			that do not contain a full certificate. Thus any certificates blacklisted by
			their issuer and serial number alone, are not included in the extracted
			blacklist.</para>
			</listitem>
		</varlistentry>
		<varlistentry>
			<term><option>--format=&lt;type&gt;</option></term>
			<listitem><para>The format of the destination file or directory.
			You can specify one of the following values:
			<variablelist>
				<varlistentry>
					<term><option>x509-file</option></term>
					<listitem><para>DER X.509 certificate file</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>x509-directory</option></term>
					<listitem><para>directory of X.509 certificates</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>pem-bundle</option></term>
					<listitem><para>File containing one or more certificate PEM blocks</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>pem-directory</option></term>
					<listitem><para>Directory PEM files each containing one certifiacte</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>openssl-bundle</option></term>
					<listitem><para>OpenSSL specific PEM bundle of certificates</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>openssl-directory</option></term>
					<listitem><para>Directory of OpenSSL specific PEM files</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>java-cacerts</option></term>
					<listitem><para>Java keystore 'cacerts' certificate bundle</para></listitem>
				</varlistentry>
			</variablelist>
			</para></listitem>
		</varlistentry>
		<varlistentry>
			<term><option>--overwrite</option></term>
			<listitem><para>Overwrite output file or directory.</para></listitem>
		</varlistentry>
		<varlistentry>
			<term><option>--purpose=&lt;usage&gt;</option></term>
			<listitem><para>Limit to certificates usable for the given purpose
			You can specify one of the following values:
			<variablelist>
				<varlistentry>
					<term><option>server-auth</option></term>
					<listitem><para>For authenticating servers</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>client-auth</option></term>
					<listitem><para>For authenticating clients</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>email</option></term>
					<listitem><para>For email protection</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>code-signing</option></term>
					<listitem><para>For authenticated signed code</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><option>1.2.3.4.5...</option></term>
					<listitem><para>An arbitrary purpose OID</para></listitem>
				</varlistentry>
			</variablelist>
			</para></listitem>
		</varlistentry>
	</variablelist>

</refsect1>

<refsect1>
	<title>Extract Trust</title>

	<para>Extract standard trust information files.</para>

<programlisting>
$ p11-kit extract-trust
</programlisting>

	<para>OpenSSL, GnuTLS and Java cannot currently read trust information
	directly from the trust policy module. This command extracts trust
	information such as certificate anchors for use by these libraries.</para>

	<para>What this command does, and where it extracts the files is
	distribution or site specific. Packagers or administrators are expected
	customize this command.</para>

</refsect1>

<refsect1>
  <title>Bugs</title>
  <para>
    Please send bug reports to either the distribution bug tracker
    or the upstream bug tracker at
    <ulink url="https://bugs.freedesktop.org/enter_bug.cgi?product=p11-glue&amp;component=p11-kit">https://bugs.freedesktop.org/enter_bug.cgi?product=p11-glue&amp;component=p11-kit</ulink>.
  </para>
</refsect1>

<refsect1>
  <title>See also</title>
    <simplelist type="inline">
        <member><citerefentry><refentrytitle>pkcs11.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></member>
    </simplelist>
    <para>
    Further details available in the p11-kit online documentation at
    <ulink url="http://p11-glue.freedesktop.org/doc/p11-kit/">http://p11-glue.freedesktop.org/doc/p11-kit/</ulink>.
  </para>
</refsect1>

</refentry>