前言
- 最近补了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/emailAddress=ca@qq.com
- 这个参数名基本上一猜就知道是啥了。不给主题会以对话方式问你,也一样。
自建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 私钥地址