1*ebfedea0SLionel Sambuc=pod 2*ebfedea0SLionel Sambuc 3*ebfedea0SLionel Sambuc=head1 NAME 4*ebfedea0SLionel Sambuc 5*ebfedea0SLionel Sambucpkcs8 - PKCS#8 format private key conversion tool 6*ebfedea0SLionel Sambuc 7*ebfedea0SLionel Sambuc=head1 SYNOPSIS 8*ebfedea0SLionel Sambuc 9*ebfedea0SLionel SambucB<openssl> B<pkcs8> 10*ebfedea0SLionel Sambuc[B<-topk8>] 11*ebfedea0SLionel Sambuc[B<-inform PEM|DER>] 12*ebfedea0SLionel Sambuc[B<-outform PEM|DER>] 13*ebfedea0SLionel Sambuc[B<-in filename>] 14*ebfedea0SLionel Sambuc[B<-passin arg>] 15*ebfedea0SLionel Sambuc[B<-out filename>] 16*ebfedea0SLionel Sambuc[B<-passout arg>] 17*ebfedea0SLionel Sambuc[B<-noiter>] 18*ebfedea0SLionel Sambuc[B<-nocrypt>] 19*ebfedea0SLionel Sambuc[B<-nooct>] 20*ebfedea0SLionel Sambuc[B<-embed>] 21*ebfedea0SLionel Sambuc[B<-nsdb>] 22*ebfedea0SLionel Sambuc[B<-v2 alg>] 23*ebfedea0SLionel Sambuc[B<-v1 alg>] 24*ebfedea0SLionel Sambuc[B<-engine id>] 25*ebfedea0SLionel Sambuc 26*ebfedea0SLionel Sambuc=head1 DESCRIPTION 27*ebfedea0SLionel Sambuc 28*ebfedea0SLionel SambucThe B<pkcs8> command processes private keys in PKCS#8 format. It can handle 29*ebfedea0SLionel Sambucboth unencrypted PKCS#8 PrivateKeyInfo format and EncryptedPrivateKeyInfo 30*ebfedea0SLionel Sambucformat with a variety of PKCS#5 (v1.5 and v2.0) and PKCS#12 algorithms. 31*ebfedea0SLionel Sambuc 32*ebfedea0SLionel Sambuc=head1 COMMAND OPTIONS 33*ebfedea0SLionel Sambuc 34*ebfedea0SLionel Sambuc=over 4 35*ebfedea0SLionel Sambuc 36*ebfedea0SLionel Sambuc=item B<-topk8> 37*ebfedea0SLionel Sambuc 38*ebfedea0SLionel SambucNormally a PKCS#8 private key is expected on input and a traditional format 39*ebfedea0SLionel Sambucprivate key will be written. With the B<-topk8> option the situation is 40*ebfedea0SLionel Sambucreversed: it reads a traditional format private key and writes a PKCS#8 41*ebfedea0SLionel Sambucformat key. 42*ebfedea0SLionel Sambuc 43*ebfedea0SLionel Sambuc=item B<-inform DER|PEM> 44*ebfedea0SLionel Sambuc 45*ebfedea0SLionel SambucThis specifies the input format. If a PKCS#8 format key is expected on input 46*ebfedea0SLionel Sambucthen either a B<DER> or B<PEM> encoded version of a PKCS#8 key will be 47*ebfedea0SLionel Sambucexpected. Otherwise the B<DER> or B<PEM> format of the traditional format 48*ebfedea0SLionel Sambucprivate key is used. 49*ebfedea0SLionel Sambuc 50*ebfedea0SLionel Sambuc=item B<-outform DER|PEM> 51*ebfedea0SLionel Sambuc 52*ebfedea0SLionel SambucThis specifies the output format, the options have the same meaning as the 53*ebfedea0SLionel SambucB<-inform> option. 54*ebfedea0SLionel Sambuc 55*ebfedea0SLionel Sambuc=item B<-in filename> 56*ebfedea0SLionel Sambuc 57*ebfedea0SLionel SambucThis specifies the input filename to read a key from or standard input if this 58*ebfedea0SLionel Sambucoption is not specified. If the key is encrypted a pass phrase will be 59*ebfedea0SLionel Sambucprompted for. 60*ebfedea0SLionel Sambuc 61*ebfedea0SLionel Sambuc=item B<-passin arg> 62*ebfedea0SLionel Sambuc 63*ebfedea0SLionel Sambucthe input file password source. For more information about the format of B<arg> 64*ebfedea0SLionel Sambucsee the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>. 65*ebfedea0SLionel Sambuc 66*ebfedea0SLionel Sambuc=item B<-out filename> 67*ebfedea0SLionel Sambuc 68*ebfedea0SLionel SambucThis specifies the output filename to write a key to or standard output by 69*ebfedea0SLionel Sambucdefault. If any encryption options are set then a pass phrase will be 70*ebfedea0SLionel Sambucprompted for. The output filename should B<not> be the same as the input 71*ebfedea0SLionel Sambucfilename. 72*ebfedea0SLionel Sambuc 73*ebfedea0SLionel Sambuc=item B<-passout arg> 74*ebfedea0SLionel Sambuc 75*ebfedea0SLionel Sambucthe output file password source. For more information about the format of B<arg> 76*ebfedea0SLionel Sambucsee the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>. 77*ebfedea0SLionel Sambuc 78*ebfedea0SLionel Sambuc=item B<-nocrypt> 79*ebfedea0SLionel Sambuc 80*ebfedea0SLionel SambucPKCS#8 keys generated or input are normally PKCS#8 EncryptedPrivateKeyInfo 81*ebfedea0SLionel Sambucstructures using an appropriate password based encryption algorithm. With 82*ebfedea0SLionel Sambucthis option an unencrypted PrivateKeyInfo structure is expected or output. 83*ebfedea0SLionel SambucThis option does not encrypt private keys at all and should only be used 84*ebfedea0SLionel Sambucwhen absolutely necessary. Certain software such as some versions of Java 85*ebfedea0SLionel Sambuccode signing software used unencrypted private keys. 86*ebfedea0SLionel Sambuc 87*ebfedea0SLionel Sambuc=item B<-nooct> 88*ebfedea0SLionel Sambuc 89*ebfedea0SLionel SambucThis option generates RSA private keys in a broken format that some software 90*ebfedea0SLionel Sambucuses. Specifically the private key should be enclosed in a OCTET STRING 91*ebfedea0SLionel Sambucbut some software just includes the structure itself without the 92*ebfedea0SLionel Sambucsurrounding OCTET STRING. 93*ebfedea0SLionel Sambuc 94*ebfedea0SLionel Sambuc=item B<-embed> 95*ebfedea0SLionel Sambuc 96*ebfedea0SLionel SambucThis option generates DSA keys in a broken format. The DSA parameters are 97*ebfedea0SLionel Sambucembedded inside the PrivateKey structure. In this form the OCTET STRING 98*ebfedea0SLionel Sambuccontains an ASN1 SEQUENCE consisting of two structures: a SEQUENCE containing 99*ebfedea0SLionel Sambucthe parameters and an ASN1 INTEGER containing the private key. 100*ebfedea0SLionel Sambuc 101*ebfedea0SLionel Sambuc=item B<-nsdb> 102*ebfedea0SLionel Sambuc 103*ebfedea0SLionel SambucThis option generates DSA keys in a broken format compatible with Netscape 104*ebfedea0SLionel Sambucprivate key databases. The PrivateKey contains a SEQUENCE consisting of 105*ebfedea0SLionel Sambucthe public and private keys respectively. 106*ebfedea0SLionel Sambuc 107*ebfedea0SLionel Sambuc=item B<-v2 alg> 108*ebfedea0SLionel Sambuc 109*ebfedea0SLionel SambucThis option enables the use of PKCS#5 v2.0 algorithms. Normally PKCS#8 110*ebfedea0SLionel Sambucprivate keys are encrypted with the password based encryption algorithm 111*ebfedea0SLionel Sambuccalled B<pbeWithMD5AndDES-CBC> this uses 56 bit DES encryption but it 112*ebfedea0SLionel Sambucwas the strongest encryption algorithm supported in PKCS#5 v1.5. Using 113*ebfedea0SLionel Sambucthe B<-v2> option PKCS#5 v2.0 algorithms are used which can use any 114*ebfedea0SLionel Sambucencryption algorithm such as 168 bit triple DES or 128 bit RC2 however 115*ebfedea0SLionel Sambucnot many implementations support PKCS#5 v2.0 yet. If you are just using 116*ebfedea0SLionel Sambucprivate keys with OpenSSL then this doesn't matter. 117*ebfedea0SLionel Sambuc 118*ebfedea0SLionel SambucThe B<alg> argument is the encryption algorithm to use, valid values include 119*ebfedea0SLionel SambucB<des>, B<des3> and B<rc2>. It is recommended that B<des3> is used. 120*ebfedea0SLionel Sambuc 121*ebfedea0SLionel Sambuc=item B<-v1 alg> 122*ebfedea0SLionel Sambuc 123*ebfedea0SLionel SambucThis option specifies a PKCS#5 v1.5 or PKCS#12 algorithm to use. A complete 124*ebfedea0SLionel Sambuclist of possible algorithms is included below. 125*ebfedea0SLionel Sambuc 126*ebfedea0SLionel Sambuc=item B<-engine id> 127*ebfedea0SLionel Sambuc 128*ebfedea0SLionel Sambucspecifying an engine (by its unique B<id> string) will cause B<pkcs8> 129*ebfedea0SLionel Sambucto attempt to obtain a functional reference to the specified engine, 130*ebfedea0SLionel Sambucthus initialising it if needed. The engine will then be set as the default 131*ebfedea0SLionel Sambucfor all available algorithms. 132*ebfedea0SLionel Sambuc 133*ebfedea0SLionel Sambuc=back 134*ebfedea0SLionel Sambuc 135*ebfedea0SLionel Sambuc=head1 NOTES 136*ebfedea0SLionel Sambuc 137*ebfedea0SLionel SambucThe encrypted form of a PEM encode PKCS#8 files uses the following 138*ebfedea0SLionel Sambucheaders and footers: 139*ebfedea0SLionel Sambuc 140*ebfedea0SLionel Sambuc -----BEGIN ENCRYPTED PRIVATE KEY----- 141*ebfedea0SLionel Sambuc -----END ENCRYPTED PRIVATE KEY----- 142*ebfedea0SLionel Sambuc 143*ebfedea0SLionel SambucThe unencrypted form uses: 144*ebfedea0SLionel Sambuc 145*ebfedea0SLionel Sambuc -----BEGIN PRIVATE KEY----- 146*ebfedea0SLionel Sambuc -----END PRIVATE KEY----- 147*ebfedea0SLionel Sambuc 148*ebfedea0SLionel SambucPrivate keys encrypted using PKCS#5 v2.0 algorithms and high iteration 149*ebfedea0SLionel Sambuccounts are more secure that those encrypted using the traditional 150*ebfedea0SLionel SambucSSLeay compatible formats. So if additional security is considered 151*ebfedea0SLionel Sambucimportant the keys should be converted. 152*ebfedea0SLionel Sambuc 153*ebfedea0SLionel SambucThe default encryption is only 56 bits because this is the encryption 154*ebfedea0SLionel Sambucthat most current implementations of PKCS#8 will support. 155*ebfedea0SLionel Sambuc 156*ebfedea0SLionel SambucSome software may use PKCS#12 password based encryption algorithms 157*ebfedea0SLionel Sambucwith PKCS#8 format private keys: these are handled automatically 158*ebfedea0SLionel Sambucbut there is no option to produce them. 159*ebfedea0SLionel Sambuc 160*ebfedea0SLionel SambucIt is possible to write out DER encoded encrypted private keys in 161*ebfedea0SLionel SambucPKCS#8 format because the encryption details are included at an ASN1 162*ebfedea0SLionel Sambuclevel whereas the traditional format includes them at a PEM level. 163*ebfedea0SLionel Sambuc 164*ebfedea0SLionel Sambuc=head1 PKCS#5 v1.5 and PKCS#12 algorithms. 165*ebfedea0SLionel Sambuc 166*ebfedea0SLionel SambucVarious algorithms can be used with the B<-v1> command line option, 167*ebfedea0SLionel Sambucincluding PKCS#5 v1.5 and PKCS#12. These are described in more detail 168*ebfedea0SLionel Sambucbelow. 169*ebfedea0SLionel Sambuc 170*ebfedea0SLionel Sambuc=over 4 171*ebfedea0SLionel Sambuc 172*ebfedea0SLionel Sambuc=item B<PBE-MD2-DES PBE-MD5-DES> 173*ebfedea0SLionel Sambuc 174*ebfedea0SLionel SambucThese algorithms were included in the original PKCS#5 v1.5 specification. 175*ebfedea0SLionel SambucThey only offer 56 bits of protection since they both use DES. 176*ebfedea0SLionel Sambuc 177*ebfedea0SLionel Sambuc=item B<PBE-SHA1-RC2-64 PBE-MD2-RC2-64 PBE-MD5-RC2-64 PBE-SHA1-DES> 178*ebfedea0SLionel Sambuc 179*ebfedea0SLionel SambucThese algorithms are not mentioned in the original PKCS#5 v1.5 specification 180*ebfedea0SLionel Sambucbut they use the same key derivation algorithm and are supported by some 181*ebfedea0SLionel Sambucsoftware. They are mentioned in PKCS#5 v2.0. They use either 64 bit RC2 or 182*ebfedea0SLionel Sambuc56 bit DES. 183*ebfedea0SLionel Sambuc 184*ebfedea0SLionel Sambuc=item B<PBE-SHA1-RC4-128 PBE-SHA1-RC4-40 PBE-SHA1-3DES PBE-SHA1-2DES PBE-SHA1-RC2-128 PBE-SHA1-RC2-40> 185*ebfedea0SLionel Sambuc 186*ebfedea0SLionel SambucThese algorithms use the PKCS#12 password based encryption algorithm and 187*ebfedea0SLionel Sambucallow strong encryption algorithms like triple DES or 128 bit RC2 to be used. 188*ebfedea0SLionel Sambuc 189*ebfedea0SLionel Sambuc=back 190*ebfedea0SLionel Sambuc 191*ebfedea0SLionel Sambuc=head1 EXAMPLES 192*ebfedea0SLionel Sambuc 193*ebfedea0SLionel SambucConvert a private from traditional to PKCS#5 v2.0 format using triple 194*ebfedea0SLionel SambucDES: 195*ebfedea0SLionel Sambuc 196*ebfedea0SLionel Sambuc openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem 197*ebfedea0SLionel Sambuc 198*ebfedea0SLionel SambucConvert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm 199*ebfedea0SLionel Sambuc(DES): 200*ebfedea0SLionel Sambuc 201*ebfedea0SLionel Sambuc openssl pkcs8 -in key.pem -topk8 -out enckey.pem 202*ebfedea0SLionel Sambuc 203*ebfedea0SLionel SambucConvert a private key to PKCS#8 using a PKCS#12 compatible algorithm 204*ebfedea0SLionel Sambuc(3DES): 205*ebfedea0SLionel Sambuc 206*ebfedea0SLionel Sambuc openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES 207*ebfedea0SLionel Sambuc 208*ebfedea0SLionel SambucRead a DER unencrypted PKCS#8 format private key: 209*ebfedea0SLionel Sambuc 210*ebfedea0SLionel Sambuc openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem 211*ebfedea0SLionel Sambuc 212*ebfedea0SLionel SambucConvert a private key from any PKCS#8 format to traditional format: 213*ebfedea0SLionel Sambuc 214*ebfedea0SLionel Sambuc openssl pkcs8 -in pk8.pem -out key.pem 215*ebfedea0SLionel Sambuc 216*ebfedea0SLionel Sambuc=head1 STANDARDS 217*ebfedea0SLionel Sambuc 218*ebfedea0SLionel SambucTest vectors from this PKCS#5 v2.0 implementation were posted to the 219*ebfedea0SLionel Sambucpkcs-tng mailing list using triple DES, DES and RC2 with high iteration 220*ebfedea0SLionel Sambuccounts, several people confirmed that they could decrypt the private 221*ebfedea0SLionel Sambuckeys produced and Therefore it can be assumed that the PKCS#5 v2.0 222*ebfedea0SLionel Sambucimplementation is reasonably accurate at least as far as these 223*ebfedea0SLionel Sambucalgorithms are concerned. 224*ebfedea0SLionel Sambuc 225*ebfedea0SLionel SambucThe format of PKCS#8 DSA (and other) private keys is not well documented: 226*ebfedea0SLionel Sambucit is hidden away in PKCS#11 v2.01, section 11.9. OpenSSL's default DSA 227*ebfedea0SLionel SambucPKCS#8 private key format complies with this standard. 228*ebfedea0SLionel Sambuc 229*ebfedea0SLionel Sambuc=head1 BUGS 230*ebfedea0SLionel Sambuc 231*ebfedea0SLionel SambucThere should be an option that prints out the encryption algorithm 232*ebfedea0SLionel Sambucin use and other details such as the iteration count. 233*ebfedea0SLionel Sambuc 234*ebfedea0SLionel SambucPKCS#8 using triple DES and PKCS#5 v2.0 should be the default private 235*ebfedea0SLionel Sambuckey format for OpenSSL: for compatibility several of the utilities use 236*ebfedea0SLionel Sambucthe old format at present. 237*ebfedea0SLionel Sambuc 238*ebfedea0SLionel Sambuc=head1 SEE ALSO 239*ebfedea0SLionel Sambuc 240*ebfedea0SLionel SambucL<dsa(1)|dsa(1)>, L<rsa(1)|rsa(1)>, L<genrsa(1)|genrsa(1)>, 241*ebfedea0SLionel SambucL<gendsa(1)|gendsa(1)> 242*ebfedea0SLionel Sambuc 243*ebfedea0SLionel Sambuc=cut 244