加密
非对称加密:公钥私钥分离,仅传播公钥,安全性高,开销大;
对称加密:加密后要用密码进行解密,需要保证密码被安全传输;相对安全,开销小;
安全的web服务要先用非对称加密的方式传送对称加密的秘钥,后续用对称加密通信;
Linux或者Windows任意目录均可实验
#生成私钥
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
#生成公钥
openssl rsa -pubout -in private_key.pem -out public_key.pem
#生成数据
echo "Hello, OpenSSL!" > data.txt
#公钥加密数据
openssl pkeyutl -encrypt -pubin -inkey public_key.pem -in data.txt -out data_encrypted.dat
#私钥解密数据
openssl pkeyutl -decrypt -inkey private_key.pem -in data_encrypted.dat -out data_decrypted.txt
对称加密测试
# 生成一个 256 位(32 字节)的随机密钥
openssl rand -base64 32 > aes_key.bin
#生成数据并加密
echo "Hello, AES!" > data.txt
openssl enc -aes-256-cbc -in data.txt -out data_encrypted_aes.dat -pass file:aes_key.bin
#解密
openssl enc -aes-256-cbc -d -in data_encrypted_aes.dat -out data_decrypted_aes.txt -pass file:aes_key.bin
签名
签名原理,借鉴一下
证书
所谓web服务证书就是certificate authority(CA)用自己的私钥给的申请证书的web服务的公钥进行签名生成的;
我们的操作系统中一般默认安装有各个根CA的证书(自签名公钥),所以可以完成对这些CA发布的证书进行验签;
当我们自己需要简一个网站时,需要生成一对密钥对,并需要向CA申请给公钥签名生成证书;这样,将申请到的证书发明文发送到客户端时,客户端用本地的根CA证书对服务器证书进行验签;后续就可以用这个证书里带的公钥与服务器端进行加密通信了;
所谓CA证书就是一个通信双方都信任的自签名的公钥,当用于测试、学习、或者内部通信时,完全可以自己生成ca证书和与之配对的私钥;需要给服务器颁发证书时就用ca证书对应的私钥进行签名颁发证书;只要保护好ca证书和对应的私钥就可以保证安全通信;