<<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. $.post 和 $.get 设置同步和异步请求

    由于$.post() 和 $.get() 默认是 异步请求,如果需要同步请求,则可以进行如下使用:在$.post()前把ajax设置为同步:$.ajaxSettings.async = false;在 ...

  2. Python3.x:关于urllib中urlopen报错问题的解决方案

    Python3.x:关于urllib中urlopen报错问题的解决方案 调用:urllib.urlopen(url) 报错:AttributeError: 'module' object has no ...

  3. python监控端口脚本[jkport1.0.py]

    此脚本根据端口判断进程是否存活, 如果有指定的端口就证明进程是没问题的, 如果检测不到端口就是说业务进程已经挂掉了, 此时自动重启程序, 不多说下面请看脚本 创建脚本 我这里模拟的是nginx, 监控 ...

  4. tomcat热启动没问题, 访问项目报500解决办法

    新建maven项目 添加热启动 启动访问项目报错 报错提示 解决办法 思路:包冲突 在pom.xml中添加servlet <dependency> <groupId>javax ...

  5. 20145101《Java程序设计》第一周学习总结

    20145101 <Java程序设计>第1周学习总结 教材学习内容总结 开学的第一周,通过课上老师的介绍和课下阅读教材我简单的了解java的发展历程,了解了JVM.JRE.JDK分别是什么 ...

  6. 使用volley来json解析

    我对网络请求get和post的理解: 1.get只是从某网址获得固定数据,如我访问百度,返回就是百度的html语句: 2.post是我在访问的时候加了某些参数,如我访问某个服务器,访问的时候加了一些语 ...

  7. [JavaScript] - 7kyu

    Johnny is a boy who likes to open and close lockers. He loves it so much that one day, when school w ...

  8. ng-model 数据不更新 及 ng-repeat【ngRepeat:dupes】错误

    一.ng-include 引入的文件中 ,ng-model 数据不更新 例如, $scope.username = “Jones”  .此时,在 ng-include 引入的文件中,直接使用 ng-m ...

  9. 适用于目前环境的bug记录

    问测试,bugtracker.JIRA,你们用起来啊? 难道bugtracker/JIRA只有测试用吗? 截屏忽略,只有测试人员自己提bug,开发不管不顾,解决了也不关闭bug,bug提得太多,还嫌测 ...

  10. jquery作业 教授答案

    http://www.cnblogs.com/qianjinyan/p/8961086.html 题目要求: 1. 通过jquery动态的创建一个表格,随机生成(id自增,name随机2-3个中文汉字 ...