openssl實現公私鑰證書生成以及轉換

1 openssl簡介

1.1 概述

  OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼算法、經常使用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。node

1.2 背景技術

   SSL是Secure Sockets Layer( 安全套接層協議)的縮寫,能夠在Internet上提供祕密性傳輸。 Netscape公司在推出第一個 Web瀏覽器的同時,提出了SSL協議標準。其目標是保證兩個應用間通訊的保密性和可靠性,可在服務器端和用戶端同時實現支持。已經成爲 Internet上保密通信的工業標準。
  SSL能使用戶/服務器應用之間的通訊不被攻擊者竊聽,而且始終對服務器進行認證,還可選擇對用戶進行認證。SSL協議要求創建在可靠的 傳輸層協議( TCP)之上。SSL協議的優點在於它是與 應用層協議獨立無關的,高層的應用層協議(例如: HTTPFTPTELNET等)能透明地創建於SSL協議之上。SSL協議在應用層協議通訊以前就已經完成 加密算法、通訊 密鑰的協商及服務器認證工做。在此以後應用層協議所傳送的數據都會被加密,從而保證通訊的私密性。

1.3 安全信道特徵

數據保密性
  信息加密就是把明碼的輸入文件用 加密算法轉換成加密的文件以實現數據的保密。加密的過程須要用到 密鑰來加密數據而後再解密。沒有了密鑰,就沒法解開加密的數據。 數據加密以後,只有密鑰要用一個安全的方法傳送。加密過的數據能夠公開地傳送。
數據完整性
  加密也能保證數據的一致性。例如:消息驗證碼( MAC),可以校驗用戶提供的加密信息,接收者能夠用MAC來校驗加密數據,保證數據在傳輸過程當中沒有被篡改過。
安全驗證
  加密的另一個用途是用來做爲我的的標識,用戶的密鑰能夠做爲他的安全驗證的標識。SSL是利用 公開密鑰加密技術RSA)來做爲用戶端與服務器端在傳送機密資料時的加密通信協定。
  OpenSSL包含一個命令行工具用來完成OpenSSL庫中的全部功能,更好的是,它可能已經安裝到你的系統中了。
  OpenSSL是一個強大的安全套接字層密碼庫, Apache使用它加密HTTPS,OpenSSH使用它加密 SSH,可是,你不該該只將其做爲一個庫來使用,它仍是一個多用途的、跨平臺的密碼工具。[1]  

1.4 功能

  OpenSSL整個軟件包大概能夠分紅三個主要的功能部分:SSL協議庫、應用程序以及 密碼算法庫。OpenSSL的目錄結構天然也是圍繞這三個功能部分進行規劃的。
  做爲一個基於密碼學的安全開發包,OpenSSL提供的功能至關強大和全面,囊括了主要的密碼算法、經常使用的 密鑰和證書封裝管理功能以及SSL協議,並提供了豐富的應用程序供測試或其它目的使用。
 

1.5  密碼算法

   密鑰和證書管理是 PKI的一個重要組成部分,OpenSSL爲之提供了豐富的功能,支持多種標準。
  首先,OpenSSL實現了ASN.1的證書和密鑰相關標準,提供了對證書、 公鑰私鑰、證書請求以及CRL等 數據對象的DER、PEM和BASE64的編解碼功能。OpenSSL提供了產生各類 公開密鑰對和對稱密鑰的方法、函數和應用程序,同時提供了對公鑰和私鑰的DER編解碼功能。並實現了私鑰的PKCS#12和PKCS#8的編解碼功能。OpenSSL在標準中提供了對私鑰的加密保護功能,使得密鑰能夠安全地進行存儲和分發。
  在此基礎上,OpenSSL實現了對證書的X.509標準編解碼、PKCS#12格式的編解碼以及PKCS#7的編解碼功能。並提供了一種文本數據庫,支持證書的管理功能,包括證書 密鑰產生、請求產生、證書籤發、吊銷和驗證等功能。
  事實上,OpenSSL提供的CA應用程序就是一個小型的證書管理中心(CA),實現了證書籤發的整個流程和證書管理的大部分機制。

對稱加密

  OpenSSL一共提供了8種對稱加密算法,其中7種是分組加密算法,僅有的一種流加密算法是RC4。這7種分組加密算法分別是AES、DES、Blowfish、CAST、IDEA、RC二、RC5,都支持電子密碼本模式(ECB)、加密分組連接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種經常使用的 分組密碼加密模式。其中,AES使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長度是128位,其它算法使用的則是64位。事實上,DES算法裏面不只僅是經常使用的DES算法,還支持三個 密鑰和兩個密鑰3DES算法。

非對稱加密

  OpenSSL一共實現了4種非對稱 加密算法,包括 DH算法、 RSA算法、 DSA算法橢圓曲線算法(EC)。DH算法通常用於 密鑰交換。RSA算法既能夠用於密鑰交換,也能夠用於 數字簽名,固然,若是你可以忍受其緩慢的速度,那麼也能夠用於 數據加密。DSA算法則通常只用於數字簽名。

