1e1051a39Sopenharmony_ci#! /bin/bash 2e1051a39Sopenharmony_ci# 3e1051a39Sopenharmony_ci# Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved. 4e1051a39Sopenharmony_ci# Copyright (c) 2016 Viktor Dukhovni <openssl-users@dukhovni.org>. 5e1051a39Sopenharmony_ci# All rights reserved. 6e1051a39Sopenharmony_ci# 7e1051a39Sopenharmony_ci# Licensed under the Apache License 2.0 (the "License"). You may not use 8e1051a39Sopenharmony_ci# this file except in compliance with the License. You can obtain a copy 9e1051a39Sopenharmony_ci# in the file LICENSE in the source distribution or at 10e1051a39Sopenharmony_ci# https://www.openssl.org/source/license.html 11e1051a39Sopenharmony_ci 12e1051a39Sopenharmony_ci# This file is dual-licensed and is also available under other terms. 13e1051a39Sopenharmony_ci# Please contact the author. 14e1051a39Sopenharmony_ci 15e1051a39Sopenharmony_ci# 100 years should be enough for now 16e1051a39Sopenharmony_ciif [ -z "$DAYS" ]; then 17e1051a39Sopenharmony_ci DAYS=36525 18e1051a39Sopenharmony_cifi 19e1051a39Sopenharmony_ci 20e1051a39Sopenharmony_ciif [ -z "$OPENSSL_SIGALG" ]; then 21e1051a39Sopenharmony_ci OPENSSL_SIGALG=sha256 22e1051a39Sopenharmony_cifi 23e1051a39Sopenharmony_ci 24e1051a39Sopenharmony_ciif [ -z "$REQMASK" ]; then 25e1051a39Sopenharmony_ci REQMASK=utf8only 26e1051a39Sopenharmony_cifi 27e1051a39Sopenharmony_ci 28e1051a39Sopenharmony_cistderr_onerror() { 29e1051a39Sopenharmony_ci ( 30e1051a39Sopenharmony_ci err=$("$@" >&3 2>&1) || { 31e1051a39Sopenharmony_ci printf "%s\n" "$err" >&2 32e1051a39Sopenharmony_ci exit 1 33e1051a39Sopenharmony_ci } 34e1051a39Sopenharmony_ci ) 3>&1 35e1051a39Sopenharmony_ci} 36e1051a39Sopenharmony_ci 37e1051a39Sopenharmony_cikey() { 38e1051a39Sopenharmony_ci local key=$1; shift 39e1051a39Sopenharmony_ci 40e1051a39Sopenharmony_ci local alg=rsa 41e1051a39Sopenharmony_ci if [ -n "$OPENSSL_KEYALG" ]; then 42e1051a39Sopenharmony_ci alg=$OPENSSL_KEYALG 43e1051a39Sopenharmony_ci fi 44e1051a39Sopenharmony_ci 45e1051a39Sopenharmony_ci local bits=2048 46e1051a39Sopenharmony_ci if [ -n "$OPENSSL_KEYBITS" ]; then 47e1051a39Sopenharmony_ci bits=$OPENSSL_KEYBITS 48e1051a39Sopenharmony_ci fi 49e1051a39Sopenharmony_ci 50e1051a39Sopenharmony_ci if [ ! -f "${key}.pem" ]; then 51e1051a39Sopenharmony_ci args=(-algorithm "$alg") 52e1051a39Sopenharmony_ci case $alg in 53e1051a39Sopenharmony_ci rsa) args=("${args[@]}" -pkeyopt rsa_keygen_bits:$bits );; 54e1051a39Sopenharmony_ci ec) args=("${args[@]}" -pkeyopt "ec_paramgen_curve:$bits") 55e1051a39Sopenharmony_ci args=("${args[@]}" -pkeyopt ec_param_enc:named_curve);; 56e1051a39Sopenharmony_ci dsa) args=(-paramfile "$bits");; 57e1051a39Sopenharmony_ci ed25519) ;; 58e1051a39Sopenharmony_ci ed448) ;; 59e1051a39Sopenharmony_ci *) printf "Unsupported key algorithm: %s\n" "$alg" >&2; return 1;; 60e1051a39Sopenharmony_ci esac 61e1051a39Sopenharmony_ci stderr_onerror \ 62e1051a39Sopenharmony_ci openssl genpkey "${args[@]}" -out "${key}.pem" 63e1051a39Sopenharmony_ci fi 64e1051a39Sopenharmony_ci} 65e1051a39Sopenharmony_ci 66e1051a39Sopenharmony_ci# Usage: $0 req keyname dn1 dn2 ... 67e1051a39Sopenharmony_cireq() { 68e1051a39Sopenharmony_ci local key=$1; shift 69e1051a39Sopenharmony_ci 70e1051a39Sopenharmony_ci key "$key" 71e1051a39Sopenharmony_ci local errs 72e1051a39Sopenharmony_ci 73e1051a39Sopenharmony_ci stderr_onerror \ 74e1051a39Sopenharmony_ci openssl req -new -"${OPENSSL_SIGALG}" -key "${key}.pem" \ 75e1051a39Sopenharmony_ci -config <(printf "string_mask=%s\n[req]\n%s\n%s\n[dn]\n" \ 76e1051a39Sopenharmony_ci "$REQMASK" "prompt = no" "distinguished_name = dn" 77e1051a39Sopenharmony_ci for dn in "$@"; do echo "$dn"; done) 78e1051a39Sopenharmony_ci} 79e1051a39Sopenharmony_ci 80e1051a39Sopenharmony_cireq_nocn() { 81e1051a39Sopenharmony_ci local key=$1; shift 82e1051a39Sopenharmony_ci 83e1051a39Sopenharmony_ci key "$key" 84e1051a39Sopenharmony_ci stderr_onerror \ 85e1051a39Sopenharmony_ci openssl req -new -"${OPENSSL_SIGALG}" -subj / -key "${key}.pem" \ 86e1051a39Sopenharmony_ci -config <(printf "[req]\n%s\n[dn]\nCN_default =\n" \ 87e1051a39Sopenharmony_ci "distinguished_name = dn") 88e1051a39Sopenharmony_ci} 89e1051a39Sopenharmony_ci 90e1051a39Sopenharmony_cicert() { 91e1051a39Sopenharmony_ci local cert=$1; shift 92e1051a39Sopenharmony_ci local exts=$1; shift 93e1051a39Sopenharmony_ci 94e1051a39Sopenharmony_ci stderr_onerror \ 95e1051a39Sopenharmony_ci openssl x509 -req -"${OPENSSL_SIGALG}" -out "${cert}.pem" \ 96e1051a39Sopenharmony_ci -extfile <(printf "%s\n" "$exts") "$@" 97e1051a39Sopenharmony_ci} 98e1051a39Sopenharmony_ci 99e1051a39Sopenharmony_cigenroot() { 100e1051a39Sopenharmony_ci local cn=$1; shift 101e1051a39Sopenharmony_ci local key=$1; shift 102e1051a39Sopenharmony_ci local cert=$1; shift 103e1051a39Sopenharmony_ci local bcon="basicConstraints = critical,CA:true" 104e1051a39Sopenharmony_ci local ku="keyUsage = keyCertSign,cRLSign" 105e1051a39Sopenharmony_ci local skid="subjectKeyIdentifier = hash" 106e1051a39Sopenharmony_ci local akid="authorityKeyIdentifier = keyid" 107e1051a39Sopenharmony_ci 108e1051a39Sopenharmony_ci exts=$(printf "%s\n%s\n%s\n" "$bcon" "$ku" "$skid" "$akid") 109e1051a39Sopenharmony_ci for eku in "$@" 110e1051a39Sopenharmony_ci do 111e1051a39Sopenharmony_ci exts=$(printf "%s\nextendedKeyUsage = %s\n" "$exts" "$eku") 112e1051a39Sopenharmony_ci done 113e1051a39Sopenharmony_ci csr=$(req "$key" "CN = $cn") || return 1 114e1051a39Sopenharmony_ci echo "$csr" | 115e1051a39Sopenharmony_ci cert "$cert" "$exts" -signkey "${key}.pem" -set_serial 1 -days "${DAYS}" 116e1051a39Sopenharmony_ci} 117e1051a39Sopenharmony_ci 118e1051a39Sopenharmony_cigenca() { 119e1051a39Sopenharmony_ci local OPTIND=1 120e1051a39Sopenharmony_ci local purpose= 121e1051a39Sopenharmony_ci 122e1051a39Sopenharmony_ci while getopts p:c: o 123e1051a39Sopenharmony_ci do 124e1051a39Sopenharmony_ci case $o in 125e1051a39Sopenharmony_ci p) purpose="$OPTARG";; 126e1051a39Sopenharmony_ci c) certpol="$OPTARG";; 127e1051a39Sopenharmony_ci *) echo "Usage: $0 genca [-p EKU][-c policyoid] cn keyname certname cakeyname cacertname" >&2 128e1051a39Sopenharmony_ci return 1;; 129e1051a39Sopenharmony_ci esac 130e1051a39Sopenharmony_ci done 131e1051a39Sopenharmony_ci 132e1051a39Sopenharmony_ci shift $((OPTIND - 1)) 133e1051a39Sopenharmony_ci local cn=$1; shift 134e1051a39Sopenharmony_ci local key=$1; shift 135e1051a39Sopenharmony_ci local cert=$1; shift 136e1051a39Sopenharmony_ci local cakey=$1; shift 137e1051a39Sopenharmony_ci local cacert=$1; shift 138e1051a39Sopenharmony_ci local bcon="basicConstraints = critical,CA:true" 139e1051a39Sopenharmony_ci local ku="keyUsage = keyCertSign,cRLSign" 140e1051a39Sopenharmony_ci local skid="subjectKeyIdentifier = hash" 141e1051a39Sopenharmony_ci local akid="authorityKeyIdentifier = keyid" 142e1051a39Sopenharmony_ci 143e1051a39Sopenharmony_ci exts=$(printf "%s\n%s\n%s\n" "$bcon" "$ku" "$skid" "$akid") 144e1051a39Sopenharmony_ci if [ -n "$purpose" ]; then 145e1051a39Sopenharmony_ci exts=$(printf "%s\nextendedKeyUsage = %s\n" "$exts" "$purpose") 146e1051a39Sopenharmony_ci fi 147e1051a39Sopenharmony_ci if [ -n "$NC" ]; then 148e1051a39Sopenharmony_ci exts=$(printf "%s\nnameConstraints = %s\n" "$exts" "$NC") 149e1051a39Sopenharmony_ci fi 150e1051a39Sopenharmony_ci if [ -n "$certpol" ]; then 151e1051a39Sopenharmony_ci exts=$(printf "%s\ncertificatePolicies = %s\n" "$exts" "$certpol") 152e1051a39Sopenharmony_ci fi 153e1051a39Sopenharmony_ci 154e1051a39Sopenharmony_ci csr=$(req "$key" "CN = $cn") || return 1 155e1051a39Sopenharmony_ci echo "$csr" | 156e1051a39Sopenharmony_ci cert "$cert" "$exts" -CA "${cacert}.pem" -CAkey "${cakey}.pem" \ 157e1051a39Sopenharmony_ci -set_serial 2 -days "${DAYS}" "$@" 158e1051a39Sopenharmony_ci} 159e1051a39Sopenharmony_ci 160e1051a39Sopenharmony_cigen_nonbc_ca() { 161e1051a39Sopenharmony_ci local cn=$1; shift 162e1051a39Sopenharmony_ci local key=$1; shift 163e1051a39Sopenharmony_ci local cert=$1; shift 164e1051a39Sopenharmony_ci local cakey=$1; shift 165e1051a39Sopenharmony_ci local cacert=$1; shift 166e1051a39Sopenharmony_ci local skid="subjectKeyIdentifier = hash" 167e1051a39Sopenharmony_ci local akid="authorityKeyIdentifier = keyid" 168e1051a39Sopenharmony_ci 169e1051a39Sopenharmony_ci exts=$(printf "%s\n%s\n%s\n" "$skid" "$akid") 170e1051a39Sopenharmony_ci exts=$(printf "%s\nkeyUsage = %s\n" "$exts" "keyCertSign, cRLSign") 171e1051a39Sopenharmony_ci for eku in "$@" 172e1051a39Sopenharmony_ci do 173e1051a39Sopenharmony_ci exts=$(printf "%s\nextendedKeyUsage = %s\n" "$exts" "$eku") 174e1051a39Sopenharmony_ci done 175e1051a39Sopenharmony_ci csr=$(req "$key" "CN = $cn") || return 1 176e1051a39Sopenharmony_ci echo "$csr" | 177e1051a39Sopenharmony_ci cert "$cert" "$exts" -CA "${cacert}.pem" -CAkey "${cakey}.pem" \ 178e1051a39Sopenharmony_ci -set_serial 2 -days "${DAYS}" 179e1051a39Sopenharmony_ci} 180e1051a39Sopenharmony_ci 181e1051a39Sopenharmony_ci# Usage: $0 genpc keyname certname eekeyname eecertname pcext1 pcext2 ... 182e1051a39Sopenharmony_ci# 183e1051a39Sopenharmony_ci# Note: takes csr on stdin, so must be used with $0 req like this: 184e1051a39Sopenharmony_ci# 185e1051a39Sopenharmony_ci# $0 req keyname dn | $0 genpc keyname certname eekeyname eecertname pcext ... 186e1051a39Sopenharmony_cigenpc() { 187e1051a39Sopenharmony_ci local key=$1; shift 188e1051a39Sopenharmony_ci local cert=$1; shift 189e1051a39Sopenharmony_ci local cakey=$1; shift 190e1051a39Sopenharmony_ci local ca=$1; shift 191e1051a39Sopenharmony_ci 192e1051a39Sopenharmony_ci exts=$(printf "%s\n%s\n%s\n%s\n" \ 193e1051a39Sopenharmony_ci "subjectKeyIdentifier = hash" \ 194e1051a39Sopenharmony_ci "authorityKeyIdentifier = keyid, issuer:always" \ 195e1051a39Sopenharmony_ci "basicConstraints = CA:false" \ 196e1051a39Sopenharmony_ci "proxyCertInfo = critical, @pcexts"; 197e1051a39Sopenharmony_ci echo "[pcexts]"; 198e1051a39Sopenharmony_ci for x in "$@"; do echo $x; done) 199e1051a39Sopenharmony_ci cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \ 200e1051a39Sopenharmony_ci -set_serial 2 -days "${DAYS}" 201e1051a39Sopenharmony_ci} 202e1051a39Sopenharmony_ci 203e1051a39Sopenharmony_cigeneeconfig() { 204e1051a39Sopenharmony_ci local key=$1; shift 205e1051a39Sopenharmony_ci local cert=$1; shift 206e1051a39Sopenharmony_ci local cakey=$1; shift 207e1051a39Sopenharmony_ci local ca=$1; shift 208e1051a39Sopenharmony_ci local conf=$1; shift 209e1051a39Sopenharmony_ci 210e1051a39Sopenharmony_ci exts=$(printf "%s\n%s\n%s\n%s\n" \ 211e1051a39Sopenharmony_ci "subjectKeyIdentifier = hash" \ 212e1051a39Sopenharmony_ci "authorityKeyIdentifier = keyid" \ 213e1051a39Sopenharmony_ci "basicConstraints = CA:false"; \ 214e1051a39Sopenharmony_ci echo "$conf") 215e1051a39Sopenharmony_ci 216e1051a39Sopenharmony_ci cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \ 217e1051a39Sopenharmony_ci -set_serial 2 -days "${DAYS}" 218e1051a39Sopenharmony_ci} 219e1051a39Sopenharmony_ci 220e1051a39Sopenharmony_ci# Usage: $0 geneealt keyname certname cakeyname cacertname alt1 alt2 ... 221e1051a39Sopenharmony_ci# 222e1051a39Sopenharmony_ci# Note: takes csr on stdin, so must be used with $0 req like this: 223e1051a39Sopenharmony_ci# 224e1051a39Sopenharmony_ci# $0 req keyname dn | $0 geneealt keyname certname cakeyname cacertname alt ... 225e1051a39Sopenharmony_cigeneealt() { 226e1051a39Sopenharmony_ci local key=$1; shift 227e1051a39Sopenharmony_ci local cert=$1; shift 228e1051a39Sopenharmony_ci local cakey=$1; shift 229e1051a39Sopenharmony_ci local ca=$1; shift 230e1051a39Sopenharmony_ci 231e1051a39Sopenharmony_ci conf=$(echo "subjectAltName = @alts" 232e1051a39Sopenharmony_ci echo "[alts]"; 233e1051a39Sopenharmony_ci for x in "$@"; do echo "$x"; done) 234e1051a39Sopenharmony_ci 235e1051a39Sopenharmony_ci geneeconfig $key $cert $cakey $ca "$conf" 236e1051a39Sopenharmony_ci} 237e1051a39Sopenharmony_ci 238e1051a39Sopenharmony_cigenee() { 239e1051a39Sopenharmony_ci local OPTIND=1 240e1051a39Sopenharmony_ci local purpose=serverAuth 241e1051a39Sopenharmony_ci 242e1051a39Sopenharmony_ci while getopts p: o 243e1051a39Sopenharmony_ci do 244e1051a39Sopenharmony_ci case $o in 245e1051a39Sopenharmony_ci p) purpose="$OPTARG";; 246e1051a39Sopenharmony_ci *) echo "Usage: $0 genee [-p EKU] cn keyname certname cakeyname cacertname" >&2 247e1051a39Sopenharmony_ci return 1;; 248e1051a39Sopenharmony_ci esac 249e1051a39Sopenharmony_ci done 250e1051a39Sopenharmony_ci 251e1051a39Sopenharmony_ci shift $((OPTIND - 1)) 252e1051a39Sopenharmony_ci local cn=$1; shift 253e1051a39Sopenharmony_ci local key=$1; shift 254e1051a39Sopenharmony_ci local cert=$1; shift 255e1051a39Sopenharmony_ci local cakey=$1; shift 256e1051a39Sopenharmony_ci local ca=$1; shift 257e1051a39Sopenharmony_ci 258e1051a39Sopenharmony_ci exts=$(printf "%s\n%s\n%s\n%s\n%s\n[alts]\n%s\n" \ 259e1051a39Sopenharmony_ci "subjectKeyIdentifier = hash" \ 260e1051a39Sopenharmony_ci "authorityKeyIdentifier = keyid, issuer" \ 261e1051a39Sopenharmony_ci "basicConstraints = CA:false" \ 262e1051a39Sopenharmony_ci "extendedKeyUsage = $purpose" \ 263e1051a39Sopenharmony_ci "subjectAltName = @alts" "DNS=${cn}") 264e1051a39Sopenharmony_ci csr=$(req "$key" "CN = $cn") || return 1 265e1051a39Sopenharmony_ci echo "$csr" | 266e1051a39Sopenharmony_ci cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \ 267e1051a39Sopenharmony_ci -set_serial 2 -days "${DAYS}" "$@" 268e1051a39Sopenharmony_ci} 269e1051a39Sopenharmony_ci 270e1051a39Sopenharmony_cigeneeextra() { 271e1051a39Sopenharmony_ci local OPTIND=1 272e1051a39Sopenharmony_ci local purpose=serverAuth 273e1051a39Sopenharmony_ci 274e1051a39Sopenharmony_ci while getopts p: o 275e1051a39Sopenharmony_ci do 276e1051a39Sopenharmony_ci case $o in 277e1051a39Sopenharmony_ci p) purpose="$OPTARG";; 278e1051a39Sopenharmony_ci *) echo "Usage: $0 geneeextra [-p EKU] cn keyname certname cakeyname cacertname extraext" >&2 279e1051a39Sopenharmony_ci return 1;; 280e1051a39Sopenharmony_ci esac 281e1051a39Sopenharmony_ci done 282e1051a39Sopenharmony_ci 283e1051a39Sopenharmony_ci shift $((OPTIND - 1)) 284e1051a39Sopenharmony_ci local cn=$1; shift 285e1051a39Sopenharmony_ci local key=$1; shift 286e1051a39Sopenharmony_ci local cert=$1; shift 287e1051a39Sopenharmony_ci local cakey=$1; shift 288e1051a39Sopenharmony_ci local ca=$1; shift 289e1051a39Sopenharmony_ci local extraext=$1; shift 290e1051a39Sopenharmony_ci 291e1051a39Sopenharmony_ci exts=$(printf "%s\n%s\n%s\n%s\n%s\n%s\n[alts]\n%s\n" \ 292e1051a39Sopenharmony_ci "subjectKeyIdentifier = hash" \ 293e1051a39Sopenharmony_ci "authorityKeyIdentifier = keyid, issuer" \ 294e1051a39Sopenharmony_ci "basicConstraints = CA:false" \ 295e1051a39Sopenharmony_ci "extendedKeyUsage = $purpose" \ 296e1051a39Sopenharmony_ci "subjectAltName = @alts"\ 297e1051a39Sopenharmony_ci "$extraext" "DNS=${cn}") 298e1051a39Sopenharmony_ci csr=$(req "$key" "CN = $cn") || return 1 299e1051a39Sopenharmony_ci echo "$csr" | 300e1051a39Sopenharmony_ci cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \ 301e1051a39Sopenharmony_ci -set_serial 2 -days "${DAYS}" "$@" 302e1051a39Sopenharmony_ci} 303e1051a39Sopenharmony_ci 304e1051a39Sopenharmony_cigeneenocsr() { 305e1051a39Sopenharmony_ci local OPTIND=1 306e1051a39Sopenharmony_ci local purpose=serverAuth 307e1051a39Sopenharmony_ci 308e1051a39Sopenharmony_ci while getopts p: o 309e1051a39Sopenharmony_ci do 310e1051a39Sopenharmony_ci case $o in 311e1051a39Sopenharmony_ci p) purpose="$OPTARG";; 312e1051a39Sopenharmony_ci *) echo "Usage: $0 geneenocsr [-p EKU] cn certname cakeyname cacertname" >&2 313e1051a39Sopenharmony_ci return 1;; 314e1051a39Sopenharmony_ci esac 315e1051a39Sopenharmony_ci done 316e1051a39Sopenharmony_ci 317e1051a39Sopenharmony_ci shift $((OPTIND - 1)) 318e1051a39Sopenharmony_ci local cn=$1; shift 319e1051a39Sopenharmony_ci local cert=$1; shift 320e1051a39Sopenharmony_ci local cakey=$1; shift 321e1051a39Sopenharmony_ci local ca=$1; shift 322e1051a39Sopenharmony_ci 323e1051a39Sopenharmony_ci exts=$(printf "%s\n%s\n%s\n%s\n%s\n[alts]\n%s\n" \ 324e1051a39Sopenharmony_ci "subjectKeyIdentifier = hash" \ 325e1051a39Sopenharmony_ci "authorityKeyIdentifier = keyid, issuer" \ 326e1051a39Sopenharmony_ci "basicConstraints = CA:false" \ 327e1051a39Sopenharmony_ci "extendedKeyUsage = $purpose" \ 328e1051a39Sopenharmony_ci "subjectAltName = @alts" "DNS=${cn}") 329e1051a39Sopenharmony_ci cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \ 330e1051a39Sopenharmony_ci -set_serial 2 -days "${DAYS}" "$@" 331e1051a39Sopenharmony_ci} 332e1051a39Sopenharmony_ci 333e1051a39Sopenharmony_cigenss() { 334e1051a39Sopenharmony_ci local cn=$1; shift 335e1051a39Sopenharmony_ci local key=$1; shift 336e1051a39Sopenharmony_ci local cert=$1; shift 337e1051a39Sopenharmony_ci 338e1051a39Sopenharmony_ci exts=$(printf "%s\n%s\n%s\n%s\n%s\n[alts]\n%s\n" \ 339e1051a39Sopenharmony_ci "subjectKeyIdentifier = hash" \ 340e1051a39Sopenharmony_ci "authorityKeyIdentifier = keyid, issuer" \ 341e1051a39Sopenharmony_ci "basicConstraints = CA:false" \ 342e1051a39Sopenharmony_ci "extendedKeyUsage = serverAuth" \ 343e1051a39Sopenharmony_ci "subjectAltName = @alts" "DNS=${cn}") 344e1051a39Sopenharmony_ci csr=$(req "$key" "CN = $cn") || return 1 345e1051a39Sopenharmony_ci echo "$csr" | 346e1051a39Sopenharmony_ci cert "$cert" "$exts" -signkey "${key}.pem" \ 347e1051a39Sopenharmony_ci -set_serial 1 -days "${DAYS}" "$@" 348e1051a39Sopenharmony_ci} 349e1051a39Sopenharmony_ci 350e1051a39Sopenharmony_cigennocn() { 351e1051a39Sopenharmony_ci local key=$1; shift 352e1051a39Sopenharmony_ci local cert=$1; shift 353e1051a39Sopenharmony_ci 354e1051a39Sopenharmony_ci csr=$(req_nocn "$key") || return 1 355e1051a39Sopenharmony_ci echo "$csr" | 356e1051a39Sopenharmony_ci cert "$cert" "" -signkey "${key}.pem" -set_serial 1 -days -1 "$@" 357e1051a39Sopenharmony_ci} 358e1051a39Sopenharmony_ci 359e1051a39Sopenharmony_cigenct() { 360e1051a39Sopenharmony_ci local OPTIND=1 361e1051a39Sopenharmony_ci local purpose=serverAuth 362e1051a39Sopenharmony_ci 363e1051a39Sopenharmony_ci while getopts p: o 364e1051a39Sopenharmony_ci do 365e1051a39Sopenharmony_ci case $o in 366e1051a39Sopenharmony_ci p) purpose="$OPTARG";; 367e1051a39Sopenharmony_ci *) echo "Usage: $0 genct [-p EKU] cn keyname certname cakeyname cacertname ctlogkey" >&2 368e1051a39Sopenharmony_ci return 1;; 369e1051a39Sopenharmony_ci esac 370e1051a39Sopenharmony_ci done 371e1051a39Sopenharmony_ci 372e1051a39Sopenharmony_ci shift $((OPTIND - 1)) 373e1051a39Sopenharmony_ci local cn=$1; shift 374e1051a39Sopenharmony_ci local key=$1; shift 375e1051a39Sopenharmony_ci local cert=$1; shift 376e1051a39Sopenharmony_ci local cakey=$1; shift 377e1051a39Sopenharmony_ci local ca=$1; shift 378e1051a39Sopenharmony_ci local logkey=$1; shift 379e1051a39Sopenharmony_ci 380e1051a39Sopenharmony_ci exts=$(printf "%s\n%s\n%s\n%s\n%s\n%s\n[alts]\n%s\n" \ 381e1051a39Sopenharmony_ci "subjectKeyIdentifier = hash" \ 382e1051a39Sopenharmony_ci "authorityKeyIdentifier = keyid, issuer" \ 383e1051a39Sopenharmony_ci "basicConstraints = CA:false" \ 384e1051a39Sopenharmony_ci "extendedKeyUsage = $purpose" \ 385e1051a39Sopenharmony_ci "1.3.6.1.4.1.11129.2.4.3 = critical,ASN1:NULL"\ 386e1051a39Sopenharmony_ci "subjectAltName = @alts" "DNS=${cn}") 387e1051a39Sopenharmony_ci csr=$(req "$key" "CN = $cn") || return 1 388e1051a39Sopenharmony_ci echo "$csr" | 389e1051a39Sopenharmony_ci cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \ 390e1051a39Sopenharmony_ci -set_serial 2 -days "${DAYS}" "$@" 391e1051a39Sopenharmony_ci cat ${cert}.pem ${ca}.pem > ${cert}-chain.pem 392e1051a39Sopenharmony_ci go run github.com/google/certificate-transparency-go/ctutil/sctgen \ 393e1051a39Sopenharmony_ci --log_private_key ${logkey}.pem \ 394e1051a39Sopenharmony_ci --timestamp="2020-01-01T00:00:00Z" \ 395e1051a39Sopenharmony_ci --cert_chain ${cert}-chain.pem \ 396e1051a39Sopenharmony_ci --tls_out ${cert}.tlssct 397e1051a39Sopenharmony_ci rm ${cert}-chain.pem 398e1051a39Sopenharmony_ci filesize=$(wc -c <${cert}.tlssct) 399e1051a39Sopenharmony_ci exts=$(printf "%s\n%s\n%s\n%s\n%s%04X%04X%s\n%s\n[alts]\n%s\n" \ 400e1051a39Sopenharmony_ci "subjectKeyIdentifier = hash" \ 401e1051a39Sopenharmony_ci "authorityKeyIdentifier = keyid, issuer" \ 402e1051a39Sopenharmony_ci "basicConstraints = CA:false" \ 403e1051a39Sopenharmony_ci "extendedKeyUsage = $purpose" \ 404e1051a39Sopenharmony_ci "1.3.6.1.4.1.11129.2.4.2 = ASN1:FORMAT:HEX,OCT:" $((filesize+2)) $filesize `xxd -p ${cert}.tlssct | tr -d '\n'` \ 405e1051a39Sopenharmony_ci "subjectAltName = @alts" "DNS=${cn}") 406e1051a39Sopenharmony_ci echo "$csr" | 407e1051a39Sopenharmony_ci cert "$cert" "$exts" -CA "${ca}.pem" -CAkey "${cakey}.pem" \ 408e1051a39Sopenharmony_ci -set_serial 2 -days "${DAYS}" "$@" 409e1051a39Sopenharmony_ci} 410e1051a39Sopenharmony_ci 411e1051a39Sopenharmony_ci"$@" 412