Added targets to verify the certificates
[freeradius.git] / raddb / certs / Makefile
1 ######################################################################
2 #
3 #       Make file to be installed in /etc/raddb/certs to enable
4 #       the easy creation of certificates.
5 #
6 #       See the README file in this directory for more information.
7 #       
8 #       $Id$
9 #
10 ######################################################################
11
12 DH_KEY_SIZE     = 1024
13
14 #
15 #  Set the passwords
16 #
17 PASSWORD_SERVER = $(shell grep output_password server.cnf | sed 's/.*=//;s/^ *//')
18 PASSWORD_CA     = $(shell grep output_password ca.cnf | sed 's/.*=//;s/^ *//')
19 PASSWORD_CLIENT = $(shell grep output_password client.cnf | sed 's/.*=//;s/^ *//')
20
21 USER_NAME       = $(shell grep emailAddress client.cnf | grep '@' | sed 's/.*=//;s/^ *//')
22
23 ######################################################################
24 #
25 #  Make the necessary files, but not client certificates.
26 #
27 ######################################################################
28 .PHONY: all
29 all: dh random server ca
30
31 .PHONY: client
32 client: client.pem
33
34 .PHONY: ca
35 ca: ca.pem
36
37 .PHONY: server
38 server: server.pem
39
40 ######################################################################
41 #
42 #  Diffie-Hellman parameters
43 #
44 ######################################################################
45 dh:
46         openssl dhparam -out dh $(DH_KEY_SIZE)
47
48 ######################################################################
49 #
50 #  Create a new self-signed CA certificate
51 #
52 ######################################################################
53 ca.key ca.pem:
54         openssl req -new -x509 -keyout ca.key -out ca.pem -config ./ca.cnf 
55
56 ######################################################################
57 #
58 #  Create a new server certificate, signed by the above CA.
59 #
60 ######################################################################
61 server.csr server.key: 
62         openssl req -new  -out server.csr -keyout server.key -config ./server.cnf
63
64 server.crt: server.csr ca.key ca.pem index.txt serial
65         openssl ca -batch -keyfile ca.key -cert ca.pem -in server.csr  -key $(PASSWORD_CA) -out server.crt -extensions xpserver_ext -extfile xpextensions -config ./server.cnf
66
67 server.p12: server.crt
68         openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12  -passin pass:$(PASSWORD_SERVER) -passout pass:$(PASSWORD_SERVER)
69
70 server.pem: server.p12
71         openssl pkcs12 -in server.p12 -out server.pem -passin pass:$(PASSWORD_SERVER) -passout pass:$(PASSWORD_SERVER)
72
73 .PHONY: server.vrfy
74 server.vrfy: ca.pem
75         openssl verify -CAfile ca.pem server.pem
76
77 ######################################################################
78 #
79 #  Create a new client certificate, signed by the the above server
80 #  certificate.
81 #
82 ######################################################################
83 client.csr client.key: client.cnf
84         openssl req -new  -out client.csr -keyout client.key -config ./client.cnf
85
86 client.crt: client.csr server.crt server.key index.txt serial
87         openssl ca -batch -keyfile server.key -cert server.crt -in client.csr  -key $(PASSWORD_SERVER) -out client.crt -extensions xpclient_ext -extfile xpextensions -config ./client.cnf
88
89 client.p12: client.crt
90         openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12  -passin pass:$(PASSWORD_CLIENT) -passout pass:$(PASSWORD_CLIENT)
91
92 client.pem: client.p12
93         openssl pkcs12 -in client.p12 -out client.pem -passin pass:$(PASSWORD_SERVER) -passout pass:$(PASSWORD_CLIENT)
94         cp client.pem $(USER_NAME).pem
95
96 .PHONY: server.vrfy
97 client.vrfy: server.pem client.pem 
98         c_rehash .
99         openssl verify -CApath . client.pem
100
101 ######################################################################
102 #
103 #  Miscellaneous rules.
104 #
105 ######################################################################
106 index.txt:
107         @touch index.txt
108
109 serial:
110         @echo '01' > serial
111
112 random:
113         @if [ -e /dev/urandom ] ; then \
114                 dd if=/dev/urandom of=./random count=10 >/dev/null 2>&1; \
115         else \
116                 date > ./random; \
117         fi
118
119 print:
120         openssl x509 -text -in server.crt
121
122 clean:
123         @rm -f *~ *old client.csr client.key client.crt client.p12 client.pem
124
125 #
126 #  Run distclean ONLY if there's a CVS directory, AND it points to
127 #  cvs.freeradius.org.  Otherwise, it would be easy for administrators
128 #  to type "make distclean", and destroy their CA and server certificates.
129 #
130 distclean:
131         @if [ -d CVS -a `grep -i 'cvs\.freeradius\.org' CVS/Root` ] ; then \
132                 rm -f *~ dh *.csr *.crt *.p12 *.der *.pem *.key index.txt* \
133                         serial* random *\.0 *\.1; \
134         fi