非对称加密
公钥加密的文件可以用私钥解密,私钥加密的文件可以用公钥解密
1 2 3 4 5 6 7 8
| //生成私钥 openssl genpkey -algorithm rsa -out rsa_private.key //从私钥中提取公钥 openssl rsa -pubout -in rsa_private.key //用私钥对文件进行加密(签名) openssl rsautl -sign -in text -inkey rsa_private.key -out text.en //用公钥对文件进行解密(校验) openssl rsautl -verify -in text.en -inkey rsa_pub.key -pubin
|
证书
公钥信息 + 额外的其他信息(所属的实体,加密解密算法等)= 证书,证书文件的扩展名一般为crt
证书格式
- .DER或者.CER:二进制,只包含证书信息,不包含私钥
- .CRT:二进制或者文本
- .PEM:文本格式,可以存放证书或者私钥,或者都包含,如只是包含私钥,一般用.KEY文件替代
- .P12或者.PFX:二进制格式,同时包含证书和私钥,一般有密码保护
- .JKS:二进制格式,java使用证书
1 2 3 4 5 6 7 8 9 10 11 12
| //查看证书信息 openssl x509 -in apiserver.crt -noout -text //查看客户端证书 openssl s_client -connect www.baidu.com:443 //查看证书信息 openssl x509 -in tt.key -noout -text //导出网站的公钥 export WEB_HOST=www.taobao.com && openssl s_client -showcerts -connect ${WEB_HOST}:443 < /dev/null | openssl x509 -outform pem > ${WEB_HOST}.pem && cat ${WEB_HOST}.pem //同上 ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect www.baidu.com:443) -scq //同上 openssl s_client -connect www.baidu.com:443 2 > /dev/null < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
|
ssh生成密钥
1 2
| //使用工具生成密钥 ssh-keygen -t rsa
|
生成自签名证书过程
1 2 3 4 5 6 7 8 9 10 11 12 13
| // 生成根证书私钥 openssl genrsa -out ca.key 2048 // 生成根证书请求文件 openssl req -new -key ca.key -out ca.csr // 生成根证书 openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
// 生成证书私钥 openssl genrsa -out server.key 2048 // 生成证书请求文件 openssl req -new -key server.key -out server.csr // 创建证书 openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
|
java使用证书
1 2 3 4
| //keytool生成密钥文件keystore keytool -importcert -noprompt -trustcacerts -alias test -file server.cer -keystore server.jks //导入证书到java运行环境 keytool -importkeystore -srckeystore server.jks -destkeystore ${JAVA_HOME}/jre/lib/security/cacerts
|