信息摘要

  OpenSSL實現了5種信息摘要算法,分別是MD二、MD五、MDC二、SHA(SHA1)和 RIPEMD。SHA算法事實上包括了SHA和SHA1兩種信息摘要算法。此外,OpenSSL還實現了DSS標準中規定的兩種信息摘要算法DSS和DSS1。

2 openssl經常使用命令

2.1 OpenSSl命令總覽

語法格式:算法

  openssl command [ command_opts ] [ command_args ]數據庫

經常使用command:瀏覽器

  version    用於查看版本信息安全

  enc        用於加解密服務器

  ciphers    列出加密套件函數

  genrsa    用於生成私鑰工具

  rsa        RSA密鑰管理(例如:從私鑰中提取公鑰)測試

  req        生成證書籤名請求(CSR)網站

  crl        證書吊銷列表(CRL)管理

  ca         CA管理(例如對證書進行簽名)

  dgst      生成信息摘要

  rsautl    用於完成RSA簽名、驗證、加密和解密功能

  passwd    生成散列密碼

  rand      生成僞隨機數

  speed      用於測試加解密速度                    

  s_client  通用的SSL/TLS客戶端測試工具

  X509       X.509證書管理

  verify      X.509證書驗證

  pkcs7       PKCS#7協議數據管理

2.2 應用

2.2.1 生成公私鑰範例一

(1)客戶證書密鑰構建(默認爲私鑰密鑰):採用openssl的desc3加密算法來建立RSA密鑰,其中生成的des3密鑰長度爲1024

  # genrsa -des3 -out private_test.key 1024

(2)生成證書請求,經過私鑰和配置文件生成公鑰,公鑰有效期爲10年(3650爲天數)

  # req -new -x509 -key private_test.key -days 3650 -out public_test.crt -config D:\software\openssl\openssl\openssl.cnf

 

(3)格式轉換:轉換成一個格式編碼爲pkcs12的私鑰

  #  pkcs12 -export -name epayment2017 -in public_test.crt -inkey private_test.key -out private_test.pfx

(4)從已生成的商戶證書中提取公鑰串

  # x509 -outform PEM -in public_test.crt -pubkey -out server.pubkey

 

 2.2.2 生成公鑰和pkcs8格式私鑰

(1)生成rsa原始私鑰

# genrsa -out rsa_private_key.pem 1024

  此時,咱們能夠在bin 文件夾中看到一個文件名爲rsa_private_key.pem 的文件,用記事本方式打開它,能夠看到-----BEGIN RSA PRIVATE KEY-----開頭,-----END RSA PRIVATEKEY-----結尾的沒有換行的字符串,這個就是原始的私鑰。

(2)RSA 私鑰轉換成PKCS8格式

# pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -ouform PEM -nocrypt

(3)生成公鑰

# rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

3 證書格式轉換

3.1 證書轉換

# PKCS轉換爲PEM
> openssl pkcs12 -in myserver.pfx -out myserver.pem -nodes

# PEM轉換爲DER
> openssl x509 -outform der -in myserver.pem -out myserver.[der|crt]
 
# PEM提取KEY
> openssl RSA -in myserver.pem -out myserver.key

# DER轉換爲PEM
> openssl x509 -inform der -in myserver.[cer|crt] -out myserver.pem

# PEM轉換爲PKCS
> openssl pkcs12 -export -inkey myserver.key -in myserver.pem  -out myserver.pfx -certfile ca.crt
> openssl pkcs12 -export -inkey www.mysite.com.key -in www.mysite.com.pem -passin pass:123456 -passout pass:123456 -out www.mysite.com.p12

3.2 查看證書內容

# 查看KEY信息
$ openssl rsa -noout -text -in myserver.key

# 查看CSR信息
$ openssl req -noout -text -in myserver.csr

# 查看證書信息
$ openssl x509 -noout -text -in ca.pem

# 查看證書公鑰對應的RSA模
$ openssl x509 -in mysite.pem -noout -modulus

# 查看證書subject項
$ openssl x509
-in mysite.pem -noout -subject -nameopt multiline # 查看證書issuer項
$ openssl x509
-in mysite.pem -noout -issuer -nameopt multiline # 檢查證書用途 $ openssl x509 -purpose -noout -in 192.168.200.7.cer

 4 OpenSSL下載方式(二選一)

一、Windows用戶開發者能夠在OpenSSL官方網站下載Windows的OpenSSL安裝包進行安裝。下載路徑:https://www.openssl.org/source/

二、簡易安裝包下載地址:https://files.cnblogs.com/files/xq1314/openssl.zip

 (1)雙擊bin目錄下的openssl.exe執行文件

參考:

  一、https://baike.baidu.com/item/openssl/5454803?fr=aladdin#5

  二、http://blog.csdn.net/baidu_36649389/article/details/54379935

相關文章
相關標籤/搜索