Simple automated certificate creation demo.
This commit is contained in:
parent
e7ee10d3dc
commit
b6df360b9e
3 changed files with 91 additions and 0 deletions
9
demos/certs/README
Normal file
9
demos/certs/README
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
There is often a need to generate test certificates automatically using
|
||||||
|
a script. This is often a cause for confusion which can result in incorrect
|
||||||
|
CA certificates, obsolete V1 certificates or duplicate serial numbers.
|
||||||
|
The range of command line options can be daunting for a beginner.
|
||||||
|
|
||||||
|
This is a simple example of how to generate certificates automatically
|
||||||
|
using scripts. Example creates a root CA, a server certificate signed by
|
||||||
|
the root, an intermediate CA signed by the root and finally a client
|
||||||
|
certificate signed by the intermediate CA.
|
57
demos/certs/ca.cnf
Normal file
57
demos/certs/ca.cnf
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
#
|
||||||
|
# OpenSSL example configuration file for automated certificate creation.
|
||||||
|
#
|
||||||
|
|
||||||
|
# This definition stops the following lines choking if HOME or CN
|
||||||
|
# is undefined.
|
||||||
|
HOME = .
|
||||||
|
RANDFILE = $ENV::HOME/.rnd
|
||||||
|
CN = "Not Defined"
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
[ req ]
|
||||||
|
default_bits = 1024
|
||||||
|
default_keyfile = privkey.pem
|
||||||
|
# Don't prompt for fields: use those in section directly
|
||||||
|
prompt = no
|
||||||
|
distinguished_name = req_distinguished_name
|
||||||
|
x509_extensions = v3_ca # The extentions to add to the self signed cert
|
||||||
|
string_mask = utf8only
|
||||||
|
|
||||||
|
# req_extensions = v3_req # The extensions to add to a certificate request
|
||||||
|
|
||||||
|
[ req_distinguished_name ]
|
||||||
|
countryName = UK
|
||||||
|
|
||||||
|
organizationName = OpenSSL Group
|
||||||
|
# Take CN from environment so it can come from a script.
|
||||||
|
commonName = $ENV::CN
|
||||||
|
|
||||||
|
[ usr_cert ]
|
||||||
|
|
||||||
|
# These extensions are added when 'ca' signs a request for an end entity
|
||||||
|
# certificate
|
||||||
|
|
||||||
|
basicConstraints=critical, CA:FALSE
|
||||||
|
keyUsage=critical, nonRepudiation, digitalSignature, keyEncipherment
|
||||||
|
|
||||||
|
# This will be displayed in Netscape's comment listbox.
|
||||||
|
nsComment = "OpenSSL Generated Certificate"
|
||||||
|
|
||||||
|
# PKIX recommendations harmless if included in all certificates.
|
||||||
|
subjectKeyIdentifier=hash
|
||||||
|
authorityKeyIdentifier=keyid
|
||||||
|
|
||||||
|
[ v3_ca ]
|
||||||
|
|
||||||
|
|
||||||
|
# Extensions for a typical CA
|
||||||
|
|
||||||
|
# PKIX recommendation.
|
||||||
|
|
||||||
|
subjectKeyIdentifier=hash
|
||||||
|
authorityKeyIdentifier=keyid:always
|
||||||
|
basicConstraints = critical,CA:true
|
||||||
|
keyUsage = critical, cRLSign, keyCertSign
|
||||||
|
|
||||||
|
|
25
demos/certs/mkcerts.sh
Normal file
25
demos/certs/mkcerts.sh
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
OPENSSL=openssl
|
||||||
|
|
||||||
|
# Root CA: create certificate directly
|
||||||
|
CN="Test Root CA" $OPENSSL req -config ca.cnf -x509 -nodes \
|
||||||
|
-keyout root.pem -out root.pem -newkey rsa:2048 -days 3650
|
||||||
|
# Server certificate: create request first
|
||||||
|
CN="Test Server Cert" $OPENSSL req -config ca.cnf -nodes \
|
||||||
|
-keyout skey.pem -out req.pem -newkey rsa:1024
|
||||||
|
# Sign request: end entity extensions
|
||||||
|
$OPENSSL x509 -req -in req.pem -CA root.pem -days 3600 \
|
||||||
|
-extfile ca.cnf -extensions usr_cert -CAcreateserial -out server.pem
|
||||||
|
# Intermediate CA: request first
|
||||||
|
CN="Test Intermediate CA" $OPENSSL req -config ca.cnf -nodes \
|
||||||
|
-keyout intkey.pem -out intreq.pem -newkey rsa:2048
|
||||||
|
# Sign request: CA extensions
|
||||||
|
$OPENSSL x509 -req -in intreq.pem -CA root.pem -days 3600 \
|
||||||
|
-extfile ca.cnf -extensions v3_ca -CAcreateserial -out intca.pem
|
||||||
|
# Client certificate: request first
|
||||||
|
CN="Test Client Cert" $OPENSSL req -config ca.cnf -nodes \
|
||||||
|
-keyout ckey.pem -out creq.pem -newkey rsa:1024
|
||||||
|
# Sign using intermediate CA
|
||||||
|
$OPENSSL x509 -req -in creq.pem -CA intca.pem -CAkey intkey.pem -days 3600 \
|
||||||
|
-extfile ca.cnf -extensions usr_cert -CAcreateserial -out client.pem
|
Loading…
Reference in a new issue