Skip to content

Commit b9a5bfb

Browse files
committed
keytypes/asymmetric: add code to generate test certificates
1 parent 44b5817 commit b9a5bfb

File tree

3 files changed

+119
-0
lines changed

3 files changed

+119
-0
lines changed

src/keytypes/data/ca/.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
*.key
2+
*.crt
3+
*.csr
4+
*.pem
5+
6+
certindex*
7+
serial*

src/keytypes/data/ca/Makefile

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
PROJECT := rust-keyutils
2+
OPENSSL_CONF := openssl.cnf
3+
4+
MAIN_CERT_NAME := ca-1
5+
MAIN_ROOT_CERT := $(MAIN_CERT_NAME).root.crt
6+
ROOT_CERTS := $(MAIN_ROOT_CERT) ca-2.root.crt
7+
INTERMEDIATE_CERTS := ca.intermediate.crt
8+
CA_CERTS := $(ROOT_CERTS) $(INTERMEDIATE_CERTS)
9+
SERVER_CERTS := intermediate.term.crt $(MAIN_CERT_NAME).term.crt self.term.crt
10+
11+
SIGNING_BITS := certindex serial
12+
13+
all: $(foreach cert,$(CA_CERTS) $(SERVER_CERTS),$(cert).der)
14+
15+
certindex:
16+
touch certindex
17+
18+
serial:
19+
echo 1000 > serial
20+
21+
%.root.crt %.key: $(OPENSSL_CONF)
22+
openssl req -config $< -new -subj "/CN=$(PROJECT) CA $*" -x509 -passout pass:$(PROJECT) -newkey rsa:4096 -keyout $*.key -out $@ -extensions v3_root_ca
23+
24+
%.intermediate.crt %.key: $(OPENSSL_CONF) $(SIGNING_BITS) $(MAIN_ROOT_CERT)
25+
openssl req -config $< -new -subj "/CN=$(PROJECT) Intermediate CA" -passout pass:$(PROJECT) -newkey rsa:4096 -keyout $*.key -out $@.csr -extensions v3_intermediate_ca
26+
openssl ca -config $< -notext -passin pass:$(PROJECT) -batch -in $@.csr -out $@
27+
28+
self.term.crt %.key: $(OPENSSL_CONF) $(SIGNING_BITS)
29+
openssl req -config $< -new -subj "/CN=$(PROJECT) self-signed Certificate" -passout pass:$(PROJECT) -newkey rsa:4096 -keyout $*.term.key -out $@.csr -extensions v3_server_cert
30+
openssl x509 -req -signkey $*.term.key -passin pass:$(PROJECT) -days 3650 -in $@.csr -out $@
31+
32+
%.term.crt %.key: $(OPENSSL_CONF) $(SIGNING_BITS) $(CA_CERTS)
33+
openssl req -config $< -new -subj "/CN=$(PROJECT) $*-signed Certificate" -passout pass:$(PROJECT) -newkey rsa:4096 -keyout $*.term.key -out $@.csr -extensions v3_server_cert
34+
openssl ca -config $< -notext -passin pass:$(PROJECT) -batch -in $@.csr -out $@ -name $*
35+
36+
%.crt.der: %.crt
37+
openssl x509 -outform der -in $< -out $@

src/keytypes/data/ca/openssl.cnf

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
[ca]
2+
default_ca = ca-1
3+
4+
[ca_policy]
5+
6+
[ca-1]
7+
dir = ./
8+
new_certs_dir = $dir
9+
certificate = $dir/ca-1.root.crt
10+
private_key = $dir/ca-1.key
11+
12+
database = $dir/certindex
13+
serial = $dir/serial
14+
default_days = 3650
15+
default_md = sha512
16+
policy = ca_policy
17+
18+
[intermediate]
19+
dir = ./
20+
new_certs_dir = $dir
21+
certificate = $dir/ca.intermediate.crt
22+
private_key = $dir/ca.key
23+
24+
database = $dir/certindex
25+
serial = $dir/serial
26+
default_days = 3650
27+
default_md = sha512
28+
policy = ca_policy
29+
30+
[self]
31+
dir = ./
32+
new_certs_dir = $dir
33+
#certificate = $dir/ca.intermediate.crt
34+
private_key = $dir/self.term.key
35+
36+
database = $dir/certindex
37+
serial = $dir/serial
38+
default_days = 3650
39+
default_md = sha512
40+
policy = ca_policy
41+
42+
[req]
43+
distinguished_name = req_distinguished_name
44+
prompt = no
45+
46+
[req_distinguished_name]
47+
countryName = US
48+
stateOrProvinceName = New York
49+
localityName = Nowhere
50+
organizationName = Github
51+
emailAddress = mathstuf+keyutils@gmail.com
52+
53+
[v3_root_ca]
54+
# Extensions for a typical CA (`man x509v3_config`).
55+
subjectKeyIdentifier = hash
56+
authorityKeyIdentifier = keyid:always,issuer
57+
basicConstraints = critical, CA:true
58+
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
59+
60+
[v3_intermediate_ca]
61+
# Extensions for a typical intermediate CA (`man x509v3_config`).
62+
subjectKeyIdentifier = hash
63+
authorityKeyIdentifier = keyid:always,issuer
64+
basicConstraints = critical, CA:true, pathlen:0
65+
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
66+
67+
[v3_server_cert]
68+
# Extensions for server certificates (`man x509v3_config`).
69+
basicConstraints = CA:FALSE
70+
nsCertType = server
71+
nsComment = "OpenSSL Generated Server Certificate"
72+
subjectKeyIdentifier = hash
73+
authorityKeyIdentifier = keyid,issuer:always
74+
keyUsage = critical, digitalSignature, keyEncipherment
75+
extendedKeyUsage = serverAuth

0 commit comments

Comments
 (0)