Skip to content

Commit 4a06171

Browse files
committed
Update quickstart and enrollment workflow docs
1 parent 5547112 commit 4a06171

File tree

3 files changed

+111
-53
lines changed

3 files changed

+111
-53
lines changed

doc/index.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ Setup and Configuration
4444
reference/configuration/workflows/certrequest
4545
reference/configuration/workflows/certrevocation
4646
reference/configuration/workflows/crlissuance
47-
reference/configuration/workflows/scep
47+
reference/configuration/workflows/enroll
4848
reference/configuration/workflows/smartcard
4949
reference/tools/openxpkiadm
5050
reference/tools/openxpkictl

doc/quickstart.rst

+38-16
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
Quickstart guide
44
================
55

6+
OpenXPKI is an easy-to-deploy and easy-to-use RA/CA software that makes
7+
handling of certificates easy but nevertheless you should **really**
8+
have some basic knownledge on what a PKI is. If you just want to see
9+
"OpenXPKI in action" for a first impression of the tool, use the
10+
public demo at https://demo.openxpki.org.
11+
612
Support
713
-------
814

@@ -15,13 +21,14 @@ Vagrant
1521

1622
We have a vagrant setup for debian buster. If you have vagrant you can just
1723
checkout the git repo, go to vagrant/debian and run "vagrant up test". Provisioning takes some
18-
minutes and will give you a ready to run OXI install available at http://localhost:8080/openxpki/.
24+
minutes and will give you a ready to run OXI install available at https://localhost:8443/openxpki/.
1925

2026
Docker
2127
------
2228

23-
We also provide a docker image based on the debian packages as well as a docker-compose file, see
24-
https://github.com/openxpki/openxpki-docker.
29+
We also provide a docker image based on the debian packages as well as a
30+
docker-compose file, see https://github.com/openxpki/openxpki-docker.
31+
**Please read the hints in the README if you try this on Windows!**
2532

2633
Debian Builds
2734
-------------
@@ -31,8 +38,8 @@ those running a v2 version we still maintain security and major bug fixes for th
3138

3239
**Packages are for Debian 10 (Buster) / 64bit (arch amd64). The en_US.utf8 locale must be
3340
installed as the translation system will crash otherwise! The packages do NOT work
34-
on Ubuntu or 32bit systems. Community packages for Ubuntu have been
35-
discontinued due to packaging/dependancy problems.**
41+
on Ubuntu or 32bit systems. Packages for SLES/CentOS/RHEL/Ubuntu are available
42+
via subscription**
3643

3744
Start with a debian minimal install, we recommend to add "SSH Server" and "Web Server" in the package selection menu, as this will speed up the install later.
3845

@@ -50,6 +57,8 @@ Add the repository to your source list (buster)::
5057
echo "deb http://packages.openxpki.org/v3/debian/ buster release" > /etc/apt/sources.list.d/openxpki.list
5158
apt update
5259

60+
Please do not disable the installation of "recommend" packages as this will very likely leave you with an unusable system.
61+
5362
As the init script uses mysql as default, but does not force it as a dependency, it is crucial that you have the mysql server and the perl mysql binding installed before you pull the OpenXPKI package::
5463

5564
apt install default-mysql-server libdbd-mysql-perl
@@ -62,16 +71,10 @@ Note, fastcgi module should be enabled explicitly, otherwise, .fcgi file will be
6271

6372
a2enmod fcgid
6473

65-
Some people reported that a2enmod is not available on their system, in this case try to install the apache2.2-common package.
66-
6774
Now install the OpenXPKI core package, session driver and the translation package::
6875

6976
apt install libopenxpki-perl openxpki-cgi-session-driver openxpki-i18n
7077

71-
You should now restart the apache server to activate the new config::
72-
73-
service apache2 restart
74-
7578
use the openxpkiadm command to verify if the system was installed correctly::
7679

7780
openxpkiadm version
@@ -97,7 +100,7 @@ Now, create an empty database and assign a database user::
97100

98101

99102
Please create the empty database schema from the provided schema file. mysql and postgresql
100-
should work out of the box, the oracle schema is goo for testing but needs some extra indices
103+
should work out of the box, the oracle schema is good for testing but needs some extra indices
101104
to perform properly.
102105

103106
Example call when debian packages are installed::
@@ -125,6 +128,9 @@ Here is what you need to do if you *dont* use the sampleconfig script.
125128
#. Create a key/certificate for the internal datavault (ca = false, can be below the ca but can also be self-signed).
126129
#. Create a key/certificate for the scep service (ca = false, can be below the ca but can also be self-signed or from other ca).
127130

