Openssl的操作

2020-01-08  本文已影响0人  JJJoeee

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 编码格式: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 // 你的证书密码,如果不想设置密码,可以直接回车

image.png
查看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:

待补充...

上一篇 下一篇

猜你喜欢

热点阅读