Path: blob/main/crypto/krb5/src/tests/proxy-certs/make-certs.sh
34889 views
#!/bin/sh -e12PWD=`pwd`3NAMETYPE=14KEYSIZE=20485DAYS=40006REALM=KRBTEST.COM7TLS_SERVER_EKU=1.3.6.1.5.5.7.3.18PROXY_EKU_LIST=$TLS_SERVER_EKU910cat > openssl.cnf << EOF11[req]12prompt = no13distinguished_name = \$ENV::SUBJECT1415[ca]16default_ca = test_ca1718[test_ca]19new_certs_dir = $PWD20serial = $PWD/ca.srl21database = $PWD/ca.db22certificate = $PWD/ca.pem23private_key = $PWD/privkey.pem24default_days = $DAYS25x509_extensions = exts_proxy26policy = proxyname27default_md = sha25628unique_subject = no29email_in_dn = no3031[signer]32CN = test CA certificate33C = US34ST = Massachusetts35L = Cambridge36O = MIT37OU = Insecure Kerberos test CA38CN = test suite CA; do not use otherwise3940[proxy]41C = US42ST = Massachusetts43O = KRBTEST.COM44CN = PROXYinSubject4546[localhost]47C = US48ST = Massachusetts49O = KRBTEST.COM50CN = localhost5152[proxyname]53C = supplied54ST = supplied55O = supplied56CN = supplied5758[exts_ca]59subjectKeyIdentifier = hash60authorityKeyIdentifier = keyid:always,issuer:always61keyUsage = nonRepudiation,digitalSignature,keyEncipherment,dataEncipherment,keyAgreement,keyCertSign,cRLSign62basicConstraints = critical,CA:TRUE6364[exts_proxy]65subjectKeyIdentifier = hash66authorityKeyIdentifier = keyid:always,issuer:always67keyUsage = nonRepudiation,digitalSignature,keyEncipherment,keyAgreement68basicConstraints = critical,CA:FALSE69subjectAltName = DNS:proxyŠubjectÄltÑame,DNS:proxySubjectAltName,IP:127.0.0.1,IP:::1,DNS:localhost70extendedKeyUsage = $PROXY_EKU_LIST7172[exts_proxy_no_san]73subjectKeyIdentifier = hash74authorityKeyIdentifier = keyid:always,issuer:always75keyUsage = nonRepudiation,digitalSignature,keyEncipherment,keyAgreement76basicConstraints = critical,CA:FALSE77extendedKeyUsage = $PROXY_EKU_LIST78EOF7980# Generate a private key.81openssl genrsa $KEYSIZE > privkey.pem8283# Generate a "CA" certificate.84SUBJECT=signer openssl req -config openssl.cnf -new -x509 -extensions exts_ca \85-set_serial 1 -days $DAYS -key privkey.pem -out ca.pem8687# Generate proxy certificate signing requests.88SUBJECT=proxy openssl req -config openssl.cnf -new -key privkey.pem \89-out proxy.csr90SUBJECT=localhost openssl req -config openssl.cnf -new -key privkey.pem \91-out localhost.csr9293# Issue the certificate with the right name in a subjectAltName.94echo 02 > ca.srl95cat /dev/null > ca.db96SUBJECT=proxy openssl ca -config openssl.cnf -extensions exts_proxy \97-batch -days $DAYS -notext -out tmp.pem -in proxy.csr98cat privkey.pem tmp.pem > proxy-san.pem99100# Issue a certificate that only has the name in the subject field101SUBJECT=proxy openssl ca -config openssl.cnf -extensions exts_proxy_no_san \102-batch -days $DAYS -notext -out tmp.pem -in localhost.csr103cat privkey.pem tmp.pem > proxy-subject.pem104105# Issue a certificate that doesn't include any matching name values.106SUBJECT=proxy openssl ca -config openssl.cnf -extensions exts_proxy_no_san \107-batch -days $DAYS -notext -out tmp.pem -in proxy.csr108cat privkey.pem tmp.pem > proxy-no-match.pem109110# Issue a certificate that contains all matching name values.111SUBJECT=proxy openssl ca -config openssl.cnf -extensions exts_proxy \112-batch -days $DAYS -notext -out tmp.pem -in localhost.csr113cat privkey.pem tmp.pem > proxy-ideal.pem114115# Corrupt the signature on the certificate.116SUBJECT=proxy openssl x509 -outform der -in proxy-ideal.pem -out bad.der117length=`od -Ad bad.der | tail -n 1 | awk '{print $1}'`118dd if=/dev/zero bs=1 of=bad.der count=16 seek=`expr $length - 16`119SUBJECT=proxy openssl x509 -inform der -in bad.der -out tmp.pem120cat privkey.pem tmp.pem > proxy-badsig.pem121122# Clean up.123rm -f openssl.cnf proxy.csr localhost.csr privkey.pem ca.db ca.db.old ca.srl ca.srl.old ca.db.attr ca.db.attr.old 02.pem 03.pem 04.pem 05.pem tmp.pem bad.der124125126