131+
OpenXPKI supports NIST and Brainpool ECC curves (as supported by openssl) for the CA certificates, as the Datavault
132+
certificate is used for data encryption it **MUST** use an RSA key!
133+
128134
**Starting with release 3.6 the default config uses the database to store the issuing ca and SCEP tokens -
129135
if you upgrade from an older config version check the new settings in systems/crypto.yaml.**
130136

@@ -243,12 +249,28 @@ An easy check to see if the signer token is working is to create a CRL::
243249
Adding the Webclient
244250
^^^^^^^^^^^^^^^^^^^^
245251

246-
The webclient is included in the core packages. Just open your browser and navigate to *https://yourhost/openxpki/*. You should see the main authentication page. If you get an internal server error, make sure you have the *en_US.utf8* locale installed (``locale -a | grep en_US``)!
252+
The package installs a default configuration for apache but requires that you
253+
provide a tls certificate for the WebUI by yourself. So before you can start
254+
the Webserver you **must** create a TLS certificate, place the key to
255+
`/etc/openxpki/tls/private/openxpki.pem` and the certificate to `/etc/openxpki/tls/endentity/openxpki.crt`.
256+
257+
The default configuration also offers TLS client authentication. Place a copy of
258+
your root certificate in `/etc/openxpki/tls/chain/` and run `c_rehash /etc/openxpki/tls/chain/`
259+
to make it available for chain construction in apache.
260+
261+
You should now be able to start the apache server::
262+
263+
$ service apache2 restart
264+
265+
Navigate your browser to *https://yourhost/openxpki/*. If your browser asks you to present a certificate
266+
for authentication, skip it. You should now see the main authentication page.
247267

248-
You can log in as user with any username/password combination, the operator login has two preconfigured operator accounts raop and raop2 with password openxpki.
268+
You can log in as user with any username/password combination, the operator login has two preconfigured
269+
operator accounts raop and raop2 with password openxpki.
249270

250-
If you only get the "Open Source Trustcenter" banner without a login prompt, check that fcgid is enabled as described above with
251-
(``a2enmod fcgid; service apache2 restart``).
271+
If you only get the "Open Source Trustcenter" banner without a login prompt, check that fcgid is enabled
272+
as described above with (``a2enmod fcgid; service apache2 restart``). If you get an internal server error,
273+
make sure you have the *en_US.utf8* locale installed (``locale -a | grep en_US``)!
252274

253275
Testdrive
254276
^^^^^^^^^

doc/reference/configuration/workflows/scep.rst doc/reference/configuration/workflows/enroll.rst

+72-36
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
SCEP Workflow
2-
=============
1+
Enrollment Workflow
2+
====================
33

4-
Before you can use the SCEP subsystem, you need to enable the SCEP Server
5-
in the general configuration. This section explains the business logic and
6-
options for the enrollment workflow.
4+
The enrollment workflow is used by the SCEP, EST and RPC interface. The
5+
details how to connect the workflow to the API differ but the general
6+
configuration and operational modes are the same for all three subsystems.
77

88
Operational Modes
99
-----------------
@@ -23,6 +23,8 @@ match the subject of the signer certificate (which is a self-signed
2323
certificate in this case). Especially Ciso ASA fails here as the certificate
2424
subject does not match the request subject.
2525

26+
For EST and RPC this is equal to an unauthenticated/unsigned TLS request.
27+
2628
Renewal
2729
+++++++
2830

@@ -35,6 +37,12 @@ request from the old certificate to ensure the subjects match. Please note
3537
that reuse of keys is not supported, you must generate a new key for each new
3638
request.
3739

40+
As you can not use a TLS server certificate to authenticate as client the
41+
workflow supports an approach names "surrogate certifcates" which requires
42+
that you create a look-alike self-signed certificate with the proper key
43+
usage. Have a look at the perldoc of the EvaluateSignerTrust activity for
44+
more details.
45+
3846
Enrollment On Behalf
3947
++++++++++++++++++++
4048

@@ -45,6 +53,9 @@ always choosen if the subject of request and signer do not match, so it is
4553
often hit by accident when Renewal or Initial Enrollment are made with
4654
"wrong" subjects.
4755

56+
For SCEP the signature on the SCEP PKCS7 container is the TTP, for EST/RPC
57+
the TTP is the TLS client certificate used to make the connection.
58+
4859
Workflow Logic
4960
--------------
5061

@@ -83,25 +94,20 @@ approval point:
8394
Sample Configuration
8495
--------------------
8596

86-
The workflow fetches all information from the configuration system at ``scep.<servername>`` where the servername is taken from the scep wrapper configuration.
97+
The workflow fetches all information from the configuration system at
98+
``<subsystem>.<servername>`` where the servername is taken from the wrapper
99+
configuration.
87100

