`
ideage
  • 浏览: 319491 次
社区版块
存档分类
最新评论

openssl 生成pem 建立CA

阅读更多

openssl生成pem

 
使用OpenSSL生成证书

首先得安装OpenSSL软件包openssl,安装了这个软件包之后,我们可以做这些事情:
o Creation of RSA, DH and DSA Key Parameters # 创建密钥 key
o Creation of X.509 Certificates, CSRs and CRLs # 创建证书
o Calculation of Message Digests                #
o Encryption and Decryption with Ciphers # 加密、解密
o SSL/TLS Client and Server Tests        # SSL 服务器端/客户端测试
o Handling of S/MIME signed or encrypted Mail # 处理签名或加密了的邮件

1、生成RSA密钥的方法

openssl genrsa -des3 -out privkey.pem 2048
这个命令会生成一个2048位的密钥,同时有一个des3方法加密的密码,如果你不想要每次都输入密码,可以改成:
openssl genrsa -out privkey.pem 2048
建议用2048位密钥,少于此可能会不安全或很快将不安全。
2、生成一个证书请求
openssl req -new -key privkey.pem -out cert.csr
这个命令将会生成一个证书请求,当然,用到了前面生成的密钥privkey.pem文件
这里将生成一个新的文件cert.csr,即一个证书请求文件,你可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。

如果是自己做测试,那么证书的申请机构和颁发机构都是自己。就可以用下面这个命令来生成证书:
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
这个命令将用上面生成的密钥privkey.pem生成一个数字证书cacert.pem

3、使用数字证书和密钥
有了privkey.pem和cacert.pem文件后就可以在自己的程序中使用了,比如做一个加密通讯的服务器

-------------
OpenSSL建立自己的CA

(1) 环境准备

首先,需要准备一个目录放置CA文件,包括颁发的证书和CRL(Certificate Revoke List)。
这里我们选择目录 /opt/ca。

然后我们在/opt/ca下建立两个目录,certs用来保存我们的CA颁发的所有的证书的副本;private用来保存CA证书的私钥匙。

CA的私钥匙很重要,至少需要2048位长度。建议保存在硬件里,或者至少不要放在网络中。
除了生成钥匙,在我们的CA体系中还需要创建三个文件。第一个文件用来跟踪最后一次颁发的证书的序列号,我们把它命名为serial,初始化为01。第二个文件是一个排序数据库,用来跟踪已经颁发的证书。我们把它命名为index.txt,文件内容为空。

$ mkdir /opt/myca
$ cd /opt/myca
$ mkdir certs private
$ chmod g-rwx,o-rwx private
$ echo "01" > serial
$ touch index.txt

第三个文件是OpenSSL的配置文件,创建起来要棘手点。示例如下:

[ ca ]
default_ca = myca

[ myca ]
dir = /opt/myca
certificate = $dir/cacert.pem
database = $dir/index.txt
new_certs_dir = $dir/certs
private_key = $dir/private/cakey.pem
serial = $dir/serial

default_crl_days= 7
default_days = 365
default_md = md5

policy = myca_policy
x509_extensions = certificate_extensions

[ myca_policy ]
commonName = supplied
stateOrProvinceName = supplied
countryName = supplied
emailAddress = supplied
organizationName= supplied
organizationalUnitName = optional

[ certificate_extensions ]
basicConstraints= CA:false

我们需要告诉OpenSSL配置文件的路径,有两种方法可以达成目的:通过config命令选项;通过环境变量OPENSSL_CONF。这里我们选择环境变量的方式。

$ OPENSSL_CONF="/opt/myca/openssl.cnf"
$ export OPENSSL_CONF

(2) 生成根证书(Root Certificate)

我们需要一个证书来为自己颁发的证书签名,这个证书可从其他CA获取,或者是自签名的根证书。这里我们生成一个自签名的根证书。

首先我们需要往配置文件里面添加一些信息,如下所示,节名和命令行工具的命令req一样。我们把所有必要的信息都写进配置,而不是在命令行输入,这是唯一指定X.509v3扩展的方式,也能让我们对如何创建根证书有个清晰的把握。

[ req ]
default_bits = 2048
default_keyfile = /opt/myca/private/cakey.pem
default_md = md5
prompt = no
distinguished_name = root_ca_distinguished_name
x509_extensions = root_ca_extensions
[ root_ca_distinguished_name ]
commonName = My Test CA
stateOrProvinceName = Beijing
countryName = CN
emailAddress = yingyuan@staff.sina.com.cn
organizationName = Root Certification Authority
[ root_ca_extensions ]
basicConstraints = CA:true

万事俱备,我们可以生成根证书了。注意设置好环境变量OPENSSL_CONF。

$ openssl req -x509 -newkey rsa -out cacert.pem -outform PEM

验证一下我们生成的文件。

$ openssl x509 -in cacert.pem -text -noout

(3) 给客户颁发证书

在给客户颁发证书之前,需要客户提供证书的基本信息。我们另外开启一个终端窗口,使用默认的OpenSSL配置文件(不要让之前的OPENSSL_CONF干扰我们,那个配置是专门用来生成根证书的)。

命令和我们生成根证书的类似,都是req,不过需要提供一些额外的信息。如下:

$ openssl req -newkey rsa:1024 -keyout testkey.pem -keyform PEM -out testreq.pem -outform PEM

有两次提示要口令,第一次的口令用来加密私钥匙testkey.pem,第二次口令一般被OpenSSL忽略。
结果生成两个文件:testkey.pem,私钥匙;testreq.pem,请求信息,其中包括公钥匙。

我们来看看testreq.pem都有哪些信息?

$ openssl req -in testreq.pem -text -noout

现在,我们可以把testreq.pem提交给我们的CA生成证书了。
为了方便起见,我们假定testreq.pem在/opt/myca/private/中。

$ openssl ca -in testreq.pem

有三次提示,一次是问你CA的私钥匙密码,两次是确认,输出的结果就是为客户颁发的证书。
可以通过batch选项取消命令提示,可通过notext选项取消证书的输出显示。
此外,还可以一次给多个客户颁发证书,方法是用 infiles选项替换in选项,不过这个选项必须放在最后,因为此后的任何字符均被处理为文件名称列表。

生成的证书放在certs目录,同时index.txt和serial的内容都发生了改变。

(4) 吊销证书

吊销证书的操作很简单,我们将待吊销的证书从证书的保存位置拷贝到另外一个目录,然后运行ca命令就可以。
主要设置好OPENSSL_CONF环境变量。

$ cp certs/01.pem testcert.pem
$ openssl ca -revoke testcert.pem

输入CA私钥匙的密码就可以。

为了使你的吊销操作让别人知道,你可以生成CRL(Certificate Revoke List),然后公布到网上去。
由于每个颁发的证书都有一个过期时间,一旦证书过期了,就可以把该证书从CRL中删除。因为这时候在不在CRL中已经无所谓了。

# 生成CRL列表
$ openssl ca -gencrl -out exampleca.crl

# 查看CRL列表信息
$ openssl crl -in exampleca.crl -text -noout

# 验证CRL列表签名信息
$ openssl crl -in exampleca.crl -noout -CAfile cacert.pem

可以看到CRL的版本号为1,这是OpenSSL默认的,除非crl_extensions被指定在配置文件ca一节中。

 

文章一:http://blog.chinaunix.net/u/11234/showart_290705.html

文章二:http://blog.chinaunix.net/u/11234/showart_291316.html

分享到:
评论

相关推荐

    openssl 生成ca证书 pkcs12 pem格式转换

    openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。

    Linux平台openssl工具生成CA证书的命令 配置文件 证书

    文档包含一篇《openssl生成CA证书过程》及 openssl.cnf、*.key、*.pem、*.csr、*.crt文件共13个文件,按照文档的指导操作可以生成类似的文件。

    使用 OpenSSL 创建生成CA 证书服务器客户端证书及密钥

    使用OpenSSL生成密钥与证书,并进行双向验证

    用tomcat和openSSL构建https双向认证

    这是我实战的笔记,全程直播。 #### Tomcat和Openssl...5、生成pem格式证书 6、生成pkcs12格式证书 二、tomcat实现双向认证 1、创建服务器信任的CA证书库 2、配置Tomcat支持HTTPS双向认证(服务器将认证客户端证书)

    self-signed-ssl:使用OpenSSL生成自签名TLS证书

    用法self-signed-tls [OPTIONS]self-signed-tls --trust -c US -s California -l 'Los Angeles' -o 'Example Org' -u 'Example Unit'self-signed-tls --ca-key=/path/to/CA.key --ca-cert=/path/to/CA.pem --ca-only...

    openssl 编程 当前版本

    22.2 openssl的PEM实现 160 22.3 PEM函数 161 22.4 编程示例 161 第二十三章 Engine 165 23.1 Engine概述 165 23.2 Engine支持的原理 165 23.3 Engine数据结构 166 23.4 openssl 的Engine源码 167 23.5 Engine函数 ...

    openssl编程

    236 30.2 openss实现 236 30.3数据结构 236 30.4函数 237 30.5 编程示例 239 第三十一章 Openssl SSL实现 249 31.1概述 249 31.2 openssl实现 249 31.3 建立SSL测试环境 249 31.4 数据...

    openssl-1.0.0a

    事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。 5.SSL和TLS协议 OpenSSL实现了SSL协议的SSLv2和SSLv3,支持了其中绝大部分算法协议。...

    OpenSSL编程(三合一版).zip

    236 30.2 openss实现 236 30.3数据结构 236 30.4函数 237 30.5 编程示例 239 第三十一章 Openssl SSL实现 249 31.1概述 249 31.2 openssl实现 249 31.3 建立SSL测试环境 249 31.4 数据...

    OpenSSL-1_0_0d_Win32

    事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。 5.SSL和TLS协议 OpenSSL实现了SSL协议的SSLv2和SSLv3,支持了其中绝大部分算法协议。...

    openssl使用笔记

    1:生成CA证书 2:生成私钥文件(mykey.pem) 3:生成证书申请请求(myserver.csr) 4:通过证书申请请求用CA证书颁发证书mycert.pem 5:生成自签名证书 6:指定配置文件颁发证书

    nginx_CA证书创建

    openssl rsa -in server.key -pubout -out server.pem //第二步,生成 CA 证书 #生成 CA 私钥 openssl genrsa -out ca.key 1024 #X.509 Certificate Signing Request (CSR) Management. ca证书签名请求 #要求填写...

    linux系统中使用openssl实现mysql主从复制

    [root@localhost CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem ————————————————————————————– mysql准备私钥及证书申请...

    phpopenssl:OpenSSL PHP 工具包库

    CA 使用 OpenSSL 数据库签署证书请求(使用配置) 创建 DER、NET 或 PEM 格式的证书 将证书转换为 DER、NET 或 PEM 格式 验证证书 从证书获取信息 创建证书吊销列表 (CRL) 吊销证书吊销列表中的证书 将 CRL 转换为...

    Delphi https.zip

    Delphi 的https 服务程序。包含19年的libeay32.dll和ssleay32.dll。和openssl生成的三个cacert.pem、cert.pem、key.pem

    openssl.exe

    用openssl生成RSA公钥与私钥,此处为windows版本,在官网下载,日期:2017.11.03号

    Loadrunner 的HTTPS的测试配置

     执行后,将会在指定目录生成test01.pem文件,这个文件将会在下一个步骤,对LoadRunner进行配置的时候使用到。 2.LR配置 启动LoadRunner,打开Recording Option选项。 留意红色框中的选项。 选择后,单击New ...

    openssl编程.pdf

    第二章 openssl 简介................................................................................................................15 2.1 openssl 简介.....................................................

Global site tag (gtag.js) - Google Analytics