您的位置 首页 java

极简SSL快速了解

一、概述

SSL(SecureSocket Layer)安全套接层,是 网景公司 提出的用于保证Server与client之间安全通信的一种协议,该协议位于TCP/IP协议与各应用层协议之间,即 SSL 独立于各应用层协议,因此各应用层协议可以透明地调用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

 open ssl  x509 -in cert.crt -outform der -out  CER t.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;

服务器端

生成服务器端的key;

 openssl genrsa -des3 -out server.key 2048 
  

输入密码,如rayframework,生成server.key;

极简SSL快速了解


生成服务器端待发送的CSR;

 openssl req -out server.csr -key server.key -new
  

输入刚才生成server.key的密码,如rayframework,以及组织信息等,然后challenge密码可以不要填写,生成待发送CA的server的CSR;

极简SSL快速了解


发送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;

极简SSL快速了解


生成客户端CSR;

 openssl req -out client.csr -key client.key -new
  

输入刚才生成 client .key的密码,如rayframework,以及组织信息等,然后challenge密码可以不要填写,生成待发送CA的client的CSR;

极简SSL快速了解


发送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.unsecure
mv server.key.unsecure server.key  

八、认证类型

单向认证只要求站点部署了ssl证书就行,任何用户都可以去访问(IP被限制除外等),只是服务端提供了身份认证。而双向认证则是需要是服务端需要客户端提供身份认证,只能是服务端允许的客户能去访问,安全性相对于要高一些;

九、单向认证

客户端认证服务器(常用的认证方式);

极简SSL快速了解


单向认证SSL证书也称为服务器身份认证证书;

十、双向认证

客户端和服务器双向认证;

文章来源:智云一二三科技

文章标题:极简SSL快速了解

文章地址:https://www.zhihuclub.com/191631.shtml

关于作者: 智云科技

热门文章

网站地图