博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openssl 自建CA签发证书 网站https的ssl通信
阅读量:6334 次
发布时间:2019-06-22

本文共 4211 字,大约阅读时间需要 14 分钟。

<<COMMENT
X509 文件扩展名

首先我们要理解文件的扩展名代表什么。DER、PEM、CRT和CER这些扩展名经常令人困惑。

很多人错误地认为这些扩展名可以互相代替。尽管的确有时候有些扩展名是可以互换的,
但是最好你能确定证书是如何编码的,进而正确地标识它们。正确地标识证书有助于证书的管理。

编码 (也用于扩展名)

# DER =扩展名DER用于二进制DER编码的证书。这些证书也可以用CER或者CRT作为扩展名。

比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。
# PEM =扩展名PEM用于ASCII(Base64)编码(指字符编码)的各种X.509 v3 证书。文件开始由一行"—–BEGIN …“开始。

#CRT =扩展名CRT用于证书。证书可以是DER编码,也可以是PEM编码。扩展名CER和CRT几乎是同义词。

这种情况在各种unix/linux系统中很常见。
#CER =CRT证书的微软型式。可以用微软的工具把CRT文件转换为CER文件(CRT和CER必须是相同编码的,DER或者PEM)。
扩展名为CER的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.execryptext.dll, CyrptExtOpenCER),
进而弹出一个对话框来导入并/或查看证书内容。
#KEY =扩展名KEY用于PCSK#8的公钥和私钥。这些公钥和私钥可以是DER编码或者PEM编码。

COMMENT

<<COMMENT

#### RSA Key file (PKCS#1)
# openssl genrsa 和 ssh-keygen 命令生成的私钥就是这样的格式
-----BEGIN RSA PRIVATE KEY-----
-----BEGIN RSA PUBLIC KEY-----
BASE64 ENCODED DATA
-----END RSA *** KEY-----

#### Key file (PKCS#8)
# openssl rsa -pubout 生成的公钥就是这样的格式
-----BEGIN PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
BASE64 ENCODED DATA
-----END *** KEY-----

#### SSH V1 file
# ssh-keygen 生成的公钥就是这样的格式
sh-rsa AAAAB

#### SSH V2 file (RFC4716)
---- BEGIN SSH2 PUBLIC KEY ----
BASE64 ENCODED DATA
---- END SSH2 PUBLIC KEY ----
COMMENT

<<COMMENT

生成 RSA 私钥 和 证书请求文件CSR
COMMENT

# example1 利用CA的RSA密钥创建一个自签署的CA证书(X.509结构)

openssl genrsa -out private/cakey.pem 2048
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

# 再转换成pkcs12格式

openssl pkcs12 -export -inkey private/cakey.pem -in cacert.pem -out cacert.pkcs12

# example2 生成一个2048位的RSA私钥,并用3DES加密(密码为1111),保存为server.key文件

# 再用server.key生成证书签署请求CSR(这个CSR用于之外发送待CA中心等待签发)
openssl genrsa -out server.key -passout pass:1111 -des3 2048
openssl req -new -key server.key -out server.csr

# example3 查看CSR的细节:

openssl req -noout -text -in server.csr

<<COMMENT

x509 证书操作
COMMENT

# example1 转换DER证书为PEM格式

openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pem

# example2 使用根CA证书对"请求签发证书"进行签发,生成x509格式证书

openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extensions v3_req

# example3 打印出证书的内容

openssl x509 -in server.crt -noout -text

# 转换成pkcs12格式

openssl pkcs12 -export -inkey usg6630.key -in usg6630.crt -out usg6630key.pkcs12

<<COMMENT

CA 签名
COMMENT

# example 利用 CA 证书 ca.crt 签署请求证书 server.crt:

openssl ca -cert private/cakey.pem -keyfile cacert.pem -in server.csr -out server.crt

<<COMMENT

v3_扩展
COMMENT

[ req ]

req_extensions = v3_req # The extensions to add to a certificate request

[ v3_req ]

# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
#subjectAltName = @alt_names
subjectAltName = "DNS:*.cnicg.cn,DNS:*.cniotroot.cn,DNS:*.niot.cn"

<<COMMENT

例子,快速搭建签署
COMMENT

# 生成 CA 证书密钥文件 和自签证书

openssl genrsa -out private/cakey.pem 2048
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

# 生成 Server 证书密钥文件 & 证书签名请求

#openssl genrsa -out server.key 2048
openssl req -newkey rsa:2048 -nodes -keyout usg6630.key -out usg6630.csr

# 签发 Server 证书,会根据该配置文件 openssl.cnf 加载 CA 证书并集合 Server 证书签名请求文件来完成签名

# -batch 不问问题 -passin pass:foobar
openssl ca -in usg6630.csr -out usg6630.crt -batch -days 965 -extensions v3_req

<<COMMENT
防火墙端配置,WEB端配置
COMMENT

# 在防火墙 WEB页面上传证书和私钥

# USG6630 防火墙上以usg6630-cert.pem 作为证书
web-manager security server-certificate usg6630-cert.pem
dis pki ca_list
dis pki cert_list

<<COMMENT
公私钥格式转换
COMMENT
# 生成私钥,默认私钥都是PEM编码格式
# 私钥为PKCS#1结构,以-----BEGIN RSA PRIVATE KEY-----开头
# ssh-keygen公钥为ssh v1 结构,以ssh-rsa AAAAB3 开头
ssh-keygen -t rsa -f id_rsa
openssl genrsa -out id_rsa

# 从PKCS#1私钥生成PKCS#8格式公钥

openssl rsa -pubout -in id_rsa -out id_rsa_pub.pem

# PKCS#8格式公钥转换成 SSH v1的格式公钥

ssh-keygen -f id_rsa_pub.pem -i -m pkcs8 > id_rsa_ssh.pub
# id_rsa_ssh.pub 等同于 id_rsa.pub

# SSH v1 格式公钥转换成PKCS#1公钥(PEM)

# 转换后文件以-----BEGIN RSA PUBLIC KEY-----开头
ssh-keygen -f id_rsa.pub -e -m PEM > id_rsa_pub_pkcs1.pem

# SSH v1 格式公钥转换成PKCS#8公钥

# 转换后文件以-----BEGIN PUBLIC KEY-----开头
ssh-keygen -f id_rsa.pub -e -m PKCS8 > id_rsa_pub_pkcs8.pem
# id_rsa_pub_pkcs8.pem 等同于 id_rsa_pub.pem

# SSH v1 格式公钥转换成RFC4716(SSH v2)格式公钥

# 转换后文件以---- BEGIN SSH2 PUBLIC KEY ----开头
ssh-keygen -f id_rsa.pub -e -m RFC4716 > id_rsa_pub_RFC4716.pem

转载于:https://www.cnblogs.com/fatt/p/10606826.html

你可能感兴趣的文章
[Algorithms] Longest Increasing Subsequence
查看>>
MAC下GitHub命令操作
查看>>
springboot之filter/listener/servlet
查看>>
Thinkphp --- 去掉index.php
查看>>
Spring+SpringMVC+MyBatis深入学习及搭建(十一)——SpringMVC架构
查看>>
oracle故障解决
查看>>
tcpdump
查看>>
数据库内存结构
查看>>
利用Shell开发跳板机功能脚本案例
查看>>
51CTO的技术门诊谈OSSIM
查看>>
六年心路成长 —— 做自己
查看>>
ios电话拨打进行监听电话状态
查看>>
京东基于Spark的风控系统架构实践和技术细节
查看>>
什么时候使用CountDownLatch
查看>>
C#之MemberwiseClone与Clone
查看>>
Android性能优化之利用Rxlifecycle解决RxJava内存泄漏
查看>>
转: 如何为你的开源项目选择一个合适的开源协议?
查看>>
关系型数据库和NOSQL数据库对比
查看>>
Atitit 记录方法调用参数上下文arguments
查看>>
webstorm常用功能FTP,及常用快捷键
查看>>