\"      $NetBSD: certctl.8,v 1.3 2023/10/11 15:28:05 riastradh Exp $
\"
\" Copyright (c) 2023 The NetBSD Foundation, Inc.
\" All rights reserved.
\"
\" Redistribution and use in source and binary forms, with or without
\" modification, are permitted provided that the following conditions
\" are met:
\" 1. Redistributions of source code must retain the above copyright
\"    notice, this list of conditions and the following disclaimer.
\" 2. Redistributions in binary form must reproduce the above copyright
\"    notice, this list of conditions and the following disclaimer in the
\"    documentation and/or other materials provided with the distribution.
\"
\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
\" POSSIBILITY OF SUCH DAMAGE.
\"
Dd August 16, 2023
Dt CERTCTL 8
Os
\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Sh NAME
Nm certctl
Nd configure OpenSSL certificate trust anchors
\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Sh SYNOPSIS
Nm
Op Fl nv
Op Fl C Ar config
Op Fl c Ar certsdir
Op Fl u Ar distrustdir
Ar cmd
Op Ar args...
\""""""""""""""""""
Nm
Oo Ar options Oc Cm list
Nm
Oo Ar options Oc Cm rehash
Nm
Oo Ar options Oc Cm trust Ar cert
Nm
Oo Ar options Oc Cm untrust Ar cert
Nm
Oo Ar options Oc Cm untrusted
\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Sh DESCRIPTION
The
Nm
utility manages certificates used by OpenSSL-based applications as
trust anchors for certificate validation in TLS or other purposes,
for example by
Xr ftp 1
in HTTPS.
Nm
allows configuring the set of certificates and persistently excluding
individual certificates.
Pp
For trust anchors to validate TLS certificates, OpenSSL applications
typically use a directory at
Pa /etc/openssl/certs
of hashed certificates in PEM format, with names like
Pa "3513523f.0"
used for lookup; see
Xr openssl_rehash 1 .
Pp
Nm
scans all directories in the certificate search path specified by the
configuration file
Ar config
Pq default: Pa /etc/openssl/certs.conf
for files called
Pa *.cer ,
Pa *.crt ,
or
Pa *.pem
in PEM format, and keeps
Ar certsdir
Pq default: Pa /etc/openssl/certs
populated with:
Bl -dash
It
symlinks to the original files in the certificate search path, for
applications that scan a directory for all files matching
Pa *.cer ,
Pa *.crt ,
or
Pa *.pem ;
It
hashed symlinks as in
Xr openssl_rehash 1 ; and
It
a single-file bundle
Pa ca-certificates.crt
concatenating all the certificates in PEM format.
El
Pp
Nm
will exclude from
Ar certsdir
any certificates that have been marked untrustworthy with
Nm Cm untrust ,
which are persistently maintained in the private state directory
Ar distrustdir
Pq default: Pa /etc/openssl/untrusted .
Pp
Nm
treats
Ar config
and
Ar distrustdir
as configuration, and treats
Ar certsdir
strictly as a cache that can be safely deleted and rebuilt with
Nm Cm rehash .
Nm
can also be instructed not to touch
Ar certsdir
at all by putting
Cm manual
in
Ar config .
\""""""""""""""""""""""""""""""""""""""
Ss Commands
Bl -tag -width Cm
\""""""""""""""""""
It Cm list
List absolute paths to trusted certificates.
Nm Cm rehash
will populate
Ar certsdir
with these.
Paths are printed one per line, encoded in
Xr vis 1
format to escape any shell metacharacters.
\""""""""""""""""""
It Cm rehash
Populate
Ar certsdir
with all trusted certificates, excluding any from
Nm Cm untrust .
\""""""""""""""""""
It Cm trust Ar cert
Allow
Ar cert
to be included in
Ar certsdir
if it is in the certificate search path, and rehash to make it
effective immediately.
In other words, reverse the persistent effect of
Nm Cm untrust Ar cert .
Pp
Ar cert
must be the full absolute path to a certificate that has been excluded
by
Nm Cm untrust Ar cert .
Pp
This does not add a new certificate which is not in the search path.
To do that, you can create a directory to hold it and put that
directory in the search path.
\""""""""""""""""""
It Cm untrust Ar cert
Persistently prevent
Ar cert
from being included in
Ar certsdir ,
and rehash to make it effective immediately.
Pp
Ar cert
must be the full absolute path to a certificate that is in the
certificate search path.
\""""""""""""""""""
It Cm untrusted
List absolute paths to certificates that have been excluded by
Nm Cm untrust .
Nm Cm rehash
will not put these in
Ar certsdir .
Paths are printed one per line, encoded in
Xr vis 1
format to escape any shell metacharacters.
\""""""""""""""""""
El
\""""""""""""""""""""""""""""""""""""""
Ss Configuration file
The configuration file is a plain text file of lines separated by
Tn US-ASCII
line feeds.
Pp
Pp
The first line must be:
Dl netbsd-certctl 20230816
Pp
Lines with only whitespace, or whitespace followed by the comment
character
Ql #
are ignored.
Each line has a directive and arguments separated by whitespace, and
may be extended by
Ql \e
to continuation lines.
Bl -tag -width Cm
\""""""""""""""""""
It Cm path Ar dir
Add
Ar dir
to the certificate search path.
Ar dir
must be an absolute pathname,
Xr vis 3 Ns -encoded
if it has any characters outside the class
Ql "a-zA-Z0-9,.:=/+-" .
Pp
All certificates must have unique base names across all directories
in the certificate search path.
\""""""""""""""""""
It Cm manual
Manual override.
If specified,
Nm
will
Em not
modify
Ar certsdir ,
but may still check consistency of the configuration when run, and
Nm Cm untrust
and
Nm Cm trust
will still update
Ar distrustdir .
\""""""""""""""""""
El
\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Sh FILES
Bl -tag -width Pa
It Pa /etc/openssl/certs
Default directory of hashed TLS CA certificates.
It Pa /etc/openssl/certs/ca-certificates.crt
Default single-file TLS CA certificate bundle.
It Pa /etc/openssl/certs.conf
Default configuration file for TLS CA certificates.
It Pa /etc/openssl/untrusted
Default
Ar distrustdir
directory of excluded TLS CA certificates.
It Pa /usr/share/certs/mozilla/all
All root CA certificates published by Mozilla, including untrustworthy
certificates.
It Pa /usr/share/certs/mozilla/code
All root CA certificates published by Mozilla for use in code-signing.
It Pa /usr/share/certs/mozilla/email
All root CA certificates published by Mozilla for use in email
authentication.
It Pa /usr/share/certs/mozilla/server
All root CA certificates published by Mozilla for use in TLS server
authentication.
El
\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Sh EXAMPLES
Example configuration file
Pq Pa /etc/openssl/certs.conf :
Bd -literal -offset indent
netbsd-certctl 20230816

