<<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通信的更多相关文章

  1. 部署自建CA颁发证书实现https加密

    理论忽略:百度上很多 需求:自建证书并实现域名的https加密 部署: 在linux机器上执行以下命令生成私钥 mkdir -p /opt/ssl-cert cd  /opt/ssl-cert 1.# ...

  2. Openssl自建CA

    查看证书相关指令 # 查看公钥数字证书 openssl x509 -in cacert.pem -noout -text # 查看私钥数字证书 openssl pkcs12 -in client-ce ...

  3. Https、OpenSSL自建CA证书及签发证书、nginx单向认证、双向认证及使用Java访问

    0.环境 本文的相关源码位于 https://github.com/dreamingodd/CA-generation-demo 必须安装nginx,必须安装openssl,(用apt-get upd ...

  4. 基于OpenSSL自建CA和颁发SSL证书

    关于SSL/TLS介绍见文章 SSL/TLS原理详解.关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 . openssl是一个开源程序的套件.这个套件有三个 ...

  5. 使用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 ...

  6. 自己搭建CA颁发证书做https加密网站

    192.168.10.187 CA服务器 192.168.10.190 web服务器 (1)搭建CA cd /etc/pki/CA 在这个目录下创建serial和index.txt两个文件 echo ...

  7. 搭建CA颁发证书做https加密网站

    92.168.10.187 CA服务器 192.168.10.190 web服务器 (1)搭建CA cd /etc/pki/CA 在这个目录下创建serial和index.txt两个文件 echo 0 ...

  8. shell脚本实现openss自建CA和证书申请

    #!/bin/bash # #******************************************************************** #Author: Ma Xue ...

  9. 利用openssl自建CA体系

    使用 OpenSSL 创建私有 CA:1 根证书 使用 OpenSSL 创建私有 CA:2 中间证书 使用 OpenSSL 创建私有 CA:3 用户证书 今天跟着上面的三部曲,做了一下openssl的 ...

随机推荐

  1. mysql与oracle常用函数及数据类型对比00持续补充

    最近在转一个原来使用oracle,改为mysql的系统,有些常用的oracle函数的mysql实现顺便整理了下,主要是系统中涉及到的(其实原来是专门整理过一个详细doc的,只是每次找word麻烦). ...

  2. GD32芯片移植完全攻略

    GD32是国产兆易创新公司生产的完全兼容STM32系列的Cortex-M3处理器,具有几大亮点:1,高主频108MHz.性能提升30%以上,可超频到120MHz2,Flash零等待.STM32的72M ...

  3. python字符串格式化之format

    用法: 它通过{}和:来代替传统%方式 1.使用位置参数 要点:从以下例子可以看出位置参数不受顺序约束,且可以为{},只要format里有相对应的参数值即可,参数索引从0开,传入位置参数列表可用*列表 ...

  4. ubuntu搭建discuz论坛

    a.安装mysql database 1.安装mysql服务端 sudo apt-get install mysql-server  (在此过程中要求为mysql的root用户设置一个密码) 2.安装 ...

  5. SQL NULL

    表 select CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name= 'Alliance' selec ...

  6. 关于 Local feature 和 Global feature 的组合

     关于  Local feature 和 Global feature 的组合     1.全局上下文建模:  

  7. C#学习笔记(九):函数、代码查询和调试

    代码查询和调试 代码查询 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...

  8. cent os下搭建简单的服务器

    作为常和网络打交道的程序员,经常会遇到需要服务器的场合,比如搭建一个web服务器,一个代理服务器,又或者一个小型的游戏服务器. 我时常和朋友一起玩一款叫我的世界的游戏,为了能够长期稳定地联机玩,所以特 ...

  9. 在django restful framework中设置django model的property

    众所周知,在django的model中,可以某些字段设置@property和setter deleter getter,这样就可以在存入数据的时候进行一些操作,具体原理请参见廖雪峰大神的博客https ...

  10. vue-echarts的使用及编译报错解决方法

    一. 使用 vue-cli 快速构建vue项目, 引入vue-echarts组件 安装:  > npm i vue-echarts --save 修改 webpack.config.js 配置: ...