openssl常用使用總結

樂世東方客發表於2020-12-01

介紹

 SSL證書通過在客戶端瀏覽器和Web伺服器之間建立一條SSL安全通道(Secure socketlayer(SSL),SSL安全協議主要用來提供對使用者和伺服器的認證;對傳送的資料進行加密和隱藏;確保資料在傳送中不被改變,即資料的完整性,現已成為該領域中全球化的標準。

證書檔案字尾介紹

.key:私用金鑰,openssl格式,通常是rsa演算法。

.csr:證書請求檔案,用於申請證書。在製作csr檔案的時候,必須使用自己的私鑰來簽署申請,還可以設定一個金鑰,certificate signing request的縮寫。

.crt:CA認證後的證書檔案(windows下面的csr,其實是crt),簽署人用自己的key給你簽署的憑證,certificate的縮寫。

.pem:用於匯出,匯入證書時候的證書的格式,有證書開頭,結尾的格式

.crl格式:證書吊銷列表,Certificate Revocation List的縮寫

證書生成流程

CA根證書的生成

生成CA私鑰(.key)---->生成CA證書請求(.csr)----->自簽名得到根證書(.crt)(CA給自已頒發的證書)。

使用者證書的生成

生成私鑰(.key)---->生成證書請求(.csr)---->用CA根證書籤名得到證書(.crt)   (如果沒有CA證書,用x509替代,x509相當於小型的內建的CA)

使用 x509 進行生成證書(不用自己生成CA)

x509證書一般會用到三類檔案,key,csr,crt。

1.生成一個RSA金鑰,這個是自己生成的私鑰

[root@localhost ssl]# openssl genrsa -des3 -out nginx.key 1024 #實際使用中看伺服器效能,如果足夠好也可以使用4096位祕鑰
Generating RSA private key, 1024 bit long modulus
…….++++++
…++++++
e is 65537 (0x10001)
Enter pass phrase for nginx.key: #輸入密碼,自定義,不少於4個字元
Verifying - Enter pass phrase for nginx.key: #確認密碼


#也可以使用引數 -passout pass:123456 就不用再填密碼了

2.生成一個證書請求

[root@localhost ssl]# openssl req -new -key nginx.key -out nginx.csr
Enter pass phrase for nginx.key: #輸入剛剛建立的祕密碼
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [XX]:CN #國家名稱
State or Province Name (full name) []:xxxx #省
Locality Name (eg, city) [Default City]:xxxxx #市
Organization Name (eg, company) [Default Company Ltd]:xxxxx #公司
Organizational Unit Name (eg, section) []:xxxxxx #部門
Common Name (eg, your name or your server's hostname) []:.mydomain.com #注意,此處應當填寫你要部署的域名,如果是單個則直接新增即可,如果不確定,使用,表示可以對所有mydomain.com的子域名做認證
Email Address []:admin@mydomain.com #以域名結尾即可
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: #是否設定密碼,可以不寫直接回車

3.建立不需要輸入密碼的RSA證書,否則每次reload、restart nginx都需要輸入密碼(一個場景而已)

[root@localhost ssl]# openssl rsa -in nginx.key -out nginx_nopass.key 
Enter pass phrase for nginx.key: #之前RSA祕鑰建立時的密碼 writing RSA key

4.簽發證書

[root@localhost ssl]# openssl x509 -req -days 36500 -in nginx.csr -signkey nginx.key -out nginx.crt 
Signature ok subject=/C=CN/ST=xxxx/L=xxxxx/O=xxxxx/OU=xxxxx/CN=*.mydomain.com/emailAddress=admin@mydomain.com Getting Private key Enter pass phrase for nginx.key: #RSA建立時的密碼 days代表證書有效天數,先弄個十年的。

之後把nginx.crt證書和nginx_nopass.key 檔案配置進入nginx即可。

自己生成CA證書,並給自己使用者簽證

# Generate CA private key 
openssl genrsa -out ca.key 2048 
# Generate CSR 
openssl req -new -key ca.key -out ca.csr
# Generate Self Signed certificate(CA 根證書)
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt


你看到的沒錯,即使是CA根證書也要x509進行建立
然後用自己建立的CA給服務端簽證
# private key
$openssl genrsa -des3 -out server.key 1024 
# generate csr
$openssl req -new -key server.key -out server.csr
# generate certificate
$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

生成pem格式證書: 
有時需要用到pem格式的證書,可以用以下方式合併證書檔案(crt)和私鑰檔案(key)來生成 

$cat server.crt server.key > server.pem

 

相關文章