前言
- 最近補了https的知識。感覺收穫很大,不知道爲啥那麼多人推薦圖解http,感覺這書實現上都沒說,跟啓蒙書一樣。。
- 這篇如果讀者看不懂建議先看一下讀書筆記。
環境
- 實踐系統爲centos8,反正7應該也可以。
- 首先寫入一段文本,作爲加解密的案例:
echo yehuozhili > msg.txt
摘要加密
openssl dgst -md5 msg.txt
- dgst就是digest縮寫,表示摘要。
- 中間的-sha1可以換成別的加密方式比如sha256 md5什麼的。
對稱加密
openssl enc -e -aes128 -k 123456 -a -in msg.txt -out enc_msg.txt
- 其中,enc -e 表示加密, -k表示密碼,-a表示base64 -in 表示來源文件 -out表示輸出文件
- 有可能會出現警告:
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
- 它意思就是這個方法不安全,建議加上迭代次數和pbkdf2的算法來增加安全性:
openssl enc -e -aes128 -k 123456 -a -iter 100 -pbkdf2 -in msg.txt -out iter_enc_msg.txt
openssl enc -d -aes128 -k 123456 -a -in enc_msg.txt -out dee_msg.txt
- 如果是有迭代次數加密的這種解法無法解密,需要增加迭代次數。
openssl enc -d -aes128 -k 123456 -a -iter 100 -in iter_enc_msg.txt -out dee_msg.txt
非對稱加密
openssl genrsa -out private.key 1024
- 最後的數字代表生成多少位的。
- 然後根據私鑰生成公鑰:
openssl rsa -pubout -in private.key -out public.key
openssl rsautl -encrypt -inkey public.key -pubin -in msg.txt -out rsa_msg.txt
openssl rsautl -decrypt -inkey private.key -in rsa_msg.txt -out dersa_msg.txt
openssl dgst -sign private.key -sha256 -out sign.msg.txt msg.txt
openssl dgst -verify public.key -sha256 -signature sign.msg.txt msg.txt
自建ca機構
- 一般證書都是別的機構頒發的,其實自己建一個只要敲幾個命令就行了。有讀者不懂得可以看一下讀書筆記
- 先生成ca得私鑰:
openssl genrsa -out ca.priviate.key 2048
openssl req -new -x509 -key ca.priviate.key -out ca.crt -days 365 -subj /C=CN/ST=Beijing/L=Beijing/O=ca/OU=ca/CN=www.ca.com/[email protected]
- 這個參數名基本上一猜就知道是啥了。不給主題會以對話方式問你,也一樣。
自建ca給自己頒證書
openssl req -new -key private.key -out server.csr -subj /C=CN/ST=Beijing/L=Beijing/O=yehuozhili/OU=yehuozhili/
- 這樣就生成了個server.csr文件。
- 再使用ca私鑰給服務器請求證書籤名:
openssl x509 -req -days 365 -CA ca.crt -CAkey ca.priviate.key -CAcreateserial -in server.csr -out server.crt
- 這樣簽名完成。拿到了服務器證書。
- nginx配置證書:
ssl_certificate 證書地址
ssl_certificate_key 私鑰地址