openssl 自建CA簽發證書 網站https的ssl通訊


<<COMMENT
X509 文件擴展名node

首先咱們要理解文件的擴展名錶明什麼。DER、PEM、CRT和CER這些擴展名常常使人困惑。
不少人錯誤地認爲這些擴展名能夠互相代替。儘管的確有時候有些擴展名是能夠互換的,
可是最好你能肯定證書是如何編碼的,進而正確地標識它們。正確地標識證書有助於證書的管理。linux

編碼 (也用於擴展名)git

# DER =擴展名DER用於二進制DER編碼的證書。這些證書也能夠用CER或者CRT做爲擴展名。
比較合適的說法是「我有一個DER編碼的證書」,而不是「我有一個DER證書」。
# PEM =擴展名PEM用於ASCII(Base64)編碼(指字符編碼)的各類X.509 v3 證書。文件開始由一行"—–BEGIN …「開始。web

#CRT =擴展名CRT用於證書。證書能夠是DER編碼,也能夠是PEM編碼。擴展名CER和CRT幾乎是同義詞。
這種狀況在各類unix/linux系統中很常見。
#CER =CRT證書的微軟型式。能夠用微軟的工具把CRT文件轉換爲CER文件(CRT和CER必須是相同編碼的,DER或者PEM)。
擴展名爲CER的文件能夠被IE識別並做爲命令調用微軟的cryptoAPI(具體點就是rudll32.execryptext.dll, CyrptExtOpenCER),
進而彈出一個對話框來導入並/或查看證書內容。
#KEY =擴展名KEY用於PCSK#8的公鑰和私鑰。這些公鑰和私鑰能夠是DER編碼或者PEM編碼。ssh

COMMENT工具

<<COMMENT
#### RSA Key file (PKCS#1)
# openssl genrsa 和 ssh-keygen 命令生成的私鑰就是這樣的格式
-----BEGIN RSA PRIVATE KEY-----
-----BEGIN RSA PUBLIC KEY-----
BASE64 ENCODED DATA
-----END RSA *** KEY-----編碼


#### Key file (PKCS#8)
# openssl rsa -pubout 生成的公鑰就是這樣的格式
-----BEGIN PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
BASE64 ENCODED DATA
-----END *** KEY-----加密


#### SSH V1 file
# ssh-keygen 生成的公鑰就是這樣的格式
sh-rsa AAAABunix


#### SSH V2 file (RFC4716)
---- BEGIN SSH2 PUBLIC KEY ----
BASE64 ENCODED DATA
---- END SSH2 PUBLIC KEY ----
COMMENTorm

<<COMMENT
生成 RSA 私鑰 和 證書請求文件CSR
COMMENT

# example1 利用CA的RSA密鑰建立一個自簽署的CA證書(X.509結構)
openssl genrsa -out private/cakey.pem 2048
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

# 再轉換成pkcs12格式
openssl pkcs12 -export -inkey private/cakey.pem -in cacert.pem -out cacert.pkcs12

# example2 生成一個2048位的RSA私鑰,並用3DES加密(密碼爲1111),保存爲server.key文件
# 再用server.key生成證書籤署請求CSR(這個CSR用於以外發送待CA中心等待簽發)
openssl genrsa -out server.key -passout pass:1111 -des3 2048
openssl req -new -key server.key -out server.csr

# example3 查看CSR的細節:
openssl req -noout -text -in server.csr

<<COMMENT
x509 證書操做
COMMENT

# example1 轉換DER證書爲PEM格式
openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pem

# example2 使用根CA證書對"請求籤發證書"進行簽發,生成x509格式證書
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extensions v3_req

# example3 打印出證書的內容
openssl x509 -in server.crt -noout -text

# 轉換成pkcs12格式
openssl pkcs12 -export -inkey usg6630.key -in usg6630.crt -out usg6630key.pkcs12

<<COMMENT
CA 簽名
COMMENT

# example 利用 CA 證書 ca.crt 簽署請求證書 server.crt:
openssl ca -cert private/cakey.pem -keyfile cacert.pem -in server.csr -out server.crt

<<COMMENT
v3_擴展
COMMENT

[ req ]
req_extensions = v3_req # The extensions to add to a certificate request

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
#subjectAltName = @alt_names
subjectAltName = "DNS:*.cnicg.cn,DNS:*.cniotroot.cn,DNS:*.niot.cn"

<<COMMENT
例子,快速搭建簽署
COMMENT

# 生成 CA 證書密鑰文件 和自簽證書
openssl genrsa -out private/cakey.pem 2048
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

# 生成 Server 證書密鑰文件 & 證書籤名請求
#openssl genrsa -out server.key 2048
openssl req -newkey rsa:2048 -nodes -keyout usg6630.key -out usg6630.csr

# 簽發 Server 證書,會根據該配置文件 openssl.cnf 加載 CA 證書並集合 Server 證書籤名請求文件來完成簽名
# -batch 不問問題 -passin pass:foobar
openssl ca -in usg6630.csr -out usg6630.crt -batch -days 965 -extensions v3_req


<<COMMENT
防火牆端配置,WEB端配置
COMMENT

# 在防火牆 WEB頁面上傳證書和私鑰
# USG6630 防火牆上以usg6630-cert.pem 做爲證書
web-manager security server-certificate usg6630-cert.pem
dis pki ca_list
dis pki cert_list


<<COMMENT
公私鑰格式轉換
COMMENT
# 生成私鑰,默認私鑰都是PEM編碼格式
# 私鑰爲PKCS#1結構,以-----BEGIN RSA PRIVATE KEY-----開頭
# ssh-keygen公鑰爲ssh v1 結構,以ssh-rsa AAAAB3 開頭
ssh-keygen -t rsa -f id_rsa
openssl genrsa -out id_rsa

# 從PKCS#1私鑰生成PKCS#8格式公鑰
openssl rsa -pubout -in id_rsa -out id_rsa_pub.pem

# PKCS#8格式公鑰轉換成 SSH v1的格式公鑰
ssh-keygen -f id_rsa_pub.pem -i -m pkcs8 > id_rsa_ssh.pub
# id_rsa_ssh.pub 等同於 id_rsa.pub

# SSH v1 格式公鑰轉換成PKCS#1公鑰(PEM)
# 轉換後文件以-----BEGIN RSA PUBLIC KEY-----開頭
ssh-keygen -f id_rsa.pub -e -m PEM > id_rsa_pub_pkcs1.pem

# SSH v1 格式公鑰轉換成PKCS#8公鑰
# 轉換後文件以-----BEGIN PUBLIC KEY-----開頭
ssh-keygen -f id_rsa.pub -e -m PKCS8 > id_rsa_pub_pkcs8.pem
# id_rsa_pub_pkcs8.pem 等同於 id_rsa_pub.pem

# SSH v1 格式公鑰轉換成RFC4716(SSH v2)格式公鑰# 轉換後文件以---- BEGIN SSH2 PUBLIC KEY ----開頭ssh-keygen -f id_rsa.pub -e -m RFC4716 > id_rsa_pub_RFC4716.pem

相關文章
相關標籤/搜索