Browse Source

Don't pin certs

The guidelines on how to do this properly are just too confusing
Bob Mottram 8 years ago
parent
commit
0b6a12080d
4 changed files with 140 additions and 129 deletions
  1. 136
    125
      src/freedombone-addcert
  2. 2
    2
      src/freedombone-renew-cert
  3. 1
    1
      src/freedombone-restore-local
  4. 1
    1
      src/freedombone-restore-remote

+ 136
- 125
src/freedombone-addcert View File

@@ -38,6 +38,9 @@ COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
38 38
 
39 39
 source /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-git
40 40
 
41
+# Don't pin certs by default
42
+PIN_CERTS=
43
+
41 44
 HOSTNAME=
42 45
 LETSENCRYPT_HOSTNAME=
43 46
 COUNTRY_CODE="US"
@@ -59,40 +62,40 @@ MY_MIRRORS_PASSWORD=
59 62
 
60 63
 function read_repo_servers {
61 64
     if [ -f $CONFIGURATION_FILE ]; then
62
-    if grep -q "FRIENDS_MIRRORS_SERVER" $CONFIGURATION_FILE; then
63
-        FRIENDS_MIRRORS_SERVER=$(grep "FRIENDS_MIRRORS_SERVER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
64
-    fi
65
-    if grep -q "FRIENDS_MIRRORS_SSH_PORT" $CONFIGURATION_FILE; then
66
-        FRIENDS_MIRRORS_SSH_PORT=$(grep "FRIENDS_MIRRORS_SSH_PORT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
67
-    fi
68
-    if grep -q "MY_MIRRORS_PASSWORD" $CONFIGURATION_FILE; then
69
-        MY_MIRRORS_PASSWORD=$(grep "MY_MIRRORS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
70
-    fi
71
-    if grep -q "FRIENDS_MIRRORS_PASSWORD" $CONFIGURATION_FILE; then
72
-        FRIENDS_MIRRORS_PASSWORD=$(grep "FRIENDS_MIRRORS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
73
-    fi
65
+        if grep -q "FRIENDS_MIRRORS_SERVER" $CONFIGURATION_FILE; then
66
+            FRIENDS_MIRRORS_SERVER=$(grep "FRIENDS_MIRRORS_SERVER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
67
+        fi
68
+        if grep -q "FRIENDS_MIRRORS_SSH_PORT" $CONFIGURATION_FILE; then
69
+            FRIENDS_MIRRORS_SSH_PORT=$(grep "FRIENDS_MIRRORS_SSH_PORT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
70
+        fi
71
+        if grep -q "MY_MIRRORS_PASSWORD" $CONFIGURATION_FILE; then
72
+            MY_MIRRORS_PASSWORD=$(grep "MY_MIRRORS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
73
+        fi
74
+        if grep -q "FRIENDS_MIRRORS_PASSWORD" $CONFIGURATION_FILE; then
75
+            FRIENDS_MIRRORS_PASSWORD=$(grep "FRIENDS_MIRRORS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
76
+        fi
74 77
     fi
75 78
 
76 79
     if [ ! $FRIENDS_MIRRORS_SERVER ]; then
77
-    return
80
+        return
78 81
     fi
79 82
     if [ ${#FRIENDS_MIRRORS_SERVER} -lt 2 ]; then
80
-    return
83
+        return
81 84
     fi
82 85
 
83 86
     MAIN_COMMAND=/usr/local/bin/${PROJECT_NAME}
84 87
     if [ ! -f $MAIN_COMMAND ]; then
85
-    MAIN_COMMAND=/usr/bin/${PROJECT_NAME}
88
+        MAIN_COMMAND=/usr/bin/${PROJECT_NAME}
86 89
     fi
87 90
 
88 91
     REPOS=($(cat ${MAIN_COMMAND} | grep "_REPO=\"" | uniq -u | sed 's|${PROJECT_NAME}|'"${PROJECT_NAME}"'|g'))
89 92
 
90 93
     for line in "${REPOS[@]}"
91 94
     do
92
-    repo_name=$(echo "$line" | awk -F '=' '{print $1}')
93
-    mirrors_name=$(echo "$repo_name" | sed "s|_REPO||g" | awk '{print tolower($0)}')
94
-    friends_repo_url="ssh://mirrors@${FRIENDS_MIRRORS_SERVER}:${FRIENDS_MIRRORS_SSH_PORT}/home/mirrors/${mirrors_name}"
95
-    ${repo_name}="${friends_repo_url}"
95
+        repo_name=$(echo "$line" | awk -F '=' '{print $1}')
96
+        mirrors_name=$(echo "$repo_name" | sed "s|_REPO||g" | awk '{print tolower($0)}')
97
+        friends_repo_url="ssh://mirrors@${FRIENDS_MIRRORS_SERVER}:${FRIENDS_MIRRORS_SSH_PORT}/home/mirrors/${mirrors_name}"
98
+        ${repo_name}="${friends_repo_url}"
96 99
     done
97 100
 }
98 101
 
@@ -125,69 +128,73 @@ do
125 128
     key="$1"
126 129
 
127 130
     case $key in
128
-    --help)
129
-        show_help
130
-        ;;
131
-    -h|--hostname)
132
-        shift
133
-        HOSTNAME="$1"
134
-        ;;
135
-    -e|--letsencrypt)
136
-        shift
137
-        LETSENCRYPT_HOSTNAME="$1"
138
-        ;;
139
-    --email)
140
-        shift
141
-        MY_EMAIL_ADDRESS="$1"
142
-        ;;
143
-    -s|--server)
144
-        shift
145
-        LETSENCRYPT_SERVER="$1"
146
-        ;;
147
-    -c|--country)
148
-        shift
149
-        COUNTRY_CODE="$1"
150
-        ;;
151
-    -a|--area)
152
-        shift
153
-        AREA="$1"
154
-        ;;
155
-    -l|--location)
156
-        shift
157
-        LOCATION="$1"
158
-        ;;
159
-    -o|--organisation)
160
-        shift
161
-        ORGANISATION="$1"
162
-        ;;
163
-    -u|--unit)
164
-        shift
165
-        UNIT="$1"
166
-        ;;
167
-    --ca)
168
-        shift
169
-        EXTENSIONS="-extensions v3_ca"
170
-        ORGANISATION="Freedombone-CA"
171
-        ;;
172
-    --nodh)
173
-        shift
174
-        NODH="true"
175
-        ;;
176
-    --dhkey)
177
-        shift
178
-        DH_KEYLENGTH=${1}
179
-        ;;
180
-    *)
181
-        # unknown option
182
-        ;;
131
+        --help)
132
+            show_help
133
+            ;;
134
+        -h|--hostname)
135
+            shift
136
+            HOSTNAME="$1"
137
+            ;;
138
+        -e|--letsencrypt)
139
+            shift
140
+            LETSENCRYPT_HOSTNAME="$1"
141
+            ;;
142
+        --email)
143
+            shift
144
+            MY_EMAIL_ADDRESS="$1"
145
+            ;;
146
+        -s|--server)
147
+            shift
148
+            LETSENCRYPT_SERVER="$1"
149
+            ;;
150
+        -c|--country)
151
+            shift
152
+            COUNTRY_CODE="$1"
153
+            ;;
154
+        -a|--area)
155
+            shift
156
+            AREA="$1"
157
+            ;;
158
+        -l|--location)
159
+            shift
160
+            LOCATION="$1"
161
+            ;;
162
+        -o|--organisation)
163
+            shift
164
+            ORGANISATION="$1"
165
+            ;;
166
+        -u|--unit)
167
+            shift
168
+            UNIT="$1"
169
+            ;;
170
+        --ca)
171
+            shift
172
+            EXTENSIONS="-extensions v3_ca"
173
+            ORGANISATION="Freedombone-CA"
174
+            ;;
175
+        --nodh)
176
+            shift
177
+            NODH="true"
178
+            ;;
179
+        --dhkey)
180
+            shift
181
+            DH_KEYLENGTH=${1}
182
+            ;;
183
+        --pin)
184
+            shift
185
+            PIN_CERTS=${1}
186
+            ;;
187
+        *)
188
+            # unknown option
189
+            ;;
183 190
     esac