88-
Here is a complete sample configuration (found in `scep/generic.yaml`)::
101+
Here is a complete sample configuration (found in `scep/generic.yaml`). The
102+
sections `token`, `workflow` and `response` are only used by SCEP, the
103+
`export_certificate` is only applicable to the RPC output. The remainder
104+
of the configuration is the same for all subsystems::
89105

90106
# By default, all scep endpoints wll use the default token defined
91107
# by the scep token group, if you pass a name here, it is considered
92108
# a group name from the alias table
93109
#token: ca-one-special-scep
94110

95-
# A renewal request is only accpeted if the used certificate will
96-
# expire within this period of time.
97-
renewal_period: 000060
98-
99-
# If the request was a replacement, optionally revoke the replaced
100-
# certificate after a grace period
101-
revoke_on_replace:
102-
reason_code: keyCompromise
103-
delay_revocation_time: +000014
104-
105111
workflow:
106112
type: certificate_enroll
107113
param:
@@ -114,6 +120,35 @@ Here is a complete sample configuration (found in `scep/generic.yaml`)::
114120
_url_params: url_params
115121
#_pkcs7: pkcs7
116122

123+
response:
124+
# The scep standard is a bit unclear if the root should be in the chain
125+
# or not. We consider it a security risk (trust should be always set
126+
# by hand) but as most clients seem to expect it, we include the root
127+
# by default.
128+
# The getca response contains the certificate of the SCEP server itself
129+
# and of the current active issuer (which can but need not to be the same!)
130+
# You can define weather to have only the certificate itself (endentity),
131+
# the chain without the root (chain) or the chain including the root
132+
# (fullchain).
133+
# Note: The response is cached internally in the datapool so changes
134+
# will not show up immediately - to list the cached items use
135+
# openxpkicli list_data_pool_entries --arg namespace=scep.cache.getca
136+
# You can delete by setting the empty string as value with
137+
# set_data_pool_entry (value="" force=1)
138+
getca:
139+
ra: fullchain
140+
issuer: fullchain
141+
142+
# A renewal request is only accpeted if the used certificate will
143+
# expire within this period of time.
144+
renewal_period: 000060
145+
146+
# If the request was a replacement, optionally revoke the replaced
147+
# certificate after a grace period
148+
revoke_on_replace:
149+
reason_code: keyCompromise
150+
delay_revocation_time: +000014
151+
117152
authorized_signer:
118153
rule1:
119154
# Full DN
@@ -165,25 +200,11 @@ Here is a complete sample configuration (found in `scep/generic.yaml`)::
165200
# This substitutes the "replace_window" from the OpenXPKI v1 config
166201
allow_replace: 1
167202

168-
response:
169-
# The scep standard is a bit unclear if the root should be in the chain
170-
# or not. We consider it a security risk (trust should be always set
171-
# by hand) but as most clients seem to expect it, we include the root
172-
# by default.
173-
# The getca response contains the certificate of the SCEP server itself
174-
# and of the current active issuer (which can but need not to be the same!)
175-
# You can define weather to have only the certificate itself (endentity),
176-
# the chain without the root (chain) or the chain including the root
177-
# (fullchain).
178-
# Note: The response is cached internally in the datapool so changes
179-
# will not show up immediately - to list the cached items use
180-
# openxpkicli list_data_pool_entries --arg namespace=scep.cache.getca
181-
# You can delete by setting the empty string as value with
182-
# set_data_pool_entry (value="" force=1)
183-
getca:
184-
ra: fullchain
185-
issuer: fullchain
186-
203+
# by default only the certificate identifier is written to the workflow
204+
# set to a true value to get the PEM encoded certificate in the context,
205+
# set to "chain" to get the issuer certificate and "fullchain" to get
206+
# the chain including the root certificate (key chain).
207+
export_certificate: chain
187208

188209
profile:
189210
cert_profile: tls_server
@@ -277,6 +298,21 @@ in the workflow.
277298
Workflow Configuration
278299
----------------------
279300

301+
Test-Drive (INSECURE)
302+
+++++++++++++++++++++
303+
304+
If you need a server that *just creates certificates*, use the following
305+
policy section::
306+
307+
policy:
308+
allow_anon_enroll: 1
309+
approval_points: 0
310+
max_active_certs: 0
311+
allow_replace: 0
312+
export_certificate: chain
313+
314+
**This will issue any certificate for any request - so do not use this in production**
315+
280316
Authentication
281317
++++++++++++++
282318

0 commit comments

Comments
 (0)