├── .gitignore ├── vims ├── tpl ├── server-ext.tpl ├── client-ext.tpl ├── user-ext.tpl ├── index-html.tpl ├── req-config.tpl └── ca-config.tpl ├── ca-scripts.spec ├── Makefile ├── bin ├── ca-list-certs ├── ca-revoke-cert ├── ca-renew-cert ├── ca-init └── ca-create-cert ├── ca-scripts.conf ├── doc ├── ca-renew-cert.pod ├── ca-revoke-cert.pod ├── ca-init.pod ├── ca-scripts.conf.pod └── ca-create-cert.pod ├── README.md └── lib └── ca-functions /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | -------------------------------------------------------------------------------- /vims: -------------------------------------------------------------------------------- 1 | gvim -p Makefile bin/* lib/* 2 | gvim -p ca-scripts.conf tpl/* 3 | gvim -p README.md doc/* 4 | -------------------------------------------------------------------------------- /tpl/server-ext.tpl: -------------------------------------------------------------------------------- 1 | basicConstraints = critical, CA:FALSE 2 | nsCertType = server 3 | nsRevocationUrl = %CA_CRL_URI% 4 | %CA_CRT_COMMENT% 5 | keyUsage = critical, keyEncipherment, keyAgreement 6 | extendedKeyUsage = serverAuth 7 | 8 | issuerAltName = issuer:copy 9 | subjectAltName = @server_altname 10 | subjectKeyIdentifier = hash 11 | authorityKeyIdentifier = keyid,issuer:always 12 | authorityInfoAccess = caIssuers;URI:%CA_CRT_URI% 13 | crlDistributionPoints = URI:%CA_CRL_URI% 14 | 15 | [ server_altname ] 16 | URI=%CA_CRT_URI% 17 | email=move 18 | %CA_CRT_ALT_NAMES% 19 | 20 | -------------------------------------------------------------------------------- /tpl/client-ext.tpl: -------------------------------------------------------------------------------- 1 | basicConstraints = critical, CA:FALSE 2 | nsCertType = client 3 | nsRevocationUrl = %CA_CRL_URI% 4 | %CA_CRT_COMMENT% 5 | keyUsage = critical, keyEncipherment, keyAgreement, digitalSignature 6 | extendedKeyUsage = clientAuth, timeStamping 7 | 8 | issuerAltName = issuer:copy 9 | subjectAltName = @client_altname 10 | subjectKeyIdentifier = hash 11 | authorityKeyIdentifier = keyid,issuer:always 12 | authorityInfoAccess = caIssuers;URI:%CA_CRT_URI% 13 | crlDistributionPoints = URI:%CA_CRL_URI% 14 | 15 | [ client_altname ] 16 | URI=%CA_CRT_URI% 17 | email=move 18 | %CA_CRT_ALT_NAMES% 19 | -------------------------------------------------------------------------------- /tpl/user-ext.tpl: -------------------------------------------------------------------------------- 1 | basicConstraints = critical, CA:FALSE 2 | nsCertType = client, objsign, email 3 | nsRevocationUrl = %CA_CRL_URI% 4 | %CA_CRT_COMMENT% 5 | keyUsage = critical, keyEncipherment, keyAgreement, digitalSignature, nonRepudiation, dataEncipherment 6 | extendedKeyUsage = clientAuth, codeSigning, emailProtection 7 | 8 | issuerAltName = issuer:copy 9 | subjectAltName = @user_altname 10 | subjectKeyIdentifier = hash 11 | authorityKeyIdentifier = keyid,issuer:always 12 | authorityInfoAccess = caIssuers;URI:%CA_CRT_URI% 13 | crlDistributionPoints = URI:%CA_CRL_URI% 14 | 15 | [ user_altname ] 16 | URI=%CA_CRT_URI% 17 | email=move 18 | 19 | -------------------------------------------------------------------------------- /ca-scripts.spec: -------------------------------------------------------------------------------- 1 | Summary: SSL Certificate Authority Management Scripts 2 | Name: ca-scripts 3 | Version: 0.9.0 4 | Release: 1 5 | URL: https://github.com/erenfro/ca-scripts 6 | License: GPL 7 | Group: Applications/Internet 8 | BuildRoot: ${_tmppath}/${name}-root 9 | Requires: bash 10 | BuildArch: noarch 11 | 12 | %description 13 | SS Certificate Authority Management Scripts 14 | 15 | %prep 16 | %setup 17 | %build 18 | 19 | %install 20 | rm -rf ${RPM_BUILD_ROOT} 21 | mkdir -p ${RPM_BUILD_ROOT}/opt/ca-scripts 22 | make install 23 | 24 | %clean 25 | rm -rf ${RPM_BUILD_ROOT} 26 | 27 | %fils 28 | %defattr(-,root,root) 29 | %attr(755,root,root) ${RPM_BUILD_ROOT}/opt/${RPM_PACKAGE_NAME}/bin 30 | 31 | %changelog 32 | * Thu Feb 19 2015 Eric Renfro 33 | - Initial release. 34 | 35 | -------------------------------------------------------------------------------- /tpl/index-html.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | %CA_DESC% 4 | 11 | 12 | 13 | 14 |

%CA_DESC%

15 |

CA Certificate

16 |

The CA certificate can be found 17 | here

18 |

MD5 Fingerprint: %CA_CRT_MD5_FP%

19 |

SHA1 Fingerprint: %CA_CRT_SHA_FP%

20 |

Certificate Revocation List

21 |

The certificate revocation list can be found 22 | here (DER encoded) 23 | or here (PEM encoded)

24 |

MD5 Fingerprint: %CA_CRL_MD5_FP%

25 |

SHA1 Fingerprint: %CA_CRL_SHA_FP%

26 | 27 | 28 | -------------------------------------------------------------------------------- /tpl/req-config.tpl: -------------------------------------------------------------------------------- 1 | [ req ] 2 | default_bits = %CA_CRT_BITS% 3 | default_md = sha1 4 | distinguished_name = req_dn 5 | req_extensions = req_%CA_CRT_TYPE%_extensions 6 | string_mask = nombstr 7 | prompt = no 8 | 9 | [ req_dn ] 10 | C = %CA_CRT_C% 11 | ST = %CA_CRT_ST% 12 | L = %CA_CRT_L% 13 | O = %CA_CRT_O% 14 | OU = %CA_CRT_OU% 15 | CN = %CA_CRT_CN% 16 | emailAddress = %CA_CRT_E% 17 | 18 | [ req_server_extensions ] 19 | basicConstraints = critical, CA:FALSE 20 | keyUsage = critical, keyEncipherment, keyAgreement 21 | extendedKeyUsage = serverAuth 22 | 23 | [ req_client_extensions ] 24 | basicConstraints = critical, CA:FALSE 25 | keyUsage = critical, keyEncipherment, keyAgreement, digitalSignature 26 | extendedKeyUsage = clientAuth, timeStamping 27 | 28 | [ req_user_extensions ] 29 | basicConstraints = critical, CA:FALSE 30 | keyUsage = critical, keyEncipherment, keyAgreement, digitalSignature, nonRepudiation, dataEncipherment 31 | extendedKeyUsage = clientAuth, codeSigning, emailProtection 32 | 33 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | NAME=ca-scripts 2 | VERSION=0.9.0 3 | 4 | DIRS=bin lib tpl 5 | INSTALL_DIRS=`find $(DIRS) -type d 2>/dev/null` 6 | INSTALL_FILES=`find $(DIRS) -type f 2>/dev/null` 7 | DOC_FILES=*.conf *.md doc/*.pod 8 | SCRIPTS=ca-create-cert ca-init ca-list-certs ca-renew-cert ca-revoke-cert 9 | 10 | PKG_DIR=ca-scripts 11 | PKG_NAME=$(NAME)_$(VERSION) 12 | PKG=$(PKG_DIR)/$(PKG_NAME).tar.gz 13 | SIG=$(PKG_DIR)/$(PKG_NAME).asc 14 | 15 | PREFIX?=/opt/$(NAME) 16 | DOC_DIR=$(PREFIX)/doc 17 | #DOC_DIR=$(PREFIX)/share/doc/$(PKG_NAME) 18 | 19 | pkg: 20 | mkdir -p $(PKG_DIR) 21 | 22 | $(PKG): pkg 23 | git archive --output=$(PKG) --prefix=$(PKG_NAME)/ HEAD 24 | 25 | build: $(PKG) 26 | 27 | $(SIG): $(PKG) 28 | gpg --sign --detach-sign --armor $(PKG) 29 | 30 | sign: $(SIG) 31 | 32 | clean: 33 | rm -f $(PKG) $(SIG) 34 | 35 | all: $(PKG) $(SIG) 36 | 37 | test: 38 | 39 | tag: 40 | git tag v$(VERSION) 41 | git push --tags 42 | 43 | release: $(PKG) $(SIG) tag 44 | 45 | install: 46 | for dir in $(INSTALL_DIRS); do mkdir -p $(PREFIX)/$$dir; done 47 | for file in $(INSTALL_FILES); do cp $$file $(PREFIX)/$$file; done 48 | mkdir -p $(DOC_DIR) 49 | cp -r $(DOC_FILES) $(DOC_DIR)/ 50 | 51 | symlinks: 52 | for link in $(SCRIPTS); do ln -s $(PREFIX)/bin/$$link /usr/local/bin/$$link 53 | 54 | uninstall: 55 | for file in $(INSTALL_FILES); do rm -f $(PREFIX)/$$file; done 56 | rm -rf $(DOC_DIR) 57 | 58 | rmsymlinks: 59 | for link in $(SCRIPTS); do rm -f /usr/local/bin/$$link 60 | 61 | 62 | .PHONY: build sign clean test tag release install uninstall all 63 | 64 | -------------------------------------------------------------------------------- /bin/ca-list-certs: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | source $(dirname $(readlink -f $0))/../lib/ca-functions 4 | 5 | usage() { 6 | cat <<__EOT__ 7 | Usage: $PROGNAME [options] | 8 | 9 | Options: 10 | -h, --help Print this helpful message! 11 | -f, --config FILE Use config file instead of $CONFFILE 12 | -t, --type TYPE Certificate type: "server" (default), "client" or "user" 13 | -e, --expiring Show certificates that are expiring within 90 days 14 | 15 | __EOT__ 16 | } 17 | 18 | short="hf:e" 19 | long="help,config:,expiring" 20 | opts=$( getopt -o "$short" -l "$long" -n "$PROGNAME" -- "$@" ) 21 | if [ 0 -ne $? ]; then echo; usage; exit 1; fi 22 | eval set -- "$opts"; 23 | 24 | while :; do 25 | case "$1" in 26 | -h|--help) usage; exit 0;; 27 | -f|--config) shift; CONFFILE="$1"; CONFFILECLI=1; shift;; 28 | -e|--expiring) shift; USER_EXPIRE="1"; shift;; 29 | --) shift; break;; 30 | *) echo "Unknown value '$1'"; exit 1;; 31 | esac 32 | done 33 | 34 | # load up the configuration file 35 | ca_load_conf 36 | 37 | for group in ca server client user; do 38 | case $group in 39 | ca) echo "Certificate Authorities:";; 40 | server) echo; echo "Server Certificates:";; 41 | client) echo; echo "Client Certificates:";; 42 | user) echo; echo "User Certificates:";; 43 | esac 44 | 45 | while read certFile; do 46 | #echo "File: $certFile" 47 | cert_info "$certFile" 48 | done < <(find "$CA_HOME/crt/" -type f -name "*.${group}.crt") 49 | done 50 | 51 | -------------------------------------------------------------------------------- /bin/ca-revoke-cert: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | source $(dirname $(readlink -f $0))/../lib/ca-functions 4 | 5 | usage() { 6 | cat <<__EOT__ 7 | Usage: $PROGNAME [options] | 8 | 9 | Options: 10 | -h, --help Print this helpful message! 11 | -f, --config FILE Use config file instead of $CONFFILE 12 | -t, --type TYPE Certificate type: "server" (default), "client" or "user" 13 | -l, --crl-days DAYS Make CRL valid for DAYS days instead of CA_CRL_DAYS 14 | -i, --template FILE Use alternative index.html template 15 | -o, --output FILE Generate CA index.html in FILE 16 | 17 | __EOT__ 18 | } 19 | 20 | short="hf:t:l:i:o:" 21 | long="help,config:,type:,crl-days:,template:,output:" 22 | opts=$( getopt -o "$short" -l "$long" -n "$PROGNAME" -- "$@" ) 23 | if [ 0 -ne $? ]; then echo; usage; exit 1; fi 24 | eval set -- "$opts"; 25 | 26 | while :; do 27 | case "$1" in 28 | -h|--help) usage; exit 0;; 29 | -f|--config) shift; CONFFILE="$1"; CONFFILECLI=1; shift;; 30 | -t|--type) shift; USER_CA_CRT_TYPE="$1"; shift;; 31 | -l|--crl-days) shift; USER_CA_CRL_DAYS="$1"; shift;; 32 | -i|--template) shift; INDEXTPL="$1"; shift;; 33 | -o|--output) shift; INDEXOUT="$1"; shift;; 34 | --) shift; break;; 35 | *) echo "Unknown value '$1'"; exit 1;; 36 | esac 37 | done 38 | 39 | ca_load_conf 40 | 41 | CNF_NAME=$( ca_find_cnf "$1" ) 42 | CRT="$CA_HOME/crt/$CNF_NAME.crt" 43 | 44 | openssl ca -config $CA_HOME/cnf/$CA_NAME.ca.cnf \ 45 | -revoke $CRT -crl_reason superseded 46 | 47 | ca_gen_crl 48 | if [ -n "$INDEXOUT" ]; then 49 | ca_checksum 50 | ca_template $INDEXTPL $INDEXOUT 51 | fi 52 | 53 | -------------------------------------------------------------------------------- /ca-scripts.conf: -------------------------------------------------------------------------------- 1 | # example ca-scripts configuration file 2 | # see ca-scripts.conf(5) for details 3 | 4 | # REQUIRED: CA_HOME provides the path to the root of the CA directory tree 5 | # this directory must exist and be writeable 6 | #CA_HOME="/etc/ssl/ca-scripts" 7 | CA_HOME="/tmp/ca" 8 | 9 | # REQUIRED: CA_DOMAIN provides a template for other optional variables and 10 | # the filenames that are generated within the directory tree 11 | CA_DOMAIN="example.com" 12 | 13 | # REQUIRED: CA_DN_* configures the Distinguished Name fields present in the 14 | # CA certificate generated by ca-init 15 | CA_DN_C="GB" 16 | CA_DN_ST="London" 17 | CA_DN_L="Example House, Mayfair" 18 | CA_DN_O="Example Security Services Ltd." 19 | CA_DN_OU="Example Internet Encryption Division" 20 | CA_DN_CN="Example Security Services Root Certificate Authority" 21 | 22 | # OPTIONAL: CA_DESC configures a single-line description for your CA 23 | # using the CN= or O= line from your DN is recommended 24 | # Default value: 25 | # CA_DESC="$CA_DN_CN" 26 | 27 | # OPTIONAL: CA_EMAIL provides an e-mail address that is embedded into all 28 | # generated certificates as a point-of-contact 29 | # Default value: 30 | # CA_EMAIL="ca@$CA_DOMAIN" 31 | 32 | # OPTIONAL: CA_CRT_URI and CA_CRL_URI provide locations where the CA 33 | # certificate and revocation lists can be found 34 | # Default value: 35 | # CA_CRT_URI="http://$CA_DOMAIN/ca/$CA_NAME.ca.crt" 36 | # CA_CRL_URI="http://$CA_DOMAIN/ca/$CA_NAME.ca.crl" 37 | 38 | # OPTIONAL: CA_DAYS, CA_CRT_DAYS and CA_CRL_DAYS set the default validity 39 | # period for the CA cert, certificates and revocation lists. 40 | # Default value: 41 | # CA_DAYS=3652 42 | # CA_CRT_DAYS=365 43 | # CA_CRL_DAYS=365 44 | 45 | # OPTIONAL: CA_CRT_BITS sets the default key length for generated keys. 46 | # Default value: 47 | # CA_CRT_BITS=2048 48 | 49 | # OPTIONAL: CA_DEFAULT_MD sets the default message digest of generated 50 | # certificates. 51 | # Default value: 52 | CA_DEFAULT_MD="sha256" 53 | 54 | # OPTIONAL: CA_CRT_TYPE sets the default type of generated certificate. 55 | # Default value: 56 | # CA_CRT_TYPE="server" 57 | 58 | # OPTIONAL: CA_PATHLEN sets the maximum number of intermediate CA certificates 59 | # that can be in the chain of authority between the root CA and the 60 | # final certificate. 61 | # Default value: 62 | # CA_PATHLEN=0 63 | -------------------------------------------------------------------------------- /bin/ca-renew-cert: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | source $(dirname $(readlink -f $0))/../lib/ca-functions 4 | 5 | usage() { 6 | cat <<__EOT__ 7 | Usage: $PROGNAME [options] | 8 | 9 | Options: 10 | -h, --help Print this helpful message! 11 | -f, --config FILE Use config file instead of $CONFFILE 12 | -t, --type TYPE Certificate type: "server" (default), "client" or "user" 13 | -d, --days DAYS Renew certificate for DAYS days instead of CA_CRT_DAYS 14 | 15 | __EOT__ 16 | } 17 | 18 | short="hf:t:d:" 19 | long="help,config:,type:,days:" 20 | opts=$( getopt -o "$short" -l "$long" -n "$PROGNAME" -- "$@" ) 21 | if [ 0 -ne $? ]; then echo; usage; exit 1; fi 22 | eval set -- "$opts"; 23 | 24 | while :; do 25 | case "$1" in 26 | -h|--help) usage; exit 0;; 27 | -f|--config) shift; CONFFILE="$1"; CONFFILECLI=1; shift;; 28 | -t|--type) shift; USER_CA_CRT_TYPE="$1"; shift;; 29 | -d|--days) shift; USER_CA_CRT_DAYS="$1"; shift;; 30 | --) shift; break;; 31 | *) echo "Unknown value '$1'"; exit 1;; 32 | esac 33 | done 34 | 35 | ca_load_conf 36 | 37 | CNF_NAME=$( ca_find_cnf "$1" ) 38 | CRT="$CA_HOME/crt/$CNF_NAME.crt" 39 | 40 | # make sure that configuration files are present as expected 41 | if [ ! -f "$CA_HOME/cnf/$CNF_NAME.ext.cnf" ]; then 42 | error "Couldn't find extensions in $CA_HOME/cnf/$CNF_NAME-ext.cnf" 43 | fi 44 | 45 | # according to the below URL we should create the new CRT using the old CSR 46 | # and with the same serial as the previous certificate. 47 | # http://blog.fupps.com/2007/11/30/x509ssl-certificate-prolongation/ 48 | # After some fun googling, I found the following URL which tells us how... 49 | # http://ca.dutchgrid.nl/info/CA_gymnastics.html 50 | # XXX: this is only *really* relevant for certs that have been used for code 51 | # or e-mail encryption. should we regenerate client/server certs entirely? 52 | # ... for the moment there's always the revoke/recreate route for people. 53 | 54 | # acquire required info from old certificate 55 | ENDDATE=$( openssl x509 -in "$CRT" -noout -enddate | cut -d= -f2 ) 56 | SERIAL=$( openssl x509 -in "$CRT" -noout -serial | cut -d= -f2 ) 57 | # work out new expiry date based on expiry date of current cert 58 | # these dates are " " 59 | export TZ=UTC 60 | NOWYEAR=$( date +%Y ) 61 | NOWDAYS=$( date +%j ) 62 | # XXX: this only works with GNU date, BSD portability fail. 63 | ENDYEAR=$( date +%Y -d "$ENDDATE + $CA_CRT_DAYS days" ) 64 | ENDDAYS=$( date +%j -d "$ENDDATE + $CA_CRT_DAYS days" ) 65 | CERTDATE=$( date +%Y-%m-%d -d "$ENDDATE" ) 66 | 67 | # and this does the maths to work out how many days there are from now 68 | # (when we're creating the new cert) to the new expiry date 69 | DAYS=$(( ($ENDYEAR-$NOWYEAR)*365 + ($ENDDAYS-$NOWDAYS) )) 70 | 71 | # Now perform required CA gymnastics ;p 72 | openssl x509 -req -set_serial "0x$SERIAL" -days "$DAYS" \ 73 | -CA "$CA_HOME/crt/$CA_NAME.ca.crt" \ 74 | -CAkey "$CA_HOME/key/$CA_NAME.ca.key" \ 75 | -extfile "$CA_HOME/cnf/$CNF_NAME.ext.cnf" \ 76 | -out "$CA_HOME/crt/$CNF_NAME.crt" \ 77 | -in "$CA_HOME/csr/$CNF_NAME.csr" 78 | 79 | # This doesn't update the original certificate in the index, so let's do that 80 | mv "$CA_HOME/idx/$SERIAL.pem" "$CA_HOME/idx/$SERIAL.$CERTDATE.pem" 81 | cp "$CA_HOME/crt/$CNF_NAME.crt" "$CA_HOME/idx/$SERIAL.pem" 82 | -------------------------------------------------------------------------------- /doc/ca-renew-cert.pod: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | if [ -z "$1" -o "$1" == "man" ]; then 4 | exec /usr/bin/pod2man -n CA-RENEW-CERT -s 1 -d "12 February 2010" \ 5 | -r "ca-scripts version 0.9" -c "SSL Certificate Authority utilities" $0 6 | elif [ "$1" == "html" ]; then 7 | exec /usr/bin/pod2html --title "ca-renew-cert(1)" < $0 8 | elif [ "$1" == "text" ]; then 9 | exec /usr/bin/pod2text -o $0 10 | fi 11 | echo "Unrecognised output format '$1', try man, html, or text." 12 | exit 1 13 | 14 | =pod 15 | 16 | =head1 NAME 17 | 18 | ca-renew-cert - renew a previously generated X.509 certificate 19 | 20 | =head1 SYNOPSIS 21 | 22 | B [B<-f> I] [B<-t> I] [B<-d> I] 23 | I| 24 | 25 | B [B<-h>] | [B<--help>] 26 | 27 | =head1 DESCRIPTION 28 | 29 | B renews certificates generated with ca-create-cert(1), 30 | extending their validity for a configurable number of days, defaulting to 31 | B. 32 | 33 | =head1 OPTIONS 34 | 35 | B can infer the correct cached configurations to use for 36 | certificate renewal from the hostname of a I or I, the 37 | username of a I, or the path to a previously generated certificate of any 38 | type. 39 | 40 | =over 41 | 42 | =item B<-t> I, B<--type> I 43 | 44 | This argument overrides the type detection if multiple certificate types share 45 | the same common name, telling B what type of certificate it is 46 | renewing, either I, I, or I. 47 | 48 | =item B<-f> I, B<--config> I 49 | 50 | Load the ca-scripts configuration from I instead of 51 | I. 52 | 53 | =item B<-d> I, B<--days> I 54 | 55 | Renew the certificate to be valid for I days instead of the default 56 | B set in the configuration file. 57 | 58 | =back 59 | 60 | =head1 BUGS 61 | 62 | B is currently very careful to re-use the original key and 63 | certificate serial when it renews a certificate. This is not strictly necessary 64 | for most renewals, and may in fact reduce the long-term security of your SSL 65 | certificates. 66 | 67 | The usual renewal process is to re-generate a new CSR and private 68 | key with the same DN and sign it as valid for the required time period. 69 | This has the unfortunate side-effect of rendering unreadable all S/MIME e-mail 70 | and data encrypted with the previous certificate and private key. It will also 71 | invalidate any old digital signatures created with the previous certificate. 72 | Instead, B re-signs the old CSR with the same serial and a new 73 | validity period, which ensures that no data is lost. 74 | 75 | Arguably, it would be better to support both modes of renewal, and re-generate 76 | a new CSR and key for I and I certificates while re-signing old 77 | CSRs for I certificates. This may be implemented in future releases. 78 | 79 | =head1 AVAILABILITY 80 | 81 | New releases of the ca-scripts utilities can be found at 82 | L. 83 | A L 84 | for development versions also exists. 85 | 86 | =head1 AUTHORS 87 | 88 | Copyright 2009, 2010 Alex Bramley a.bramley@gmail.com 89 | 90 | =head1 SEE ALSO 91 | 92 | ca-create-cert(1), ca-scripts.conf(5), openssl(1ssl), ca(1ssl), req(1ssl), 93 | x509(1ssl), config(5ssl), and x509v3_config(5ssl). 94 | 95 | =cut 96 | -------------------------------------------------------------------------------- /doc/ca-revoke-cert.pod: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | if [ -z "$1" -o "$1" == "man" ]; then 4 | exec /usr/bin/pod2man -n CA-REVOKE-CERT -s 1 -d "12 February 2010" \ 5 | -r "ca-scripts version 0.9" -c "SSL Certificate Authority utilities" $0 6 | elif [ "$1" == "html" ]; then 7 | exec /usr/bin/pod2html --title "ca-revoke-cert(1)" < $0 8 | elif [ "$1" == "text" ]; then 9 | exec /usr/bin/pod2text -o $0 10 | fi 11 | echo "Unrecognised output format '$1', try man, html, or text." 12 | exit 1 13 | 14 | =pod 15 | 16 | =head1 NAME 17 | 18 | ca-revoke-cert - revoke a certificate and re-generate CRL 19 | 20 | =head1 SYNOPSIS 21 | 22 | B [B<-f> I] [B<-t> I] [B<-l> I] 23 | [B<-i> I