📄 cca.sh
字号:
#!/bin/sh#### CCA -- Trivial Client CA management for testing purposes## Copyright (c) 1998-2000 Ralf S. Engelschall, All Rights Reserved. ### external toolsopenssl="/usr/local/ssl/bin/openssl"# some optional terminal sequencescase $TERM in xterm|xterm*|vt220|vt220*) T_MD=`echo dummy | awk '{ printf("%c%c%c%c", 27, 91, 49, 109); }'` T_ME=`echo dummy | awk '{ printf("%c%c%c", 27, 91, 109); }'` ;; vt100|vt100*) T_MD=`echo dummy | awk '{ printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }'` T_ME=`echo dummy | awk '{ printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }'` ;; default) T_MD='' T_ME='' ;;esac# find some random files# (do not use /dev/random here, because this device # doesn't work as expected on all platforms)randfiles=''for file in /var/log/messages /var/adm/messages \ /kernel /vmunix /vmlinuz \ /etc/hosts /etc/resolv.conf; do if [ -f $file ]; then if [ ".$randfiles" = . ]; then randfiles="$file" else randfiles="${randfiles}:$file" fi fidoneecho "${T_MD}CCA -- Trivial Client CA management for testing purposes${T_ME}"echo "Copyright (c) 1998-2000 Ralf S. Engelschall, All Rights Reserved."echo ""if [ $# -eq 0 ]; then cmd=dummyelse cmd=$1 shiftficase $cmd in init ) echo "${T_MD}INITIALIZATION${T_ME}" echo "" echo "${T_MD}Generating custom Certificate Authority (CA)${T_ME}" echo "______________________________________________________________________" echo "" echo "${T_MD}STEP 1: Generating RSA private key for CA (1024 bit)${T_ME}" cp /dev/null ca.rnd echo '01' >ca.ser if [ ".$randfiles" != . ]; then $openssl genrsa -rand $randfiles -out ca.key 1024 else $openssl genrsa -out ca.key 1024 fi if [ $? -ne 0 ]; then echo "cca:Error: Failed to generate RSA private key" 1>&2 exit 1 fi echo "______________________________________________________________________" echo "" echo "${T_MD}STEP 2: Generating X.509 certificate signing request for CA${T_ME}" cat >.cfg <<EOT[ req ]default_bits = 1024distinguished_name = req_DNRANDFILE = ca.rnd[ req_DN ]countryName = "1. Country Name (2 letter code)"countryName_default = XYcountryName_min = 2countryName_max = 2stateOrProvinceName = "2. State or Province Name (full name) "stateOrProvinceName_default = Snake DesertlocalityName = "3. Locality Name (eg, city) "localityName_default = Snake Town0.organizationName = "4. Organization Name (eg, company) "0.organizationName_default = Snake Oil, LtdorganizationalUnitName = "5. Organizational Unit Name (eg, section) "organizationalUnitName_default = Certificate AuthoritycommonName = "6. Common Name (eg, CA name) "commonName_max = 64commonName_default = Snake Oil CAemailAddress = "7. Email Address (eg, name@FQDN)"emailAddress_max = 40emailAddress_default = ca@snakeoil.domEOT $openssl req -config .cfg -new -key ca.key -out ca.csr if [ $? -ne 0 ]; then echo "cca:Error: Failed to generate certificate signing request" 1>&2 exit 1 fi echo "______________________________________________________________________" echo "" echo "${T_MD}STEP 3: Generating X.509 certificate for CA signed by itself${T_ME}" cat >.cfg <<EOTextensions = x509v3[ x509v3 ]subjectAltName = email:copybasicConstraints = CA:true,pathlen:0nsComment = "CCA generated custom CA certificate"nsCertType = sslCAEOT $openssl x509 -extfile .cfg -req -days 365 -signkey ca.key -in ca.csr -out ca.crt if [ $? -ne 0 ]; then echo "cca:Error: Failed to generate self-signed CA certificate" 1>&2 exit 1 fi echo "______________________________________________________________________" echo "" echo "${T_MD}RESULT:${T_ME}" $openssl verify ca.crt if [ $? -ne 0 ]; then echo "cca:Error: Failed to verify resulting X.509 certificate" 1>&2 exit 1 fi $openssl x509 -text -in ca.crt $openssl rsa -text -in ca.key ;; gen ) echo "${T_MD}CERTIFICATE GENERATION${T_ME}" user="user-`cat ca.ser`" echo "" echo "${T_MD}Generating custom USER${T_ME} [$user]" echo "______________________________________________________________________" echo "" echo "${T_MD}STEP 5: Generating RSA private key for USER (1024 bit)${T_ME}" if [ ".$randfiles" != . ]; then $openssl genrsa -rand $randfiles -out $user.key 1024 else $openssl genrsa -out $user.key 1024 fi if [ $? -ne 0 ]; then echo "cca:Error: Failed to generate RSA private key" 1>&2 exit 1 fi echo "______________________________________________________________________" echo "" echo "${T_MD}STEP 6: Generating X.509 certificate signing request for USER${T_ME}" cat >.cfg <<EOT[ req ]default_bits = 1024distinguished_name = req_DNRANDFILE = ca.rnd[ req_DN ]countryName = "1. Country Name (2 letter code)"countryName_default = XYcountryName_min = 2countryName_max = 2stateOrProvinceName = "2. State or Province Name (full name) "stateOrProvinceName_default = Snake DesertlocalityName = "3. Locality Name (eg, city) "localityName_default = Snake Town0.organizationName = "4. Organization Name (eg, company) "0.organizationName_default = Snake Oil, LtdorganizationalUnitName = "5. Organizational Unit Name (eg, section) "organizationalUnitName_default = Snake Oil Test DepartementcommonName = "6. Common Name (eg, subject) "commonName_max = 64commonName_default = Dr. Snake OilemailAddress = "7. Email Address (eg, name@fqdn)"emailAddress_max = 40emailAddress_default = dr@snakeoil.domEOT $openssl req -config .cfg -new -key $user.key -out $user.csr if [ $? -ne 0 ]; then echo "cca:Error: Failed to generate certificate signing request" 1>&2 exit 1 fi rm -f .cfg echo "______________________________________________________________________" echo "" echo "${T_MD}STEP 7: Generating X.509 certificate signed by own CA${T_ME}" cat >.cfg <<EOTextensions = x509v3[ x509v3 ]subjectAltName = email:copybasicConstraints = CA:false,pathlen:0nsComment = "CCA generated client certificate"nsCertType = clientEOT $openssl x509 -extfile .cfg -days 365 -CAserial ca.ser -CA ca.crt -CAkey ca.key -in $user.csr -req -out $user.crt if [ $? -ne 0 ]; then echo "cca:Error: Failed to generate X.509 certificate" 1>&2 exit 1 fi caname="`$openssl x509 -noout -text -in ca.crt |\ grep Subject: | sed -e 's;.*CN=;;' -e 's;/Em.*;;'`" username="`$openssl x509 -noout -text -in $user.crt |\ grep Subject: | sed -e 's;.*CN=;;' -e 's;/Em.*;;'`" echo "Assembling PKCS#12 package" $openssl pkcs12 -export -in $user.crt -inkey $user.key -certfile ca.crt -name "$username" -caname "$caname" -out $user.p12 echo "______________________________________________________________________" echo "" echo "${T_MD}RESULT:${T_ME}" $openssl verify -CAfile ca.crt $user.crt if [ $? -ne 0 ]; then echo "cca:Error: Failed to verify resulting X.509 certificate" 1>&2 exit 1 fi $openssl x509 -text -in $user.crt $openssl rsa -text -in $user.key ;; revoke ) echo "${T_MD}CERTIFICATE REVOCATION${T_ME}" echo "" echo "______________________________________________________________________" echo "" echo "${T_MD}STEP 1: Generating revocation index for CA${T_ME}" cat >.cfg <<EOT[ ca ]default_ca = cca[ cca ]dir = .certs = .crl_dir = .new_certs_dir = .certificate = ca.crtprivate_key = ca.keydatabase = ca.idxserial = ca.ser.dummycrl = ca.crlRANDFILE = ca.rnddefault_days = 365default_crl_days= 30default_md = md5preserve = yespolicy = policy_anythingcrl_extensions = crl_ext[ policy_anything ]countryName = optionalstateOrProvinceName = optionallocalityName = optionalorganizationName = optionalorganizationalUnitName = optionalcommonName = suppliedemailAddress = optional[ crl_ext ]issuerAltName=issuer:copyEOT cp /dev/null ca.idx cp ca.ser ca.ser.dummy files="" for crt in $*; do ser=`echo $crt | sed -e 's;^user-;;' -e 's;\.crt$;;'` csr=`echo $crt | sed 's;\.crt$;.csr;'` files="$files $csr" echo "$ser: $crt" $openssl ca -config .cfg -revoke $crt done echo "______________________________________________________________________" echo "" echo "${T_MD}STEP 2: Generating CRL for CA${T_ME} [ca.crl]" $openssl ca -config .cfg -batch -gencrl -out ca.crl -infiles $files rm -f .cfg rm -f ca.idx* rm -f ca.ser.dummy* rm -f [0-9]*.pem echo "______________________________________________________________________" echo "" echo "${T_MD}RESULT:${T_ME}" $openssl crl -text -in ca.crl ;; * ) echo "cca:Error: bad argument line" echo "cca:Usage: $0 init" echo "cca:Usage: $0 gen" echo "cca:Usage: $0 revoke user-XX.crt [...]" exit 1 ;;esac##EOF##
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -