私鑰檔案格式彙整PEM/DER,PKCS#1,PKCS#8,OpenSSH
最近稿了SSL/TLS雙向連結,被稿的糊里糊塗,所以整理了私鑰檔案的格式彙整在這篇。
PEM/DER
PEM和DER是兩種主流的檔案格式,PEM常見於Linux,DER則常見於Java。不過這兩種格式其實不是只能放置私鑰資料,也可以放置憑證簽署要求(CSR), 憑證(Certificate),端看其中的內容而定。
- DER (Distinguished Encoding Rules)是一種二進位檔案格式,編碼格式定義在ASN.1標準中,需要使用程式打開成人們可讀的文字。
- PEM (Privacy Enhanced Mail)是一文字格式,可直接用文字編輯器即可打開查看,會有一對BEGIN/END挾著以BASE64編碼過的DER資料二進位資料。
生成PEM私鑰
openssl genrsa -out prv_key.pem 4096
openssl genrsa預設生成的PEM私鑰內容如下
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
PEM/DER私鑰格式轉換
轉換PEM格式成DER格式
openssl rsa -in private.key -outform der -out private.der
轉換DER格式成PEM格式
openssl rsa -in private.der -outform pem -out private.key
透過-outform指定輸出格式
PEM私鑰檔案內容
- Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications 參考RFC8017
- Public-Key Cryptography Standards (PKCS) #8: Private-Key Information Syntax Standard 參考
使用於apache和nginx
PKCS#1私鑰檔案內容如下
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
PKCS#1加密過變成
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: ...
...
-----END RSA PRIVATE KEY-----
PKCS#8私鑰檔案內容如下
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
PKCS#8加密過變成
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----
PKCS間的私鑰轉換
生成PKCS#1私鑰
openssl genrsa -out prv_pkcs1.key 4096
openssl genrsa預設使用 PKCS#1格式私鑰轉換PKCS#1私鑰成PKCS#8私鑰
openssl pkcs8 -topk8 -in prv_pkcs1.key -nocrypt -out prv_pkcs8.key
使用openssl pkcs8可進行私鑰轉換轉換PKCS#8私鑰成PKCS#1私鑰
openssl rsa -in prv_pkcs8.key out prv.key
OpenSSH私鑰格式
- RFC4716 (RFC 4716/SSH2 public or private key)
- PKCS8 (PKCS8 public or private key)
- PEM (PEM public key)
預設格式或指定RFC4716時
ssh-keygen -b 4096 -t rsa -f prv.key
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
指定輸出格式為PKCS8時
ssh-keygen -b 4096 -t rsa -f prv.pkcs8.pem -m PKCS8
-----END PRIVATE KEY-----
...
-----END PRIVATE KEY-----
指定輸出格式為PEM時
ssh-keygen -b 4096 -t rsa -f prv.key.pem -m PEM
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
留言