# Blank lines and comments are ignored.
# Comments begin with a `#' sign.

# Gather certificates from files called *.cer, *.crt, and *.pem
# under these directories.
path /usr/share/certs/mozilla/server
path /usr/pkg/share/chromium-cacerts
path /etc/openssl/certs.local

# If the next line is uncommented, certctl(8) will decline to
# touch /etc/openssl/certs.
#manual
Ed
Pp
Exclude a certificate:
Bd -literal -offset indent
$ certctl untrust /usr/share/certs/mozilla/server/GTS_Root_R1.pem
Ed
Pp
There is no need to run
Nm Cm rehash
explicitly after
Nm Cm untrust ,
but if you do, the setting will persist.
Pp
Rebuild the hashed certificate cache at
Pa /etc/myapplication/certs
from
Pa /etc/myapplication/certs.conf
and
Pa /etc/myapplication/untrusted :
Bd -literal -offset indent
$ certctl -c /etc/myapplication/certs \e
       -C /etc/myapplication/certs.conf \e
       -u /etc/myapplication/untrusted
Ed
\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Sh DIAGNOSTICS
Ex -std
\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Sh COMPATIBILITY
The
Nm
utility is mostly compatible with a utility of the same name in
Fx .
Differences:
Bl -enum
\""""""""""""""""""
It
Fx Nm
supports destdir/metalog handling;
Nx Nm
does not.
\""""""""""""""""""
It
Fx Nm
treats
Pa /etc/ssl/certs
and
Pa /etc/ssl/untrusted
both as configuration
Em and
as caches;
Nx Nm
treats
Pa /etc/openssl/certs.conf
and
Pa /etc/openssl/untrusted
as configuration, and treats
Pa /etc/openssl/certs
strictly as a cache.
Fx Nm
will forget any
Nm Cm untrust
settings on
Nm Cm rehash ,
but
Nx Nm
will remember them.
\""""""""""""""""""
It
Fx Nm
takes configuration through environment variables;
Nx Nm
takes configuration through a file and command-line arguments.
El
\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Sh SEE ALSO
Xr openssl 1 ,
Xr openssl_rehash 1
\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Sh HISTORY
Nm
first appeared in
Nx 10.0 .
A utility of the same name previously appeared in
Fx 12.2 .