-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_codesign.sh
More file actions
executable file
·114 lines (100 loc) · 3.99 KB
/
Copy pathcreate_codesign.sh
File metadata and controls
executable file
·114 lines (100 loc) · 3.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/bin/sh
# create_codesign.sh
# https://support.apple.com/en-us/HT210176
DAYS=825
CATRUE=${CATRUE:-0}
CERTDIR=${CERTDIR:-codesign}
CERTNAME=${CERTNAME:-${CERTDIR}}
ISSUERCADIR=${ISSUERCADIR:-intermediate}
ISSUERCANAME=${ISSUERCANAME:-intermediate}
EC_PARAMGEN_CURVE=${EC_PARAMGEN_CURVE:-P-256}
RSA_KEYGEN_BITS=${RSA_KEYGEN_BITS:-2048}
. pki_structure.sh
# Certificate encrypted key
case ${ALGORITHM} in
EC)
openssl genpkey -out "${CERTDIR}"/private/"${CERTNAME}".key.pem \
-algorithm EC -pkeyopt ec_paramgen_curve:"${EC_PARAMGEN_CURVE}" -aes256 \
-pass file:"${CERTDIR}"/private/passphrase.txt
;;
RSA)
openssl genpkey -out "${CERTDIR}"/private/"${CERTNAME}".key.pem \
-algorithm RSA -pkeyopt rsa_keygen_bits:"${RSA_KEYGEN_BITS}" -aes256 \
-pass file:"${CERTDIR}"/private/passphrase.txt
;;
*)
echo "Unknown algorithm '${ALGORITHM}'"
exit 1
esac
# Server CSR
openssl req -config "${CERTDIR}"/openssl_"${CERTDIR}".cnf \
-new -"${HASH_DIGEST}" \
-key "${CERTDIR}"/private/"${CERTNAME}".key.pem \
-passin file:"${CERTDIR}"/private/passphrase.txt \
-out "${CERTDIR}"/certs/"${CERTNAME}".csr.pem -batch
# Server certificate
if \
openssl ca -config "${CERTDIR}"/openssl_"${CERTDIR}".cnf \
-days ${DAYS} -notext -md ${HASH_DIGEST} -extensions codesign_reqext \
-in "${CERTDIR}"/certs/"${CERTNAME}".csr.pem \
-out "${CERTDIR}"/certs/"${CERTNAME}".cert.pem \
-passin file:"${ISSUERCADIR}"/private/passphrase.txt \
-batch
then
rm "${CERTDIR}"/certs/"${CERTNAME}".csr.pem
else
rm "${CERTDIR}"/private/"${CERTNAME}".key.pem
rm "${CERTDIR}"/certs/"${CERTNAME}".csr.pem
exit 1
fi
# Server chain
if [ -f "${ISSUERCADIR}"/certs/"${ISSUERCANAME}".chain.pem ]; then
cat "${CERTDIR}"/certs/"${CERTNAME}".cert.pem \
"${ISSUERCADIR}"/certs/"${ISSUERCANAME}".chain.pem \
> "${CERTDIR}"/certs/"${CERTNAME}".chain.pem
else
cat "${CERTDIR}"/certs/"${CERTNAME}".cert.pem \
"${ISSUERCADIR}"/certs/"${ISSUERCANAME}".cert.pem \
> "${CERTDIR}"/certs/"${CERTNAME}".chain.pem
fi
# Intermediate CA chain openssl verification
if [ -f "${ISSUERCADIR}"/certs/"${ISSUERCANAME}".chain.pem ]; then
openssl verify -CAfile "${ISSUERCADIR}"/certs/"${ISSUERCANAME}".chain.pem \
"${CERTDIR}"/certs/"${CERTNAME}".chain.pem
else
openssl verify -CAfile "${ISSUERCADIR}"/certs/"${ISSUERCANAME}".cert.pem \
"${CERTDIR}"/certs/"${CERTNAME}".chain.pem
fi
# CA certificate openssl self-verification
if [ -f "${ISSUERCADIR}"/certs/"${ISSUERCANAME}".chain.pem ]; then
openssl verify -CAfile "${ISSUERCADIR}"/certs/"${ISSUERCANAME}".chain.pem \
"${CERTDIR}"/certs/"${CERTNAME}".cert.pem
else
openssl verify -CAfile "${ISSUERCADIR}"/certs/"${ISSUERCANAME}".cert.pem \
"${CERTDIR}"/certs/"${CERTNAME}".cert.pem
fi
# Convert to .cer and .p12 for storage
openssl x509 -outform der -in "${CERTDIR}"/certs/"${CERTNAME}".cert.pem \
-out "${CERTDIR}"/certs/"${CERTNAME}".cer
# N.b. passphrase must be repeated on two lines in passphrase.txt
# https://developer.apple.com/forums/thread/697030
openssl pkcs12 -legacy -export -out "${CERTDIR}"/private/"${CERTNAME}".p12 \
-inkey "${CERTDIR}"/private/"${CERTNAME}".key.pem \
-in "${CERTDIR}"/certs/"${CERTNAME}".cert.pem \
-passin file:"${CERTDIR}"/private/passphrase.txt \
-passout file:"${CERTDIR}"/private/passphrase.txt
# verify .p12 passphrase
openssl pkcs12 -legacy -noout -in "${CERTDIR}"/private/"${CERTNAME}".p12 \
-passin file:"${CERTDIR}"/private/passphrase.txt
# rename certificate
CERTSHA1=$(openssl x509 -noout -fingerprint -sha1 -inform pem \
-in "${CERTDIR}"/certs/"${CERTNAME}".cert.pem \
| sed -e 's|^sha1 Fingerprint=||' \
| sed -e 's|:||g' \
| tr '[:upper:]' '[:lower:]' \
)
mv "${CERTDIR}"/private/{"${CERTNAME}","${CERTNAME}"."${CERTSHA1}"}.key.pem
mv "${CERTDIR}"/private/{"${CERTNAME}","${CERTNAME}"."${CERTSHA1}"}.p12
mv "${CERTDIR}"/certs/{"${CERTNAME}","${CERTNAME}"."${CERTSHA1}"}.cer
mv "${CERTDIR}"/certs/{"${CERTNAME}","${CERTNAME}"."${CERTSHA1}"}.cert.pem
mv "${CERTDIR}"/certs/{"${CERTNAME}","${CERTNAME}"."${CERTSHA1}"}.chain.pem