| #!/bin/bash |
| |
| # |
| # Creates or overwrites 3 files in ./res/raw: |
| # - cacert.der |
| # - userkey.der |
| # - usercert.der |
| # |
| |
| tmpdir=$(mktemp -d './XXXXXXXX') |
| trap 'rm -r ${tmpdir}; echo; exit 1' EXIT INT QUIT |
| |
| # CA_default defined in openssl.cnf |
| CA_DIR='demoCA' |
| |
| SUBJECT=\ |
| '/C=US'\ |
| '/ST=CA'\ |
| '/L=Mountain View'\ |
| '/O=Android'\ |
| '/CN=localhost' |
| PASSWORD='androidtest' |
| SAN=\ |
| 'DNS:localhost' |
| |
| echo "Creating directory '$CA_DIR'..." |
| mkdir -p "$tmpdir"/"$CA_DIR"/newcerts \ |
| && echo '01' > "$tmpdir"/"$CA_DIR"/serial \ |
| && touch "$tmpdir"/"$CA_DIR"/index.txt |
| cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=$SAN") \ |
| > "$tmpdir"/openssl.conf |
| |
| echo "Generating CA certificate..." |
| (cd "$tmpdir" \ |
| && openssl req \ |
| -new \ |
| -x509 \ |
| -days 3650 \ |
| -extensions v3_ca \ |
| -keyout 'cakey.pem' \ |
| -out 'cacert.pem' \ |
| -subj "$SUBJECT" \ |
| -passout 'pass:'"$PASSWORD" \ |
| && openssl x509 \ |
| -outform DER \ |
| -in 'cacert.pem' \ |
| -out 'cacert.der') |
| |
| echo "Generating user key..." |
| (cd "$tmpdir" \ |
| && openssl req \ |
| -newkey rsa:2048 \ |
| -sha256 \ |
| -keyout 'userkey.pem' \ |
| -nodes \ |
| -days 3650 \ |
| -out 'userkey.req' \ |
| -subj "$SUBJECT" \ |
| -extensions SAN \ |
| -config openssl.conf \ |
| && openssl pkcs8 \ |
| -topk8 \ |
| -outform DER \ |
| -in 'userkey.pem' \ |
| -out 'userkey.der' \ |
| -nocrypt) |
| |
| echo "Generating user certificate..." |
| (cd "$tmpdir" \ |
| && openssl ca \ |
| -out 'usercert.pem' \ |
| -in 'userkey.req' \ |
| -cert 'cacert.pem' \ |
| -keyfile 'cakey.pem' \ |
| -days 3650 \ |
| -passin 'pass:'"$PASSWORD" \ |
| -extensions SAN \ |
| -config openssl.conf \ |
| -batch \ |
| && openssl x509 \ |
| -outform DER \ |
| -in 'usercert.pem' \ |
| -out 'usercert.der') |
| |
| # Copy important files to raw resources directory |
| cp \ |
| "$tmpdir"/cacert.der \ |
| "$tmpdir"/userkey.der \ |
| "$tmpdir"/usercert.der \ |
| 'res/raw/' |
| |
| echo "Finished" |
| exit |