184 191
     shift
185 192
 done
186 193
 
187 194
 if [ ! $HOSTNAME ]; then
188 195
     if [ ! $LETSENCRYPT_HOSTNAME ]; then
189
-    echo $'No hostname specified'
190
-    exit 5748
196
+        echo $'No hostname specified'
197
+        exit 5748
191 198
     fi
192 199
 fi
193 200
 
@@ -207,35 +214,35 @@ function add_cert_letsencrypt {
207 214
 
208 215
     # obtain the email address for the admin user
209 216
     if [ ! $MY_EMAIL_ADDRESS ]; then
210
-    if [ -f $CONFIGURATION_FILE ]; then
211
-        if grep -q "MY_EMAIL_ADDRESS=" $CONFIGURATION_FILE; then
212
-        MY_EMAIL_ADDRESS=$(cat $CONFIGURATION_FILE | grep "MY_EMAIL_ADDRESS=" | awk -F '=' '{print $2}')
217
+        if [ -f $CONFIGURATION_FILE ]; then
218
+            if grep -q "MY_EMAIL_ADDRESS=" $CONFIGURATION_FILE; then
219
+                MY_EMAIL_ADDRESS=$(cat $CONFIGURATION_FILE | grep "MY_EMAIL_ADDRESS=" | awk -F '=' '{print $2}')
220
+            fi
213 221
         fi
214 222
     fi
215
-    fi
216 223
     if [ ! $MY_EMAIL_ADDRESS ]; then
217
-    if [ -f $COMPLETION_FILE ]; then
218
-        if grep -q "Admin user:" $COMPLETION_FILE; then
219
-        ADMIN_USER=$(cat $COMPLETION_FILE | grep "Admin user" | awk -F ':' '{print $2}')
220
-        MY_EMAIL_ADDRESS=$ADMIN_USER@$HOSTNAME
224
+        if [ -f $COMPLETION_FILE ]; then
225
+            if grep -q "Admin user:" $COMPLETION_FILE; then
226
+                ADMIN_USER=$(cat $COMPLETION_FILE | grep "Admin user" | awk -F ':' '{print $2}')
227
+                MY_EMAIL_ADDRESS=$ADMIN_USER@$HOSTNAME
228
+            fi
221 229
         fi
222 230
     fi
223
-    fi
224 231
 
225 232
     if [ ! -d $INSTALL_DIR ]; then
226
-    mkdir -p $INSTALL_DIR
233
+        mkdir -p $INSTALL_DIR
227 234
     fi
228 235
     cd $INSTALL_DIR
229 236
 
230 237
     # obtain the repo
231 238
     if [ ! -d ${INSTALL_DIR}/letsencrypt ]; then
232
-    git_clone $LETSENCRYPT_REPO ${INSTALL_DIR}/letsencrypt
233
-    if [ ! -d ${INSTALL_DIR}/letsencrypt ]; then
234
-        exit 76283
235
-    fi
239
+        git_clone $LETSENCRYPT_REPO ${INSTALL_DIR}/letsencrypt
240
+        if [ ! -d ${INSTALL_DIR}/letsencrypt ]; then
241
+            exit 76283
242
+        fi
236 243
     else
237
-    cd ${INSTALL_DIR}/letsencrypt
238
-    git_pull $LETSENCRYPT_REPO
244
+        cd ${INSTALL_DIR}/letsencrypt
245
+        git_pull $LETSENCRYPT_REPO
239 246
     fi
240 247
 
241 248
     # stop the web server
@@ -244,38 +251,38 @@ function add_cert_letsencrypt {
244 251
     cd ${INSTALL_DIR}/letsencrypt
245 252
     ./letsencrypt-auto certonly --server $LETSENCRYPT_SERVER --standalone -d $LETSENCRYPT_HOSTNAME --renew-by-default --agree-tos --email $MY_EMAIL_ADDRESS
246 253
     if [ ! "$?" = "0" ]; then
247
-    echo $"Failed to install letsencrypt for domain $LETSENCRYPT_HOSTNAME"
248
-    systemctl start nginx
249
-    exit 63216
254
+        echo $"Failed to install letsencrypt for domain $LETSENCRYPT_HOSTNAME"
255
+        systemctl start nginx
256
+        exit 63216
250 257
     fi
251 258
 
252 259
     # replace some legacy filenames
253 260
     if [ -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.bundle.crt ]; then
254
-    mv /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.bundle.crt /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem
261
+        mv /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.bundle.crt /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem
255 262
     fi
256 263
     if [ -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.crt ]; then
257
-    mv /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.crt /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem
264
+        mv /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.crt /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem
258 265
     fi
259 266
     sed -i "s|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.bundle.crt|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem|g" /etc/nginx/sites-available/$LETSENCRYPT_HOSTNAME
260 267
     sed -i "s|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.crt|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem|g" /etc/nginx/sites-available/$LETSENCRYPT_HOSTNAME
261 268
 
262 269
     # link the private key
263 270
     if [ -f /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key ]; then
264
-    if [ ! -f /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key.old ]; then
265
-        mv /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key.old
266
-    else
267
-        rm -f /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key
268
-    fi
271
+        if [ ! -f /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key.old ]; then
272
+            mv /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key.old
273
+        else
274
+            rm -f /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key
275
+        fi
269 276
     fi
270 277
     ln -s /etc/letsencrypt/live/${LETSENCRYPT_HOSTNAME}/privkey.pem /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key
271 278
 
272 279
     # link the public key
273 280
     if [ -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem ]; then
274
-    if [ ! -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem.old ]; then
275
-        mv /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem.old
276
-    else
277
-        rm -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem
278
-    fi
281
+        if [ ! -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem.old ]; then
282
+            mv /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem.old
283
+        else
284
+            rm -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem
285
+        fi
279 286
     fi
280 287
     ln -s /etc/letsencrypt/live/${LETSENCRYPT_HOSTNAME}/fullchain.pem /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem
281 288
 
@@ -283,44 +290,48 @@ function add_cert_letsencrypt {
283 290
 
284 291
     systemctl start nginx
285 292
 
286
-    ${PROJECT_NAME}-pin-cert $LETSENCRYPT_HOSTNAME
287
-    if [ ! "$?" = "0" ]; then
288
-    echo $"Certificate for $LETSENCRYPT_HOSTNAME could not be pinned"
289
-    exit 62878
293
+    if [ $PIN_CERTS ]; then
294
+        ${PROJECT_NAME}-pin-cert $LETSENCRYPT_HOSTNAME
295
+        if [ ! "$?" = "0" ]; then
296
+            echo $"Certificate for $LETSENCRYPT_HOSTNAME could not be pinned"
297
+            exit 62878
298
+        fi
290 299
     fi
291 300
 }
292 301
 
293 302
 function add_cert_selfsigned {
294 303
     if [[ $ORGANISATION == "Freedombone-CA" ]]; then
295
-    CERTFILE="ca-$HOSTNAME"
304
+        CERTFILE="ca-$HOSTNAME"
296 305
     fi
297 306
 
298 307
     openssl req -x509 ${EXTENSIONS} -nodes -days 3650 -sha256 \
299
-        -subj "/O=$ORGANISATION/OU=$UNIT/C=$COUNTRY_CODE/ST=$AREA/L=$LOCATION/CN=$HOSTNAME" \
300
-        -newkey rsa:4096 -keyout /etc/ssl/private/${CERTFILE}.key \
301
-        -out /etc/ssl/certs/${CERTFILE}.crt
308
+            -subj "/O=$ORGANISATION/OU=$UNIT/C=$COUNTRY_CODE/ST=$AREA/L=$LOCATION/CN=$HOSTNAME" \
309
+            -newkey rsa:4096 -keyout /etc/ssl/private/${CERTFILE}.key \
310
+            -out /etc/ssl/certs/${CERTFILE}.crt
302 311
     chmod 400 /etc/ssl/private/${CERTFILE}.key
303 312
     chmod 640 /etc/ssl/certs/${CERTFILE}.crt
304 313
     cp /etc/ssl/certs/${CERTFILE}.crt /etc/ssl/mycerts
305 314
 
306
-    ${PROJECT_NAME}-pin-cert $CERTFILE
307
-    if [ ! "$?" = "0" ]; then
308
-    echo $"Certificate for $CERTFILE could not be pinned"
309
-    exit 62879
315
+    if [ $PIN_CERTS ]; then
316
+        ${PROJECT_NAME}-pin-cert $CERTFILE
317
+        if [ ! "$?" = "0" ]; then
318
+            echo $"Certificate for $CERTFILE could not be pinned"
319
+            exit 62879
320
+        fi
310 321
     fi
311 322
 }
312 323
 
313 324
 function generate_dh_params {
314 325
     if [ ! $NODH ]; then
315
-    if [ ! -f /etc/ssl/certs/${CERTFILE}.dhparam ]; then
316
-        ${PROJECT_NAME}-dhparam -h ${CERTFILE} --fast yes
317
-    fi
326
+        if [ ! -f /etc/ssl/certs/${CERTFILE}.dhparam ]; then
327
+            ${PROJECT_NAME}-dhparam -h ${CERTFILE} --fast yes
328
+        fi
318 329
     fi
319 330
 }
320 331
 
321 332
 function restart_web_server {
322 333
     if [ -f /etc/init.d/nginx ]; then
323
-    /etc/init.d/nginx reload
334
+        /etc/init.d/nginx reload
324 335
     fi
325 336
 }
326 337
 
@@ -332,9 +343,9 @@ function make_cert_bundle {
332 343
 
333 344
 function create_cert {
334 345
     if [ $LETSENCRYPT_HOSTNAME ]; then
335
-    add_cert_letsencrypt
346
+        add_cert_letsencrypt
336 347
     else
337
-    add_cert_selfsigned
348
+        add_cert_selfsigned
338 349
     fi
339 350
 }
340 351
 

+ 2
- 2
src/freedombone-renew-cert View File

@@ -69,7 +69,7 @@ function renew_letsencrypt {
69 69
     ln -s /etc/letsencrypt/live/${HOSTNAME}/privkey.pem /etc/ssl/private/${HOSTNAME}.key
70 70
     ln -s /etc/letsencrypt/live/${HOSTNAME}/fullchain.pem /etc/ssl/certs/${HOSTNAME}.pem
71 71
 
72
-    ${PROJECT_NAME}-pin-cert $HOSTNAME
72
+    ${PROJECT_NAME}-pin-cert $HOSTNAME remove
73 73
 }
74 74
 
75 75
 function renew_startssl {
@@ -169,7 +169,7 @@ function renew_startssl {
169 169
     echo $"/etc/ssl/certs/$HOSTNAME.new.crt then run this command again."
170 170
     echo ''
171 171
 
172
-    ${PROJECT_NAME}-pin-cert $HOSTNAME
172
+    ${PROJECT_NAME}-pin-cert $HOSTNAME remove
173 173
 }
174 174
 
175 175
 while [[ $# > 1 ]]

+ 1
- 1
src/freedombone-restore-local View File

@@ -723,7 +723,7 @@ set_user_permissions
723 723
 backup_unmount_drive
724 724
 
725 725
 # ensure that all TLS certificates are pinned
726
-${PROJECT_NAME}-pin-cert all
726
+#${PROJECT_NAME}-pin-cert all
727 727
 
728 728
 echo $"Restore from USB drive is complete. You can now unplug it."
729 729
 

+ 1
- 1
src/freedombone-restore-remote View File

@@ -655,7 +655,7 @@ restore_apps remote
655 655
 set_user_permissions
656 656
 
657 657
 # ensure that all TLS certificates are pinned
658
-${PROJECT_NAME}-pin-cert all
658
+#${PROJECT_NAME}-pin-cert all
659 659
 
660 660
 echo $"*** Remote restore was successful ***"
661 661