lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | =pod |
| 2 | |
| 3 | =head1 NAME |
| 4 | |
| 5 | CA.pl - friendlier interface for OpenSSL certificate programs |
| 6 | |
| 7 | =head1 SYNOPSIS |
| 8 | |
| 9 | B<CA.pl> |
| 10 | B<-?> | |
| 11 | B<-h> | |
| 12 | B<-help> |
| 13 | |
| 14 | B<CA.pl> |
| 15 | B<-newcert> | |
| 16 | B<-newreq> | |
| 17 | B<-newreq-nodes> | |
| 18 | B<-xsign> | |
| 19 | B<-sign> | |
| 20 | B<-signCA> | |
| 21 | B<-signcert> | |
| 22 | B<-crl> | |
| 23 | B<-newca> |
| 24 | [B<-extra-cmd> extra-params] |
| 25 | |
| 26 | B<CA.pl> B<-pkcs12> [B<-extra-pkcs12> extra-params] [B<certname>] |
| 27 | |
| 28 | B<CA.pl> B<-verify> [B<-extra-verify> extra-params] B<certfile>... |
| 29 | |
| 30 | B<CA.pl> B<-revoke> [B<-extra-ca> extra-params] B<certfile> [B<reason>] |
| 31 | |
| 32 | =head1 DESCRIPTION |
| 33 | |
| 34 | The B<CA.pl> script is a perl script that supplies the relevant command line |
| 35 | arguments to the B<openssl> command for some common certificate operations. |
| 36 | It is intended to simplify the process of certificate creation and management |
| 37 | by the use of some simple options. |
| 38 | |
| 39 | =head1 OPTIONS |
| 40 | |
| 41 | =over 4 |
| 42 | |
| 43 | =item B<?>, B<-h>, B<-help> |
| 44 | |
| 45 | Prints a usage message. |
| 46 | |
| 47 | =item B<-newcert> |
| 48 | |
| 49 | Creates a new self signed certificate. The private key is written to the file |
| 50 | "newkey.pem" and the request written to the file "newreq.pem". |
| 51 | This argument invokes B<openssl req> command. |
| 52 | |
| 53 | =item B<-newreq> |
| 54 | |
| 55 | Creates a new certificate request. The private key is written to the file |
| 56 | "newkey.pem" and the request written to the file "newreq.pem". |
| 57 | Executes B<openssl req> command below the hood. |
| 58 | |
| 59 | =item B<-newreq-nodes> |
| 60 | |
| 61 | Is like B<-newreq> except that the private key will not be encrypted. |
| 62 | Uses B<openssl req> command. |
| 63 | |
| 64 | =item B<-newca> |
| 65 | |
| 66 | Creates a new CA hierarchy for use with the B<ca> program (or the B<-signcert> |
| 67 | and B<-xsign> options). The user is prompted to enter the filename of the CA |
| 68 | certificates (which should also contain the private key) or by hitting ENTER |
| 69 | details of the CA will be prompted for. The relevant files and directories |
| 70 | are created in a directory called "demoCA" in the current directory. |
| 71 | B<openssl req> and B<openssl ca> commands are get invoked. |
| 72 | |
| 73 | =item B<-pkcs12> |
| 74 | |
| 75 | Create a PKCS#12 file containing the user certificate, private key and CA |
| 76 | certificate. It expects the user certificate and private key to be in the |
| 77 | file "newcert.pem" and the CA certificate to be in the file demoCA/cacert.pem, |
| 78 | it creates a file "newcert.p12". This command can thus be called after the |
| 79 | B<-sign> option. The PKCS#12 file can be imported directly into a browser. |
| 80 | If there is an additional argument on the command line it will be used as the |
| 81 | "friendly name" for the certificate (which is typically displayed in the browser |
| 82 | list box), otherwise the name "My Certificate" is used. |
| 83 | Delegates work to B<openssl pkcs12> command. |
| 84 | |
| 85 | =item B<-sign>, B<-signcert>, B<-xsign> |
| 86 | |
| 87 | Calls the B<ca> program to sign a certificate request. It expects the request |
| 88 | to be in the file "newreq.pem". The new certificate is written to the file |
| 89 | "newcert.pem" except in the case of the B<-xsign> option when it is written |
| 90 | to standard output. Leverages B<openssl ca> command. |
| 91 | |
| 92 | =item B<-signCA> |
| 93 | |
| 94 | This option is the same as the B<-sign> option except it uses the |
| 95 | configuration file section B<v3_ca> and so makes the signed request a |
| 96 | valid CA certificate. This is useful when creating intermediate CA from |
| 97 | a root CA. Extra params are passed on to B<openssl ca> command. |
| 98 | |
| 99 | =item B<-signcert> |
| 100 | |
| 101 | This option is the same as B<-sign> except it expects a self signed certificate |
| 102 | to be present in the file "newreq.pem". |
| 103 | Extra params are passed on to B<openssl x509> and B<openssl ca> commands. |
| 104 | |
| 105 | =item B<-crl> |
| 106 | |
| 107 | Generate a CRL. Executes B<openssl ca> command. |
| 108 | |
| 109 | =item B<-revoke certfile [reason]> |
| 110 | |
| 111 | Revoke the certificate contained in the specified B<certfile>. An optional |
| 112 | reason may be specified, and must be one of: B<unspecified>, |
| 113 | B<keyCompromise>, B<CACompromise>, B<affiliationChanged>, B<superseded>, |
| 114 | B<cessationOfOperation>, B<certificateHold>, or B<removeFromCRL>. |
| 115 | Leverages B<openssl ca> command. |
| 116 | |
| 117 | =item B<-verify> |
| 118 | |
| 119 | Verifies certificates against the CA certificate for "demoCA". If no |
| 120 | certificates are specified on the command line it tries to verify the file |
| 121 | "newcert.pem". Invokes B<openssl verify> command. |
| 122 | |
| 123 | =item B<-extra-req> | B<-extra-ca> | B<-extra-pkcs12> | B<-extra-x509> | B<-extra-verify> <extra-params> |
| 124 | |
| 125 | The purpose of these parameters is to allow optional parameters to be supplied |
| 126 | to B<openssl> that this command executes. The B<-extra-cmd> are specific to the |
| 127 | option being used and the B<openssl> command getting invoked. For example |
| 128 | when this command invokes B<openssl req> extra parameters can be passed on |
| 129 | with the B<-extra-req> parameter. The |
| 130 | B<openssl> commands being invoked per option are documented below. |
| 131 | Users should consult B<openssl> command documentation for more information. |
| 132 | |
| 133 | =back |
| 134 | |
| 135 | =head1 EXAMPLES |
| 136 | |
| 137 | Create a CA hierarchy: |
| 138 | |
| 139 | CA.pl -newca |
| 140 | |
| 141 | Complete certificate creation example: create a CA, create a request, sign |
| 142 | the request and finally create a PKCS#12 file containing it. |
| 143 | |
| 144 | CA.pl -newca |
| 145 | CA.pl -newreq |
| 146 | CA.pl -sign |
| 147 | CA.pl -pkcs12 "My Test Certificate" |
| 148 | |
| 149 | =head1 DSA CERTIFICATES |
| 150 | |
| 151 | Although the B<CA.pl> creates RSA CAs and requests it is still possible to |
| 152 | use it with DSA certificates and requests using the L<req(1)> command |
| 153 | directly. The following example shows the steps that would typically be taken. |
| 154 | |
| 155 | Create some DSA parameters: |
| 156 | |
| 157 | openssl dsaparam -out dsap.pem 1024 |
| 158 | |
| 159 | Create a DSA CA certificate and private key: |
| 160 | |
| 161 | openssl req -x509 -newkey dsa:dsap.pem -keyout cacert.pem -out cacert.pem |
| 162 | |
| 163 | Create the CA directories and files: |
| 164 | |
| 165 | CA.pl -newca |
| 166 | |
| 167 | enter cacert.pem when prompted for the CA filename. |
| 168 | |
| 169 | Create a DSA certificate request and private key (a different set of parameters |
| 170 | can optionally be created first): |
| 171 | |
| 172 | openssl req -out newreq.pem -newkey dsa:dsap.pem |
| 173 | |
| 174 | Sign the request: |
| 175 | |
| 176 | CA.pl -sign |
| 177 | |
| 178 | =head1 NOTES |
| 179 | |
| 180 | Most of the filenames mentioned can be modified by editing the B<CA.pl> script. |
| 181 | |
| 182 | If the demoCA directory already exists then the B<-newca> command will not |
| 183 | overwrite it and will do nothing. This can happen if a previous call using |
| 184 | the B<-newca> option terminated abnormally. To get the correct behaviour |
| 185 | delete the demoCA directory if it already exists. |
| 186 | |
| 187 | Under some environments it may not be possible to run the B<CA.pl> script |
| 188 | directly (for example Win32) and the default configuration file location may |
| 189 | be wrong. In this case the command: |
| 190 | |
| 191 | perl -S CA.pl |
| 192 | |
| 193 | can be used and the B<OPENSSL_CONF> environment variable changed to point to |
| 194 | the correct path of the configuration file. |
| 195 | |
| 196 | The script is intended as a simple front end for the B<openssl> program for use |
| 197 | by a beginner. Its behaviour isn't always what is wanted. For more control over the |
| 198 | behaviour of the certificate commands call the B<openssl> command directly. |
| 199 | |
| 200 | =head1 SEE ALSO |
| 201 | |
| 202 | L<x509(1)>, L<ca(1)>, L<req(1)>, L<pkcs12(1)>, |
| 203 | L<config(5)> |
| 204 | |
| 205 | =head1 COPYRIGHT |
| 206 | |
| 207 | Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved. |
| 208 | |
| 209 | Licensed under the OpenSSL license (the "License"). You may not use |
| 210 | this file except in compliance with the License. You can obtain a copy |
| 211 | in the file LICENSE in the source distribution or at |
| 212 | L<https://www.openssl.org/source/license.html>. |
| 213 | |
| 214 | =cut |