<<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. Python Web学习笔记之TCP/IP、Http、Socket的区别

    经常在笔试.面试或者工作的时候听到这些协议,虽然以前没怎么涉及过,但至少知道这些是和网络编程密不可分的知识,作为一个客户端开发程序员,如果可以懂得网络编程的话,他的作用和能力肯定会提升一个档次.原因很 ...

  2. 《课程设计》——foremost的使用

    <课程设计>--foremost的使用 foremost简介 formost 是一个基于文件头和尾部信息以及文件的内建数据结构恢复文件的命令行工具.这个过程通常叫做数据挖掘(data ca ...

  3. USACO 1.3 Ski Course Design - 暴力

    Ski Course Design Farmer John has N hills on his farm (1 <= N <= 1,000), each with an integer ...

  4. Win32 API编程:使用CreateProcess创建新进程

    #include <windows.h> #include <tchar.h> #include <stdio.h> int main(int argc, char ...

  5. 判断两个vector是否相等

    转载:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26354188&id=3198604 #include < ...

  6. Python3基础 str translate 将指定字符转换成另一种特定字符

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  7. git commit如何修改默认编辑器为vim

    答:修改~/.gitconfig(修改这个文件将全局有效)或项目目录中的.git/config(修改此文件只是使当前项目默认使用vim)中增加以下内容: [core] editor=vim

  8. 【核心API开发】Spark入门教程[3]

    本教程源于2016年3月出版书籍<Spark原理.机制及应用> ,在此以知识共享为初衷公开部分内容,如有兴趣,请支持正版书籍. Spark综合了前人分布式数据处理架构和语言的优缺点,使用简 ...

  9. 【第十章】 springboot + logback

    logback是boot默认的日志首选,个人觉得是最好的日志实现(比log4j好) 下边,在之前的代码基础上增加一个功能,该功能要实现mybatis的and or联查功能,并通过logback日志在控 ...

  10. nohup 日志切割

    最近遇到日志切割的问题,即程序是通过命令: nohup python *.py & 放到后台执行的,这样程序的日志输出到了nohup自动生成的nohup.out文件. 问题就来了,nohup. ...