龙空技术网

极简SSL快速了解

faesuite 189

前言:

今天同学们对“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和非对称加密算法