1*6777b538SAndroid Build Coastguard Worker#!/bin/bash 2*6777b538SAndroid Build Coastguard Worker 3*6777b538SAndroid Build Coastguard Worker# Copyright 2012 The Chromium Authors 4*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 5*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker# This script generates certificates that can be used to test SSL client 8*6777b538SAndroid Build Coastguard Worker# authentication. Outputs for automated tests are stored in 9*6777b538SAndroid Build Coastguard Worker# net/data/ssl/certificates, but may be re-generated for manual testing. 10*6777b538SAndroid Build Coastguard Worker# 11*6777b538SAndroid Build Coastguard Worker# This script generates several chains of test client certificates: 12*6777b538SAndroid Build Coastguard Worker# 13*6777b538SAndroid Build Coastguard Worker# 1. A (end-entity) -> B -> C (self-signed root) 14*6777b538SAndroid Build Coastguard Worker# 2. D (end-entity) -> E -> C (self-signed root) 15*6777b538SAndroid Build Coastguard Worker# 3. F (end-entity) -> E -> C (self-signed root) 16*6777b538SAndroid Build Coastguard Worker# 4. G (end-entity, P-256) -> E -> C (self-signed root) 17*6777b538SAndroid Build Coastguard Worker# 5. H (end-entity, P-384) -> E -> C (self-signed root) 18*6777b538SAndroid Build Coastguard Worker# 6. I (end-entity, P-521) -> E -> C (self-signed root) 19*6777b538SAndroid Build Coastguard Worker# 7. J (end-entity, RSA-1024) -> E -> C (self-signed root) 20*6777b538SAndroid Build Coastguard Worker# 21*6777b538SAndroid Build Coastguard Worker# In which the certificates all have distinct keypairs. The client 22*6777b538SAndroid Build Coastguard Worker# certificates share the same root, but are issued by different 23*6777b538SAndroid Build Coastguard Worker# intermediates. The names of these intermediates are hardcoded within 24*6777b538SAndroid Build Coastguard Worker# unit tests, and thus should not be changed. 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Workertry () { 27*6777b538SAndroid Build Coastguard Worker echo "$@" 28*6777b538SAndroid Build Coastguard Worker "$@" || exit 1 29*6777b538SAndroid Build Coastguard Worker} 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Workertry rm -rf out 32*6777b538SAndroid Build Coastguard Workertry mkdir out 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Workerecho Create the serial number files and indices. 35*6777b538SAndroid Build Coastguard Workerserial=1000 36*6777b538SAndroid Build Coastguard Workerfor i in B C E 37*6777b538SAndroid Build Coastguard Workerdo 38*6777b538SAndroid Build Coastguard Worker try /bin/sh -c "echo $serial > out/$i-serial" 39*6777b538SAndroid Build Coastguard Worker serial=$(expr $serial + 1) 40*6777b538SAndroid Build Coastguard Worker touch out/$i-index.txt 41*6777b538SAndroid Build Coastguard Worker touch out/$i-index.txt.attr 42*6777b538SAndroid Build Coastguard Workerdone 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Workerecho Generate the keys. 45*6777b538SAndroid Build Coastguard Workerfor i in A B C D E F 46*6777b538SAndroid Build Coastguard Workerdo 47*6777b538SAndroid Build Coastguard Worker try openssl genrsa -out out/$i.key 2048 48*6777b538SAndroid Build Coastguard Workerdone 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Workertry openssl ecparam -name prime256v1 -genkey -noout -out out/G.key 51*6777b538SAndroid Build Coastguard Workertry openssl ecparam -name secp384r1 -genkey -noout -out out/H.key 52*6777b538SAndroid Build Coastguard Workertry openssl ecparam -name secp521r1 -genkey -noout -out out/I.key 53*6777b538SAndroid Build Coastguard Workertry openssl genrsa -out out/J.key 1024 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Workerecho Generate the C CSR 56*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="C Root CA" \ 57*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 58*6777b538SAndroid Build Coastguard Worker ID=C \ 59*6777b538SAndroid Build Coastguard Worker try openssl req \ 60*6777b538SAndroid Build Coastguard Worker -new \ 61*6777b538SAndroid Build Coastguard Worker -key out/C.key \ 62*6777b538SAndroid Build Coastguard Worker -out out/C.csr \ 63*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Workerecho C signs itself. 66*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="C Root CA" \ 67*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 68*6777b538SAndroid Build Coastguard Worker ID=C \ 69*6777b538SAndroid Build Coastguard Worker try openssl x509 \ 70*6777b538SAndroid Build Coastguard Worker -req -days 3650 \ 71*6777b538SAndroid Build Coastguard Worker -in out/C.csr \ 72*6777b538SAndroid Build Coastguard Worker -extensions ca_cert \ 73*6777b538SAndroid Build Coastguard Worker -extfile client-certs.cnf \ 74*6777b538SAndroid Build Coastguard Worker -signkey out/C.key \ 75*6777b538SAndroid Build Coastguard Worker -out out/C.pem 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Workerecho Generate the intermediates 78*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="B CA" \ 79*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 80*6777b538SAndroid Build Coastguard Worker ID=B \ 81*6777b538SAndroid Build Coastguard Worker try openssl req \ 82*6777b538SAndroid Build Coastguard Worker -new \ 83*6777b538SAndroid Build Coastguard Worker -key out/B.key \ 84*6777b538SAndroid Build Coastguard Worker -out out/B.csr \ 85*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 86*6777b538SAndroid Build Coastguard Worker 87*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="C CA" \ 88*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 89*6777b538SAndroid Build Coastguard Worker ID=C \ 90*6777b538SAndroid Build Coastguard Worker try openssl ca \ 91*6777b538SAndroid Build Coastguard Worker -batch \ 92*6777b538SAndroid Build Coastguard Worker -extensions ca_cert \ 93*6777b538SAndroid Build Coastguard Worker -in out/B.csr \ 94*6777b538SAndroid Build Coastguard Worker -out out/B.pem \ 95*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 96*6777b538SAndroid Build Coastguard Worker 97*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="E CA" \ 98*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 99*6777b538SAndroid Build Coastguard Worker ID=E \ 100*6777b538SAndroid Build Coastguard Worker try openssl req \ 101*6777b538SAndroid Build Coastguard Worker -new \ 102*6777b538SAndroid Build Coastguard Worker -key out/E.key \ 103*6777b538SAndroid Build Coastguard Worker -out out/E.csr \ 104*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 105*6777b538SAndroid Build Coastguard Worker 106*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="C CA" \ 107*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 108*6777b538SAndroid Build Coastguard Worker ID=C \ 109*6777b538SAndroid Build Coastguard Worker try openssl ca \ 110*6777b538SAndroid Build Coastguard Worker -batch \ 111*6777b538SAndroid Build Coastguard Worker -extensions ca_cert \ 112*6777b538SAndroid Build Coastguard Worker -in out/E.csr \ 113*6777b538SAndroid Build Coastguard Worker -out out/E.pem \ 114*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 115*6777b538SAndroid Build Coastguard Worker 116*6777b538SAndroid Build Coastguard Workerecho Generate the leaf certs 117*6777b538SAndroid Build Coastguard Workerfor id in A D F G H I J 118*6777b538SAndroid Build Coastguard Workerdo 119*6777b538SAndroid Build Coastguard Worker COMMON_NAME="Client Cert $id" \ 120*6777b538SAndroid Build Coastguard Worker ID=$id \ 121*6777b538SAndroid Build Coastguard Worker try openssl req \ 122*6777b538SAndroid Build Coastguard Worker -new \ 123*6777b538SAndroid Build Coastguard Worker -key out/$id.key \ 124*6777b538SAndroid Build Coastguard Worker -out out/$id.csr \ 125*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 126*6777b538SAndroid Build Coastguard Worker # Store the private key also in PKCS#8 format. 127*6777b538SAndroid Build Coastguard Worker try openssl pkcs8 \ 128*6777b538SAndroid Build Coastguard Worker -topk8 -nocrypt \ 129*6777b538SAndroid Build Coastguard Worker -in out/$id.key \ 130*6777b538SAndroid Build Coastguard Worker -outform DER \ 131*6777b538SAndroid Build Coastguard Worker -out out/$id.pk8 132*6777b538SAndroid Build Coastguard Workerdone 133*6777b538SAndroid Build Coastguard Worker 134*6777b538SAndroid Build Coastguard Workerecho B signs A 135*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="B CA" \ 136*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 137*6777b538SAndroid Build Coastguard Worker ID=B \ 138*6777b538SAndroid Build Coastguard Worker try openssl ca \ 139*6777b538SAndroid Build Coastguard Worker -batch \ 140*6777b538SAndroid Build Coastguard Worker -extensions user_cert \ 141*6777b538SAndroid Build Coastguard Worker -in out/A.csr \ 142*6777b538SAndroid Build Coastguard Worker -out out/A.pem \ 143*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 144*6777b538SAndroid Build Coastguard Worker 145*6777b538SAndroid Build Coastguard Workerecho E signs D 146*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="E CA" \ 147*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 148*6777b538SAndroid Build Coastguard Worker ID=E \ 149*6777b538SAndroid Build Coastguard Worker try openssl ca \ 150*6777b538SAndroid Build Coastguard Worker -batch \ 151*6777b538SAndroid Build Coastguard Worker -extensions user_cert \ 152*6777b538SAndroid Build Coastguard Worker -in out/D.csr \ 153*6777b538SAndroid Build Coastguard Worker -out out/D.pem \ 154*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 155*6777b538SAndroid Build Coastguard Worker 156*6777b538SAndroid Build Coastguard Workerecho E signs F 157*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="E CA" \ 158*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 159*6777b538SAndroid Build Coastguard Worker ID=E \ 160*6777b538SAndroid Build Coastguard Worker try openssl ca \ 161*6777b538SAndroid Build Coastguard Worker -batch \ 162*6777b538SAndroid Build Coastguard Worker -extensions san_user_cert \ 163*6777b538SAndroid Build Coastguard Worker -in out/F.csr \ 164*6777b538SAndroid Build Coastguard Worker -out out/F.pem \ 165*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 166*6777b538SAndroid Build Coastguard Worker 167*6777b538SAndroid Build Coastguard Workerecho E signs G 168*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="E CA" \ 169*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 170*6777b538SAndroid Build Coastguard Worker ID=E \ 171*6777b538SAndroid Build Coastguard Worker try openssl ca \ 172*6777b538SAndroid Build Coastguard Worker -batch \ 173*6777b538SAndroid Build Coastguard Worker -extensions user_cert \ 174*6777b538SAndroid Build Coastguard Worker -in out/G.csr \ 175*6777b538SAndroid Build Coastguard Worker -out out/G.pem \ 176*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 177*6777b538SAndroid Build Coastguard Worker 178*6777b538SAndroid Build Coastguard Workerecho E signs H 179*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="E CA" \ 180*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 181*6777b538SAndroid Build Coastguard Worker ID=E \ 182*6777b538SAndroid Build Coastguard Worker try openssl ca \ 183*6777b538SAndroid Build Coastguard Worker -batch \ 184*6777b538SAndroid Build Coastguard Worker -extensions user_cert \ 185*6777b538SAndroid Build Coastguard Worker -in out/H.csr \ 186*6777b538SAndroid Build Coastguard Worker -out out/H.pem \ 187*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 188*6777b538SAndroid Build Coastguard Worker 189*6777b538SAndroid Build Coastguard Workerecho E signs I 190*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="E CA" \ 191*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 192*6777b538SAndroid Build Coastguard Worker ID=E \ 193*6777b538SAndroid Build Coastguard Worker try openssl ca \ 194*6777b538SAndroid Build Coastguard Worker -batch \ 195*6777b538SAndroid Build Coastguard Worker -extensions user_cert \ 196*6777b538SAndroid Build Coastguard Worker -in out/I.csr \ 197*6777b538SAndroid Build Coastguard Worker -out out/I.pem \ 198*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 199*6777b538SAndroid Build Coastguard Worker 200*6777b538SAndroid Build Coastguard Workerecho E signs J 201*6777b538SAndroid Build Coastguard WorkerCOMMON_NAME="E CA" \ 202*6777b538SAndroid Build Coastguard Worker CA_DIR=out \ 203*6777b538SAndroid Build Coastguard Worker ID=E \ 204*6777b538SAndroid Build Coastguard Worker try openssl ca \ 205*6777b538SAndroid Build Coastguard Worker -batch \ 206*6777b538SAndroid Build Coastguard Worker -extensions user_cert \ 207*6777b538SAndroid Build Coastguard Worker -in out/J.csr \ 208*6777b538SAndroid Build Coastguard Worker -out out/J.pem \ 209*6777b538SAndroid Build Coastguard Worker -config client-certs.cnf 210*6777b538SAndroid Build Coastguard Worker 211*6777b538SAndroid Build Coastguard Workerecho Package the client certs and private keys into PKCS12 files 212*6777b538SAndroid Build Coastguard Worker# This is done for easily importing all of the certs needed for clients. 213*6777b538SAndroid Build Coastguard Workertry /bin/sh -c "cat out/A.pem out/A.key out/B.pem out/C.pem > out/A-chain.pem" 214*6777b538SAndroid Build Coastguard Workertry /bin/sh -c "cat out/D.pem out/D.key out/E.pem out/C.pem > out/D-chain.pem" 215*6777b538SAndroid Build Coastguard Workertry /bin/sh -c "cat out/F.pem out/F.key out/E.pem out/C.pem > out/F-chain.pem" 216*6777b538SAndroid Build Coastguard Workertry /bin/sh -c "cat out/G.pem out/G.key out/E.pem out/C.pem > out/G-chain.pem" 217*6777b538SAndroid Build Coastguard Workertry /bin/sh -c "cat out/H.pem out/H.key out/E.pem out/C.pem > out/H-chain.pem" 218*6777b538SAndroid Build Coastguard Workertry /bin/sh -c "cat out/I.pem out/I.key out/E.pem out/C.pem > out/I-chain.pem" 219*6777b538SAndroid Build Coastguard Workertry /bin/sh -c "cat out/J.pem out/J.key out/E.pem out/C.pem > out/J-chain.pem" 220*6777b538SAndroid Build Coastguard Worker 221*6777b538SAndroid Build Coastguard Workertry openssl pkcs12 \ 222*6777b538SAndroid Build Coastguard Worker -in out/A-chain.pem \ 223*6777b538SAndroid Build Coastguard Worker -out client_1.p12 \ 224*6777b538SAndroid Build Coastguard Worker -export \ 225*6777b538SAndroid Build Coastguard Worker -passout pass:chrome 226*6777b538SAndroid Build Coastguard Worker 227*6777b538SAndroid Build Coastguard Workertry openssl pkcs12 \ 228*6777b538SAndroid Build Coastguard Worker -in out/D-chain.pem \ 229*6777b538SAndroid Build Coastguard Worker -out client_2.p12 \ 230*6777b538SAndroid Build Coastguard Worker -export \ 231*6777b538SAndroid Build Coastguard Worker -passout pass:chrome 232*6777b538SAndroid Build Coastguard Worker 233*6777b538SAndroid Build Coastguard Workertry openssl pkcs12 \ 234*6777b538SAndroid Build Coastguard Worker -in out/F-chain.pem \ 235*6777b538SAndroid Build Coastguard Worker -out client_3.p12 \ 236*6777b538SAndroid Build Coastguard Worker -export \ 237*6777b538SAndroid Build Coastguard Worker -passout pass:chrome 238*6777b538SAndroid Build Coastguard Worker 239*6777b538SAndroid Build Coastguard Workertry openssl pkcs12 \ 240*6777b538SAndroid Build Coastguard Worker -in out/G-chain.pem \ 241*6777b538SAndroid Build Coastguard Worker -out client_4.p12 \ 242*6777b538SAndroid Build Coastguard Worker -export \ 243*6777b538SAndroid Build Coastguard Worker -passout pass:chrome 244*6777b538SAndroid Build Coastguard Worker 245*6777b538SAndroid Build Coastguard Workertry openssl pkcs12 \ 246*6777b538SAndroid Build Coastguard Worker -in out/H-chain.pem \ 247*6777b538SAndroid Build Coastguard Worker -out client_5.p12 \ 248*6777b538SAndroid Build Coastguard Worker -export \ 249*6777b538SAndroid Build Coastguard Worker -passout pass:chrome 250*6777b538SAndroid Build Coastguard Worker 251*6777b538SAndroid Build Coastguard Workertry openssl pkcs12 \ 252*6777b538SAndroid Build Coastguard Worker -in out/I-chain.pem \ 253*6777b538SAndroid Build Coastguard Worker -out client_6.p12 \ 254*6777b538SAndroid Build Coastguard Worker -export \ 255*6777b538SAndroid Build Coastguard Worker -passout pass:chrome 256*6777b538SAndroid Build Coastguard Worker 257*6777b538SAndroid Build Coastguard Workertry openssl pkcs12 \ 258*6777b538SAndroid Build Coastguard Worker -in out/J-chain.pem \ 259*6777b538SAndroid Build Coastguard Worker -out client_7.p12 \ 260*6777b538SAndroid Build Coastguard Worker -export \ 261*6777b538SAndroid Build Coastguard Worker -passout pass:chrome 262*6777b538SAndroid Build Coastguard Worker 263*6777b538SAndroid Build Coastguard Workertry openssl pkcs12 \ 264*6777b538SAndroid Build Coastguard Worker -inkey out/A.key \ 265*6777b538SAndroid Build Coastguard Worker -in out/A.pem \ 266*6777b538SAndroid Build Coastguard Worker -out out/client_1_u16_password.p12 \ 267*6777b538SAndroid Build Coastguard Worker -export \ 268*6777b538SAndroid Build Coastguard Worker -passout pass:"Hello, 世界" 269*6777b538SAndroid Build Coastguard Worker 270*6777b538SAndroid Build Coastguard Workerecho Package the client certs for unit tests 271*6777b538SAndroid Build Coastguard Workertry cp out/A.pem ../certificates/client_1.pem 272*6777b538SAndroid Build Coastguard Workertry cp out/A.key ../certificates/client_1.key 273*6777b538SAndroid Build Coastguard Workertry cp out/A.pk8 ../certificates/client_1.pk8 274*6777b538SAndroid Build Coastguard Workertry cp out/B.pem ../certificates/client_1_ca.pem 275*6777b538SAndroid Build Coastguard Worker 276*6777b538SAndroid Build Coastguard Workertry cp out/D.pem ../certificates/client_2.pem 277*6777b538SAndroid Build Coastguard Workertry cp out/D.key ../certificates/client_2.key 278*6777b538SAndroid Build Coastguard Workertry cp out/D.pk8 ../certificates/client_2.pk8 279*6777b538SAndroid Build Coastguard Workertry cp out/E.pem ../certificates/client_2_ca.pem 280*6777b538SAndroid Build Coastguard Worker 281*6777b538SAndroid Build Coastguard Workertry cp out/F.pem ../certificates/client_3.pem 282*6777b538SAndroid Build Coastguard Workertry cp out/F.key ../certificates/client_3.key 283*6777b538SAndroid Build Coastguard Workertry cp out/F.pk8 ../certificates/client_3.pk8 284*6777b538SAndroid Build Coastguard Workertry cp out/E.pem ../certificates/client_3_ca.pem 285*6777b538SAndroid Build Coastguard Worker 286*6777b538SAndroid Build Coastguard Workertry cp out/G.pem ../certificates/client_4.pem 287*6777b538SAndroid Build Coastguard Workertry cp out/G.key ../certificates/client_4.key 288*6777b538SAndroid Build Coastguard Workertry cp out/G.pk8 ../certificates/client_4.pk8 289*6777b538SAndroid Build Coastguard Workertry cp out/E.pem ../certificates/client_4_ca.pem 290*6777b538SAndroid Build Coastguard Worker 291*6777b538SAndroid Build Coastguard Workertry cp out/H.pem ../certificates/client_5.pem 292*6777b538SAndroid Build Coastguard Workertry cp out/H.key ../certificates/client_5.key 293*6777b538SAndroid Build Coastguard Workertry cp out/H.pk8 ../certificates/client_5.pk8 294*6777b538SAndroid Build Coastguard Workertry cp out/E.pem ../certificates/client_5_ca.pem 295*6777b538SAndroid Build Coastguard Worker 296*6777b538SAndroid Build Coastguard Workertry cp out/I.pem ../certificates/client_6.pem 297*6777b538SAndroid Build Coastguard Workertry cp out/I.key ../certificates/client_6.key 298*6777b538SAndroid Build Coastguard Workertry cp out/I.pk8 ../certificates/client_6.pk8 299*6777b538SAndroid Build Coastguard Workertry cp out/E.pem ../certificates/client_6_ca.pem 300*6777b538SAndroid Build Coastguard Worker 301*6777b538SAndroid Build Coastguard Workertry cp out/J.pem ../certificates/client_7.pem 302*6777b538SAndroid Build Coastguard Workertry cp out/J.key ../certificates/client_7.key 303*6777b538SAndroid Build Coastguard Workertry cp out/J.pk8 ../certificates/client_7.pk8 304*6777b538SAndroid Build Coastguard Workertry cp out/E.pem ../certificates/client_7_ca.pem 305*6777b538SAndroid Build Coastguard Worker 306*6777b538SAndroid Build Coastguard Workertry cp out/client_1_u16_password.p12 ../certificates/client_1_u16_password.p12 307*6777b538SAndroid Build Coastguard Worker 308*6777b538SAndroid Build Coastguard Workertry cp out/C.pem ../certificates/client_root_ca.pem 309