openssl 自建CA签发证书 网站https的ssl通信
<<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
openssl 自建CA签发证书 网站https的ssl通信的更多相关文章
- 部署自建CA颁发证书实现https加密
理论忽略:百度上很多 需求:自建证书并实现域名的https加密 部署: 在linux机器上执行以下命令生成私钥 mkdir -p /opt/ssl-cert cd /opt/ssl-cert 1.# ...
- Openssl自建CA
查看证书相关指令 # 查看公钥数字证书 openssl x509 -in cacert.pem -noout -text # 查看私钥数字证书 openssl pkcs12 -in client-ce ...
- Https、OpenSSL自建CA证书及签发证书、nginx单向认证、双向认证及使用Java访问
0.环境 本文的相关源码位于 https://github.com/dreamingodd/CA-generation-demo 必须安装nginx,必须安装openssl,(用apt-get upd ...
- 基于OpenSSL自建CA和颁发SSL证书
关于SSL/TLS介绍见文章 SSL/TLS原理详解.关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 . openssl是一个开源程序的套件.这个套件有三个 ...
- 使用OpenSSL自建CA + Nginx配置HTTPS
Ubuntu 16.04(ECS),OpenSSL 1.0.2g 1 Mar 2016,Nginx 1.10.3 (Ubuntu), 浏览器:Chrome 67,Firefox 61,Edge 40 ...
- 自己搭建CA颁发证书做https加密网站
192.168.10.187 CA服务器 192.168.10.190 web服务器 (1)搭建CA cd /etc/pki/CA 在这个目录下创建serial和index.txt两个文件 echo ...
- 搭建CA颁发证书做https加密网站
92.168.10.187 CA服务器 192.168.10.190 web服务器 (1)搭建CA cd /etc/pki/CA 在这个目录下创建serial和index.txt两个文件 echo 0 ...
- shell脚本实现openss自建CA和证书申请
#!/bin/bash # #******************************************************************** #Author: Ma Xue ...
- 利用openssl自建CA体系
使用 OpenSSL 创建私有 CA:1 根证书 使用 OpenSSL 创建私有 CA:2 中间证书 使用 OpenSSL 创建私有 CA:3 用户证书 今天跟着上面的三部曲,做了一下openssl的 ...
随机推荐
- Redis的两种持久化方式-快照持久化(RDB)和AOF持久化
Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边,数据保存到硬盘的过程就称为“持久化”效果. redis有两 ...
- bzoj 1497 最大获利 - 最小割
新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成前期市场研 ...
- FTP-FileZilla
服务器上安装FileZilla Server连接时报You appear to be behind a NAT router. Please configure the passive mode se ...
- 使用fragment添加底部导航栏
切记:fragment一定要放在framlayout中,不然不会被替换完全(就是切换之后原来的fagment可能还会存在) main.xml <LinearLayout xmlns:androi ...
- 怎样用QtCreator编辑运行python脚本
QtCreator作为一款开发基于qt库的程序.以及开发C语言.c++语言项目都是一个利器,轻便好用.那么作为开发者来说,经常换着使用各种IDE是家常便饭,但是要是这些语言都能够集成到一个工具里岂不是 ...
- JavaScript:正则表达式 全局
关于正则表达式的 RegExp方法:test,exec, String 方法:match,search, 全局 g var str = "abababa"; var re = /a ...
- return false break;
js中的return false; break; , , , , ]; var list2 = ['a', 'b', 'c', 'd']; ; j < list2.length; j++) { ...
- ubuntu 安转redis
一 ,redis 安装配置 在 Ubuntu 系统安装 Redis 可以使用以下命令: sudo apt-get update sudo apt-get install redis-server 这样 ...
- github上的markdown如何换行
https://gist.github.com/shaunlebron/746476e6e7a4d698b373 1.普通的换行 在文本结束后面,加2个空格 2.段落之间的换行 使用反斜杠\
- java web项目去除项目名称访问设置方法及tomcat的<Host>标签讲解
本文为博主原创,未经允许不得转载. 在集群项目中,为了方便用户可以更快捷的访问,即只需要输入IP和端口号,就可以直接访问项目,因为 模块比较多,记住项目名称并不容易,所以在网上查看和学习了下设置的方法 ...