ssh、https、sftp、wss是怎么实现SSL加密的的?
通过over ssl或tls(1.1以上为安全),先建立ssl隧道(传输对称秘钥),然后在隧道上跑原始协议和数据传输(经过对称加密的)
CA证书的标准、编码、扩展文件名
参考:https://kangzubin.com/certificate-format/
关于CA证书的标准、编码、扩展文件名,标准是数据的规范(X509、PKCS#7、PKCS#12等),编码则是采用的编码方式不同(pem和 der等);同一个标准也有可能采用不同的编码方式,比如:X.509 标准的证书文件具有不同的编码格式,一般包括 PEM 和 DER 两种编码。扩展文件名则是生成证书的文件后缀名称。
对于 X.509 标准的证书两种不同编码格式,一般采用 PEM
编码就以 .pem
作为文件扩展名,若采用 DER
编码,就应以 .der
作为扩展名。但常见的证书扩展名还包括 .crt
、.cer
、.p12
等,他们采用的编码格式可能不同,内容也有所差别,但大多数都能互相转换,现总结如下:
-
.pem: 采用
PEM
编码格式的 X.509 证书的文件扩展名; -
.der: 采用
DER
编码格式的 X.509 证书的文件扩展名; -
.crt: 即 certificate 的缩写,常见于类 UNIX 系统,有可能是
PEM
编码,也有可能是DER
编码,但绝大多数情况下此格式证书都是采用PEM
编码; -
.cer: 也是 certificate 的缩写,常见于 Windows 系统,同样地,可能是
PEM
编码,也可能是DER
编码,但绝大多数情况下此格式证书都是采用DER
编码; - .p12: 也写作 .pfx,全称:PKCS #12,是公钥加密标准(Public Key Cryptography Standards,PKCS)系列的一种,它定义了描述个人信息交换语法(Personal Information Exchange Syntax)的标准,可以用来将包含了公钥的 X.509 证书和证书对应的私钥以及其他相关信息打包,进行交换。简单理解:一份 .p12 文件 = X.509 证书+私钥;
-
.csr: Certificate Signing Request 的缩写,即证书签名请求,它并不是证书的格式,而是用于向权威证书颁发机构(Certificate Authority, CA)获得签名证书的申请,其核心内容包含一个 RSA 公钥和其他附带信息,在生成这个
.csr
申请的时候,同时也会生成一个配对 RSA 私钥,私钥通常需要严格保存于服务端,不能外泄。 -
.key: 通常用来存放一个 RSA 公钥或者私钥,它并非 X.509 证书格式,编码同样可能是
PEM
,也可能是DER
,查看方式如下:
PEM 编码格式:openssl rsa -in xxx.key -text -noout
DER 编码格式:openssl rsa -in xxx.key -text -noout -inform der
openssl创建证书和私钥:
参考:https://www.cnblogs.com/tugenhua0707/p/10927722.html
.key 私钥
.csr 用来签发CA的文件
.crt CA证书
1.生成私钥.key-
openssl genrsa -des3 -out server.key 2048
输入key:12315 //密码
查看上面生成的私钥(其实生成的文件就在当前目录)
openssl rsa -text -in server.key
image.png
2.创建证书签名请求文件.CSR
openssl req -new -key server.key -out server.csr//根据私钥文件创建出CA文件;这是最主要的指令,下面都是信息填写
Country Name (2 letter code) []:CN // 输入国家代码,中国填写 CN
State or Province Name (full name) []:SZ // 输入省份,这里填写 SZ
Locality Name (eg, city) []:SZ // 输入城市,我们这里也填写 SZ
Organization Name (eg, company) []:apple // 输入组织机构(或公司名,我这里随便写个apple)
Organizational Unit Name (eg, section) []: apple // 输入机构部门
Common Name (eg, fully qualified host name) []:.abc.com // 输入域名,我这边是 (.abc.com)
Email Address []:123123123@qq.com // 你的邮箱地址
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:12315 // 你的证书密码,如果不想设置密码,可以直接回车
查看csr文件如下命令:openssl req -text -in server.csr -noout
3. 生成CA根证书
关于证书的标准请参考:
生成x509标准的证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
x509的含义: 指定证书标准
-days:有效天数
-in: 指定.csr请求文件(上面创建的)
-signkey: 指定.key自签名私钥(使用私钥,需要跟私钥绑定)
-out:指定生成的CA文件名称.crt
生成p12标准的证书
等等
4.使用根证书签发多级证书
在签发好根证书之后,可以向下签发多个基于跟证书的下级证书;因为一个公司和组织内部有很多部门和业务会用到证书,所以设计之初也有考虑到了这些问题。
步骤:类似于上面的签发过,三级四级也类似这种方式。
(1)生成.key私钥
(2)生成.csr请求文件
(3)根据私钥和请求文件签发CA证书.crt
(4)利用以上三个文件和根证书、根私钥签发二级证书
参考:https://www.cnblogs.com/gsls200808/p/4502044.html
openssl ca -extensions v3_ca -in secondCA.csr -config /etc/pki/tls/openssl.cnf -days 365 -out secondCA.crt -cert RootCA.crt -keyfile RootCA.key
-in:上面签发的二级请求文件
-config:读取openssl的配置文件
-out :输出的二级CA证书文件(就是为了要这个文件)
-days:有效天数
-cert:根证书
-keyfile:根私钥
tomcat改建https:
参考链接:https://www.jianshu.com/p/a55590f486a2
其实JDK里面自带openssl的,所以就免了安装openssl和perl的过程,配置好java运行环境后,直接敲命令就可以了,同时keystore文件也可以分解成私钥和CA证书(包含公钥和其它信息)
(1)JKS格式证书生成
好了,我们的jdk要派上用场了
打开你的终端或者命令行或者其他黑窗口,输入:
keytool -genkey -v -alias hahaKey -keyalg RSA -validity 3650 -keystore tomcat.keystore
密钥:a12315(必须有字母)
alias: 别名 这里起名testKey
keyalg: 证书算法,RSA
validity:证书有效时间,10年
keystore:证书生成的目标路径和文件名,替换成你自己的路径即可
(2)tomcat配置https
打开server.xml文件
先去掉注释,然后将keystoreFile和keystorePass处替换成你自己的证书路径和生成证书时的口令即可.
port: https的端口,默认8443(可以自己改成443)
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证keystoreFile
keystoreFile: keystore证书的路径
keystorePass: 生成keystore时的口令
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="" keystorePass="" />
Nginx改建https:
待补充...
Apache改建https:
待补充...
IIS改建https:
待补充...
网友评论