OpenSSL的使用
一、打開openssl
找到OpenSSL安裝目錄下的bin,執行bin下的“openssl.exe”,用管理員身份運行
結果如下:
二、名詞解釋
- 什麼是CA?
CA就相當於一個認證機構,只要經過這個機構簽名的證書我們就可以當做是可信任的。我們的瀏覽器中,已經被寫入了默認的CA根證書。 - 什麼是證書?
證書就是將我們的公鑰和相關信息寫入一個文件,CA用它們的私鑰對我們的公鑰和相關信息進行簽名後,將簽名信息也寫入這個文件後生成的一個文件。 - 證書格式(是一種標準):
x509 這種證書只有公鑰,不包含私鑰。
pcks#7 這種主要是用於簽名或者加密。
pcks#12 這種含有私鑰,同時也含有公鑰,但是有口令保護。 - 編碼方式:
.pem 後綴的證書都是base64編碼
.der 後綴的證書都是二進制格式 - 證書:
.csr 後綴的文件是用於向ca申請簽名的請求文件
.crt .cer 後綴的文件都是證書文件(編碼方式不一定,有可能是.pem,也有可能是.der) - 私鑰:
.key 後綴的文件是私鑰文件
三、查看OpenSSL版本和編譯參數
命令行輸入:
version -a
四、RSA密鑰操作
1、生成RSA私鑰:
genrsa -out rsa_private_key.pem 1024
生成一個名爲rsa_private_key.pem文件,用寫字板或記事本打開即可,該文件在bin目錄下,其中1024是私鑰的長度,也可以生成2048等其他長度的私鑰。
(注:OpenSSL 使用 PEM 文件格式存儲證書和密鑰。PEM 實質上是 Base64 編碼的二進制內容,再加上開始和結束行,如證書文件的
-----BEGIN CERTIFICATE-----
和
-----END CERTIFICATE-----)
打開rsa_private_key.pem文件,內容如下:其中begin和end之間的爲密鑰
若運行時沒有使用管理員身份打開,會出現 “ unable to write ‘random state’ ”錯誤
2、查看私鑰內容:
輸入:
rsa -in rsa_private_key.pem -text -noout
3、利用私鑰生成公鑰:
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
在bin目錄下生成一個rsa_public_key.pem文件
4、查看公鑰內容
- 讀取公鑰內容:
rsa -pubin -in rsa_public_key.pem
- 以文本格式輸出公鑰內容:
rsa -pubin -in rsa_public_key.pem -text
- 不輸出公鑰內容:
rsa -pubin -in rsa_public_key.pem -text -noout
五、使用OpenSSL進行文件的加解密
使用OpenSSL命令行進行文件加解密主要有兩種方式
1、使用密碼方式加密或者解密文件(直接對文件進行加解密)
(1)、加密一個文件:
enc -e -aes256 -in data.txt -out back.txt
(data.txt是加密前的文件,back.txt是加密後的文件,也可以加密Zip、doc等其他形式的文件)
解釋: enc 表示對文件進行對稱加密或解密, -e 表示對一個文件進行加密操作,-aes256 表示使用 aes256 算法進行加密,也可以是base64等加密方式,-in 表示需要被加密的文件,-out 表示加密之後生成的新文件。加密過程中會要求輸入一個加密密碼,重複輸入兩次即可完成對文件的加密。注意:輸入密碼的時候屏幕上沒有任何顯示,回車,會提示再次輸入。輸完後回車。
(2)、解密一個文件
enc -d -aes256 -in back.txt -out data.txt
(back.txt是加密的文件,data.txt是解密之後的文件)
解釋: enc 表示對文件進行對稱加密或解密, -d 表示對文件進行解密操作,-aes256 表示使用 aes256 算法進行解密,-in 表示需要被解密的文件,-out 表示解密之後生成的新文件,解密一個文件的時候會要求輸入加密文件時設置的密碼才能進行解密。
2、使用密鑰方式加密或者解密文件(先生成密鑰,再加密)
(文件爲上文生成的含有密鑰的.pem文件)
(1)、 使用 rsa_public_key.pem 公鑰加密一個文件 (data.txt 爲原始文件,back.txt 爲加密之後的文件)
rsautl -encrypt -inkey rsa_public_key.pem -pubin -in data.txt -out back.txt
(2)、使用 rsa_private_key.pem 私鑰解密一個文件 (back.txt 爲加密的文件,data.txt 爲解密之後的文件)
rsautl -decrypt -inkey rsa_private_key.pem -in back.txt -out data.txt