-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_adblock2privoxy.sh
More file actions
executable file
·127 lines (111 loc) · 4.67 KB
/
Copy pathcreate_adblock2privoxy.sh
File metadata and controls
executable file
·127 lines (111 loc) · 4.67 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
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/sh
# create_adblock2privoxy.sh
SERVERFQDN=${SERVERFQDN:-adblock2privoxy-nginx}
# https://support.apple.com/en-us/HT210176
DAYS=825
CATRUE=${CATRUE:-0}
CERTDIR=${CERTDIR:-privoxy/adblock2privoxy}
CERTNAME=${CERTNAME:-${SERVERFQDN}}
ISSUERCADIR=${ISSUERCADIR:-privoxy}
ISSUERCANAME=${ISSUERCANAME:-privoxy}
EC_PARAMGEN_CURVE=${EC_PARAMGEN_CURVE:-P-256}
HASH_DIGEST=${HASH_DIGEST:-sha256}
. 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
openssl ec -in "${CERTDIR}"/private/"${CERTNAME}".key.pem \
-passin file:"${CERTDIR}"/private/passphrase.txt \
-out "${CERTDIR}"/private/"${CERTNAME}".key.pem.decrypted
;;
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
openssl rsa -in "${CERTDIR}"/private/"${CERTNAME}".key.pem \
-passin file:"${CERTDIR}"/private/passphrase.txt \
-out "${CERTDIR}"/private/"${CERTNAME}".key.pem.decrypted
;;
*)
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 \
-keyfile "${ISSUERCADIR}"/private/"${ISSUERCANAME}".key.pem \
-cert "${ISSUERCADIR}"/certs/"${ISSUERCANAME}".cert.pem \
-days ${DAYS} -notext -md ${HASH_DIGEST} -extensions server_cert \
-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}"/private/"${CERTNAME}".key.pem.decrypted
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
# Root/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}","${SERVERFQDN}"."${CERTSHA1}"}.key.pem
mv "${CERTDIR}"/private/{"${CERTNAME}","${SERVERFQDN}"."${CERTSHA1}"}.key.pem.decrypted
mv "${CERTDIR}"/certs/{"${CERTNAME}","${SERVERFQDN}"."${CERTSHA1}"}.cert.pem
mv "${CERTDIR}"/certs/{"${CERTNAME}","${SERVERFQDN}"."${CERTSHA1}"}.chain.pem
mv "${CERTDIR}"/certs/{"${CERTNAME}","${SERVERFQDN}"."${CERTSHA1}"}.cer
mv "${CERTDIR}"/private/{"${CERTNAME}","${SERVERFQDN}"."${CERTSHA1}"}.p12