do not require load-privkey for to-p12
[gnutls.git] / src / certtool-args.def
blob57cac19a982f2f115f97f27bd2452b9d89fce84e
1 AutoGen Definitions options;
2 prog-name = certtool;
3 prog-title = "GnuTLS PKCS #11 tool";
4 prog-desc = "Manipulate certificates and private keys.";
5 detail = "Tool to parse and generate X.509 certificates, requests and private keys.
6 It can be used interactively or non interactively by
7 specifying the template command line option.";
8 short-usage = "certtool [options] [url]\ncerttool --help for usage instructions.\n";
9 explain = "";
11 #define INFILE_OPT 1
12 #define OUTFILE_OPT 1
13 #include args-std.def
15 flag = {
16 name = generate-self-signed;
17 value = s;
18 descrip = "Generate a self-signed certificate";
19 doc = "";
22 flag = {
23 name = generate-certificate;
24 value = c;
25 descrip = "Generate a signed certificate";
26 doc = "";
29 flag = {
30 name = generate-proxy;
31 descrip = "Generates a proxy certificate";
32 doc = "";
35 flag = {
36 name = generate-crl;
37 descrip = "Generate a CRL";
38 doc = "";
41 flag = {
42 name = update-certificate;
43 value = u;
44 descrip = "Update a signed certificate";
45 doc = "";
48 flag = {
49 name = generate-privkey;
50 value = p;
51 descrip = "Generate a private key";
52 doc = "";
55 flag = {
56 name = generate-request;
57 value = q;
58 descrip = "Generate a PKCS #10 certificate request";
59 doc = "";
62 flag = {
63 name = verify-chain;
64 value = e;
65 descrip = "Verify a PEM encoded certificate chain.";
66 doc = "The last certificate in the chain must be a self signed one.";
69 flag = {
70 name = verify;
71 descrip = "Verify a PEM encoded certificate chain using a trusted list.";
72 doc = "The trusted certificate list must be loaded with --load-ca-certificate.";
73 flags-must = load-ca-certificate;
76 flag = {
77 name = verify-crl;
78 descrip = "Verify a CRL using a trusted list.";
79 doc = "The trusted certificate list must be loaded with --load-ca-certificate.";
80 flags-must = load-ca-certificate;
83 flag = {
84 name = generate-dh-params;
85 descrip = "Generate PKCS #3 encoded Diffie-Hellman parameters.";
86 doc = "";
89 flag = {
90 name = get-dh-params;
91 descrip = "Get the included PKCS #3 encoded Diffie-Hellman parameters.";
92 doc = "Returns stored DH parameters in GnuTLS. Those parameters are used in the SRP protocol. The parameters returned by fresh generation
93 are more efficient since GnuTLS 3.0.9.";
96 flag = {
97 name = dh-info;
98 descrip = "Print information PKCS #3 encoded Diffie-Hellman parameters";
99 doc = "";
102 flag = {
103 name = load-privkey;
104 descrip = "Loads a private key file";
105 arg-type = string;
106 doc = "This can be either a file or a PKCS #11 URL";
109 flag = {
110 name = load-pubkey;
111 descrip = "Loads a public key file";
112 arg-type = string;
113 doc = "This can be either a file or a PKCS #11 URL";
116 flag = {
117 name = load-request;
118 descrip = "Loads a certificate request file";
119 arg-type = file;
120 file-exists = yes;
121 doc = "";
124 flag = {
125 name = load-certificate;
126 descrip = "Loads a certificate file";
127 arg-type = string;
128 doc = "This can be either a file or a PKCS #11 URL";
131 flag = {
132 name = load-ca-privkey;
133 descrip = "Loads the certificate authority's private key file";
134 arg-type = string;
135 doc = "This can be either a file or a PKCS #11 URL";
138 flag = {
139 name = load-ca-certificate;
140 descrip = "Loads the certificate authority's certificate file";
141 arg-type = string;
142 doc = "This can be either a file or a PKCS #11 URL";
145 flag = {
146 name = password;
147 arg-type = string;
148 descrip = "Password to use";
149 doc = "";
152 flag = {
153 name = certificate-info;
154 value = i;
155 descrip = "Print information on the given certificate";
156 doc = "";
159 flag = {
160 name = certificate-pubkey;
161 descrip = "Print certificate's public key";
162 doc = "";
165 flag = {
166 name = pgp-certificate-info;
167 descrip = "Print information on the given OpenPGP certificate";
168 doc = "";
171 flag = {
172 name = pgp-ring-info;
173 descrip = "Print information on the given OpenPGP keyring structure";
174 doc = "";
177 flag = {
178 name = crl-info;
179 value = l;
180 descrip = "Print information on the given CRL structure";
181 doc = "";
184 flag = {
185 name = crq-info;
186 descrip = "Print information on the given certificate request";
187 doc = "";
191 flag = {
192 name = no-crq-extensions;
193 descrip = "Do not use extensions in certificate requests";
194 doc = "";
197 flag = {
198 name = p12-info;
199 descrip = "Print information on a PKCS #12 structure";
200 doc = "";
203 flag = {
204 name = p7-info;
205 descrip = "Print information on a PKCS #7 structure";
206 doc = "";
209 flag = {
210 name = smime-to-p7;
211 descrip = "Convert S/MIME to PKCS #7 structure";
212 doc = "";
215 flag = {
216 name = key-info;
217 value = k;
218 descrip = "Print information on a private key";
219 doc = "";
222 flag = {
223 name = pgp-key-info;
224 descrip = "Print information on an OpenPGP private key";
225 doc = "";
228 flag = {
229 name = pubkey-info;
230 descrip = "Print information on a public key";
231 doc = "";
234 flag = {
235 name = v1;
236 descrip = "Generate an X.509 version 1 certificate (with no extensions)";
237 doc = "";
240 flag = {
241 name = to-p12;
242 descrip = "Generate a PKCS #12 structure";
243 doc = "It requires a certificate, a private key and possibly a CA certificate to be specified.";
244 flags-must = load-certificate;
247 flag = {
248 name = to-p8;
249 descrip = "Generate a PKCS #8 structure";
250 doc = "";
253 flag = {
254 name = pkcs8;
255 value = 8;
256 descrip = "Use PKCS #8 format for private keys";
257 doc = "";
260 flag = {
261 name = rsa;
262 descrip = "Generate RSA key";
263 doc = "";
266 flag = {
267 name = dsa;
268 descrip = "Generate DSA key";
269 doc = "";
272 flag = {
273 name = ecc;
274 descrip = "Generate ECC (ECDSA) key";
275 doc = "";
278 flag = {
279 name = hash;
280 arg-type = string;
281 descrip = "Hash algorithm to use for signing.";
282 doc = "Available hash functions are SHA1, RMD160, SHA256, SHA384, SHA512.";
285 flag = {
286 name = inder;
287 descrip = "Use DER format for input certificates and private keys.";
288 disabled;
289 disable = "no";
290 doc = "The input files will be assumed to be in DER or RAW format.
291 Unlike options that in PEM input would allow multiple input data (e.g. multiple
292 certificates), when reading in DER format a single data structure is read.";
295 flag = {
296 name = inraw;
297 aliases = inder;
300 flag = {
301 name = outder;
302 descrip = "Use DER format for output certificates and private keys";
303 disabled;
304 disable = "no";
305 doc = "The output will be in DER or RAW format.";
308 flag = {
309 name = outraw;
310 aliases = outder;
313 flag = {
314 name = bits;
315 arg-type = number;
316 descrip = "Specify the number of bits for key generate";
317 doc = "";
320 flag = {
321 name = sec-param;
322 arg-type = string;
323 arg-name = "Security parameter";
324 descrip = "Specify the security level [low, legacy, normal, high, ultra].";
325 doc = "This is alternative to the bits option.";
328 flag = {
329 name = disable-quick-random;
330 descrip = "No effect";
331 doc = "";
334 flag = {
335 name = template;
336 arg-type = file;
337 file-exists = yes;
338 descrip = "Template file to use for non-interactive operation";
339 doc = "";
342 flag = {
343 name = pkcs-cipher;
344 arg-type = string;
345 arg-name = "Cipher";
346 descrip = "Cipher to use for PKCS #8 and #12 operations";
347 doc = "Cipher may be one of 3des, 3des-pkcs12, aes-128, aes-192, aes-256, rc2-40, arcfour.";
350 doc-section = {
351 ds-type = 'SEE ALSO';
352 ds-format = 'texi';
353 ds-text = <<-_EOT_
354 p11tool (1)
355 _EOT_;
358 doc-section = {
359 ds-type = 'EXAMPLES';
360 ds-format = 'texi';
361 ds-text = <<-_EOT_
362 @subheading Generating private keys
363 To create an RSA private key, run:
364 @example
365 $ certtool --generate-privkey --outfile key.pem --rsa
366 @end example
368 To create a DSA or elliptic curves (ECDSA) private key use the
369 above command combined with 'dsa' or 'ecc' options.
371 @subheading Generating certificate requests
372 To create a certificate request (needed when the certificate is issued by
373 another party), run:
374 @example
375 certtool --generate-request --load-privkey key.pem \
376 --outfile request.pem
377 @end example
379 If the private key is stored in a smart card you can generate
380 a request by specifying the private key object URL.
381 @example
382 $ ./certtool --generate-request --load-privkey "pkcs11:..." \
383 --load-pubkey "pkcs11:..." --outfile request.pem
384 @end example
387 @subheading Generating a self-signed certificate
388 To create a self signed certificate, use the command:
389 @example
390 $ certtool --generate-privkey --outfile ca-key.pem
391 $ certtool --generate-self-signed --load-privkey ca-key.pem \
392 --outfile ca-cert.pem
393 @end example
395 Note that a self-signed certificate usually belongs to a certificate
396 authority, that signs other certificates.
398 @subheading Generating a certificate
399 To generate a certificate using the previous request, use the command:
400 @example
401 $ certtool --generate-certificate --load-request request.pem \
402 --outfile cert.pem --load-ca-certificate ca-cert.pem \
403 --load-ca-privkey ca-key.pem
404 @end example
406 To generate a certificate using the private key only, use the command:
407 @example
408 $ certtool --generate-certificate --load-privkey key.pem \
409 --outfile cert.pem --load-ca-certificate ca-cert.pem \
410 --load-ca-privkey ca-key.pem
411 @end example
413 @subheading Certificate information
414 To view the certificate information, use:
415 @example
416 $ certtool --certificate-info --infile cert.pem
417 @end example
419 @subheading PKCS #12 structure generation
420 To generate a PKCS #12 structure using the previous key and certificate,
421 use the command:
422 @example
423 $ certtool --load-certificate cert.pem --load-privkey key.pem \
424 --to-p12 --outder --outfile key.p12
425 @end example
427 Some tools (reportedly web browsers) have problems with that file
428 because it does not contain the CA certificate for the certificate.
429 To work around that problem in the tool, you can use the
430 --load-ca-certificate parameter as follows:
432 @example
433 $ certtool --load-ca-certificate ca.pem \
434 --load-certificate cert.pem --load-privkey key.pem \
435 --to-p12 --outder --outfile key.p12
436 @end example
438 @subheading Diffie-Hellman parameter generation
439 To generate parameters for Diffie-Hellman key exchange, use the command:
440 @example
441 $ certtool --generate-dh-params --outfile dh.pem --sec-param normal
442 @end example
444 @subheading Proxy certificate generation
445 Proxy certificate can be used to delegate your credential to a
446 temporary, typically short-lived, certificate. To create one from the
447 previously created certificate, first create a temporary key and then
448 generate a proxy certificate for it, using the commands:
450 @example
451 $ certtool --generate-privkey > proxy-key.pem
452 $ certtool --generate-proxy --load-ca-privkey key.pem \
453 --load-privkey proxy-key.pem --load-certificate cert.pem \
454 --outfile proxy-cert.pem
455 @end example
457 @subheading Certificate revocation list generation
458 To create an empty Certificate Revocation List (CRL) do:
460 @example
461 $ certtool --generate-crl --load-ca-privkey x509-ca-key.pem \
462 --load-ca-certificate x509-ca.pem
463 @end example
465 To create a CRL that contains some revoked certificates, place the
466 certificates in a file and use @code{--load-certificate} as follows:
468 @example
469 $ certtool --generate-crl --load-ca-privkey x509-ca-key.pem \
470 --load-ca-certificate x509-ca.pem --load-certificate revoked-certs.pem
471 @end example
473 To verify a Certificate Revocation List (CRL) do:
475 @example
476 $ certtool --verify-crl --load-ca-certificate x509-ca.pem < crl.pem
477 @end example
478 _EOT_;
482 doc-section = {
483 ds-type = 'FILES';
484 ds-format = 'texi';
485 ds-text = <<-_EOT_
486 @subheading Certtool's template file format
487 A template file can be used to avoid the interactive questions of
488 certtool. Initially create a file named 'cert.cfg' that contains the information
489 about the certificate. The template can be used as below:
491 @example
492 $ certtool --generate-certificate cert.pem --load-privkey key.pem \
493 --template cert.cfg \
494 --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem
495 @end example
497 An example certtool template file that can be used to generate a certificate
498 request or a self signed certificate follows.
500 @example
501 # X.509 Certificate options
503 # DN options
505 # The organization of the subject.
506 organization = "Koko inc."
508 # The organizational unit of the subject.
509 unit = "sleeping dept."
511 # The locality of the subject.
512 # locality =
514 # The state of the certificate owner.
515 state = "Attiki"
517 # The country of the subject. Two letter code.
518 country = GR
520 # The common name of the certificate owner.
521 cn = "Cindy Lauper"
523 # A user id of the certificate owner.
524 #uid = "clauper"
526 # Set domain components
527 #dc = "name"
528 #dc = "domain"
530 # If the supported DN OIDs are not adequate you can set
531 # any OID here.
532 # For example set the X.520 Title and the X.520 Pseudonym
533 # by using OID and string pairs.
534 #dn_oid = 2.5.4.12 Dr.
535 #dn_oid = 2.5.4.65 jackal
537 # This is deprecated and should not be used in new
538 # certificates.
539 # pkcs9_email = "none@@none.org"
541 # The serial number of the certificate
542 serial = 007
544 # In how many days, counting from today, this certificate will expire.
545 expiration_days = 700
547 # X.509 v3 extensions
549 # A dnsname in case of a WWW server.
550 #dns_name = "www.none.org"
551 #dns_name = "www.morethanone.org"
553 # A subject alternative name URI
554 #uri = "http://www.example.com"
556 # An IP address in case of a server.
557 #ip_address = "192.168.1.1"
559 # An email in case of a person
560 email = "none@@none.org"
562 # Challenge password used in certificate requests
563 challenge_passwd = 123456
565 # An URL that has CRLs (certificate revocation lists)
566 # available. Needed in CA certificates.
567 #crl_dist_points = "http://www.getcrl.crl/getcrl/"
569 # Whether this is a CA certificate or not
572 # for microsoft smart card logon
573 # key_purpose_oid = 1.3.6.1.4.1.311.20.2.2
575 ### Other predefined key purpose OIDs
577 # Whether this certificate will be used for a TLS client
578 #tls_www_client
580 # Whether this certificate will be used for a TLS server
581 #tls_www_server
583 # Whether this certificate will be used to sign data (needed
584 # in TLS DHE ciphersuites).
585 signing_key
587 # Whether this certificate will be used to encrypt data (needed
588 # in TLS RSA ciphersuites). Note that it is preferred to use different
589 # keys for encryption and signing.
590 #encryption_key
592 # Whether this key will be used to sign other certificates.
593 #cert_signing_key
595 # Whether this key will be used to sign CRLs.
596 #crl_signing_key
598 # Whether this key will be used to sign code.
599 #code_signing_key
601 # Whether this key will be used to sign OCSP data.
602 #ocsp_signing_key
604 # Whether this key will be used for time stamping.
605 #time_stamping_key
607 # Whether this key will be used for IPsec IKE operations.
608 #ipsec_ike_key
610 ### end of key purpose OIDs
612 # When generating a certificate from a certificate
613 # request, then honor the extensions stored in the request
614 # and store them in the real certificate.
615 #honor_crq_extensions
617 # Path length contraint. Sets the maximum number of
618 # certificates that can be used to certify this certificate.
619 # (i.e. the certificate chain length)
620 #path_len = -1
621 #path_len = 2
623 # OCSP URI
624 # ocsp_uri = http://my.ocsp.server/ocsp
626 # CA issuers URI
627 # ca_issuers_uri = http://my.ca.issuer
629 # Options for proxy certificates
630 # proxy_policy_language = 1.3.6.1.5.5.7.21.1
632 # Options for generating a CRL
634 # next CRL update will be in 43 days (wow)
635 #crl_next_update = 43
637 # this is the 5th CRL by this CA
638 #crl_number = 5
640 @end example
642 _EOT_;