前言:
今天同学们对“ssl和非对称加密算法”大致比较关怀,各位老铁们都需要了解一些“ssl和非对称加密算法”的相关知识。那么小编也在网摘上搜集了一些关于“ssl和非对称加密算法””的相关知识,希望同学们能喜欢,你们一起来了解一下吧!一、概述
SSL(SecureSocket Layer)安全套接层,是网景公司提出的用于保证Server与client之间安全通信的一种协议,该协议位于TCP/IP协议与各应用层协议之间,即SSL独立于各应用层协议,因此各应用层协议可以透明地调用SSL来保证自身传输的安全性;
开源的产品Openssl对SSL以及TLS1.0都能提供较好的支持;
二、SSL与TLS之间的关系
TLS是互联网标准化组织ISOC接替NetScape公司,从SSL3.0开始,发布的SSL的升级版本,TLS 1.0又被叫做SSL 3.1,后续用TLS来继续演进;
事实上我们现在用的都是TLS,但因为历史上习惯了SSL这个称呼;
TLS 1.0 = SSL 3.1
TLS 1.1 = SSL 3.2
TLS 1.2 = SSL 3.3
三、证书
X.509:这是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参考RFC5280,SSL使用的就是这种证书标准;
自签名证书和CA签名证书
自签名的证书无法被吊销,CA签名的证书可以被吊销;
四、证书各种术语证书编码格式
PEM:Privacy Enhanced Mail,是ASCII编码格式;
DER:Distinguished Encoding Rules,是二进制编码格式,可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN1 DER 格式存储。它是无报头的。可以说,PEM 是用文本报头包围的 DER;
两种证书编码可以转换;
PEM转为DER:
openssl x509 -in cert.crt -outform der -out cert.der
DER转为PEM:
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem证书文件后缀
DER:DER编码证书;
PEM:PEM编码证书;
CRT:常见与Unix/Linux操作系统,有可能是PEM编码,也有可能是DER编码,包含公钥和主体信息,证书中没有私钥,CRT和CER几乎一样;
CER:常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,包含公钥和主体信息,证书中没有私钥,Windows下有工具可以转换CRT到CER;
PFX/P12:包含公钥和私钥,证书交换格式,后缀为pfx或p12;
JKS:即Java Key Storage,这是Java的专利,跟OpenSSL关系不大,利用Java的一个叫"keytool"的工具,可以将PFX转为JKS,当然了,keytool也能直接生成JKS;
非证书文件后缀
KEY:通常用来存放一个公钥或者私钥,并非X.509证书,编码可能是PEM,也可能是DER;
CSR:Certificate Signing Request,即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥和主体信息,在生成这个申请的时候,同时也会生成一个私钥文件,需要保存;
公钥私钥
公钥(Public Key)与私钥(Private Key)是通过加密算法得到的一个密钥对(即一个公钥和一个私钥,也就是非对称加密方式)。
公钥可对会话进行加密、验证数字签名,只有使用对应的私钥才能解密会话数据,从而保证数据传输的安全性。公钥是密钥对外公开的部分,私钥则是非公开的部分,由用户自行保管;
通过加密算法得到的密钥对可以保证在世界范围内是唯一的。使用密钥对的时候,如果用其中一个密钥加密一段数据,只能使用密钥对中的另一个密钥才能解密数据。例如:用公钥加密的数据必须用对应的私钥才能解密;如果用私钥进行加密也必须使用对应的公钥才能解密,否则将无法成功解密。
五、keytool工具
openssl和keytool是常用的两个生成证书的工具;
概述
jdk自带的证书管理工具叫keytool,可以用来生成自签名证书、导入导出证书、打印证书信息等;
keystore和truststore
keystore: keytool生成证书的存储库,用来存储若干条目,每一条目包含公私钥,主体信息等;默认为用户目录下.keystore,相当于一个有密码保护的文件;
truststore: 与keystore格式相同,但是为区分只用来存放信任的证书,不存密钥等信息;
常用命令
-genkey:在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书;
-alias:产生别名;
-keystore:生成秘钥库的存储路径和名称;
-storepass:指定秘钥库的密码(获取keystore信息所需的密码);
-keypass:秘钥口令;
-keyalg:指定密钥的算法 (如 RSA DSA(如果不指定默认采用DSA));
-validity:指定创建的证书有效期多少天;
-keysize:指定密钥长度;
-dname:指定证书拥有者信息 例如: "CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码";
-export:将别名指定的证书导出到文件;
-file:参数指定导出到文件的文件名;
六、openssl制作
使用openssl来制作证书;
CA
openssl req -newkey rsa:2048 -x509 -nodes -sha256 -days 36500 -extensions v3_ca -keyout ca.key -out ca.crt
输入相关信息,生成ca.crt证书和ca.key;
注意,后面服务器端证书和客户端证书都是用这个相同的ca.crt来制作的;
服务器端
生成服务器端的key;
openssl genrsa -des3 -out server.key 2048
输入密码,如rayframework,生成server.key;
生成服务器端待发送的CSR;
openssl req -out server.csr -key server.key -new
输入刚才生成server.key的密码,如rayframework,以及组织信息等,然后challenge密码可以不要填写,生成待发送CA的server的CSR;
发送CSR到CA用CA的key来签名,生成服务器端证书:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 36500
执行后,生成server.crt了;
客户端
生成客户端key;
openssl genrsa -des3 -out client.key 2048
输入客户端密码,如rayframework,生成client.key;
生成客户端CSR;
openssl req -out client.csr -key client.key -new
输入刚才生成client.key的密码,如rayframework,以及组织信息等,然后challenge密码可以不要填写,生成待发送CA的client的CSR;
发送CSR到CA用CA的key来签名,生成客户端证书:
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500
执行后,生成client.crt了;
七、常见问题解决服务器启动每次都要输入Enter PEM pass phrase
把服务器端的key里面的key剥离掉就好了;
openssl rsa -in server.key -out server.key.unsecuremv server.key.unsecure server.key八、认证类型
单向认证只要求站点部署了ssl证书就行,任何用户都可以去访问(IP被限制除外等),只是服务端提供了身份认证。而双向认证则是需要是服务端需要客户端提供身份认证,只能是服务端允许的客户能去访问,安全性相对于要高一些;
九、单向认证
客户端认证服务器(常用的认证方式);
单向认证SSL证书也称为服务器身份认证证书;
十、双向认证
客户端和服务器双向认证;
标签: #ssl和非对称加密算法