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一节中。
openssl生成pem,密钥证书的创建的更多相关文章
- openssl生成RSA密钥证书
1.openssl的安装 2.RSA密钥证书的生成 3.openssl的常用命令 1.openssl的安装 openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用.健壮.功能完备的工具套 ...
- .NET使用OpenSSL生成的pem密钥文件
NET要使用OpenSSL生成的pem密钥文件,网上资料很少(http://www.faqs.org/rfcs/rfc1421.html,RFC1421文件又老长老长),仅有的资料还是有错误的,所以今 ...
- 通过OpenSSL来生成PEM格式的私钥、PKCS8格式的私钥、公钥|pfx格式的私钥、cer格式的公钥
1.生成PEM格式RSA私钥 不对输出的文件内容进行加密 openssl genrsa -out private-rsa.key 对输出的文件内容进行加密(DES/AES128/AES256等) op ...
- 使用OpenSSL生成证书
使用OpenSSL生成证书 下载安装openssl,进入/bin/下面,执行命令(把ssl目录下的openssl.cnf 拷贝到bin目录下)1.首先要生成服务器端的私钥(key文件):openssl ...
- nginx反向代理cas-server之2:生成证书,centOS下使用openssl生成CA证书(根证书、server证书、client证书)
前些天搭好了cas系统,这几天一致再搞nginx和cas的反向代理,一直不成功,但是走http还是测试通过的,最终确定是ssl认证证书这一块的问题,原本我在cas服务端里的tomcat已经配置了证书, ...
- openssl 生成证书基本原理
摘自:http://blog.csdn.net/oldmtn/article/details/52208747 1. 基本原理 公司一个项目要进行交易数据传输,因为这个项目银行那边也是刚刚开始启动,所 ...
- https学习笔记三----OpenSSL生成root CA及签发证书
在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...
- keytool和openssl生成的证书转换
keytool和openssl生成的证书转换 keytool生成证书示例 生成私钥+证书: keytool -genkey -alias client -keysize 2048 -validity ...
- iOS_生成pem推送证书(用于百度云推送)
具体步骤如下: 首先,需要一个pem的证书,该证书需要与开发时签名用的一致. 具体生成pem证书方法如下: 1. 登录到 iPhone Developer Connection Portal(http ...
随机推荐
- OSX/iOS 播放系统声音
方法1: 系统会自带了些声音,有时候一些操作用必要自己播放一下声音提醒一下,用bash的直接say something就ok了,写代码的时候呢?原来很简单的,一句: [[NSSound soundNa ...
- json在PHP中应用技巧
一.json_encode() 该函数主要用来将数组和对象,转换为json格式.先看一个数组转换的例子: $arr = array ('a'=>1,'b'=>2,'c'=>3,'d' ...
- Python之路Day15
主要内容:WEB框架.Django基础 WEB框架 Web请求流程 -- 原始Web框架 -- 自定义Web框架 -- MVC 和 MTV # Models Views Controllers # 模 ...
- django virtualenv
1. virtualenv virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. ...
- isdigit()判断是不是数字
string 里面的函数isdigit(),可以判断是不是数字. 或者,采用type(1)==int.
- codility上的练习 (1)
codility上面添加了教程.目前只有lesson 1,讲复杂度的……里面有几个题, 目前感觉题库的题简单. tasks: Frog-Jmp: 一只青蛙,要从X跳到Y或者大于等于Y的地方,每次跳的距 ...
- linux进程解析--进程切换
为了控制进程的执行,linux内核必须有能力挂起正在cpu上运行的进程,换入想要切换的进程,也就是恢复以前某个挂起的进程,这就是linux的进程切换. 1进程切换的时机 一般来说,进程切换都是发生在 ...
- 【jQuery】使用JQ来编写面板的淡入淡出效果
本文与上一篇的<[jQuery]使用JQ来编写最主要的淡入淡出效果>(点击打开链接)为姊妹篇. 但上一篇仅仅是对文本的基本控制,本篇则是对面板元素进行控制. 尽管功能上很类似,可是所用到的 ...
- IOS-图片操作集合
编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate函数创建CGImageRef 然后把 ...
- iOS之UITableViewCell左右滑动效果
首先在 UITableViewCell.h 中声明一个代理 @protocol UITableViewCellSlideDelegate <UITableViewDelegate> @op ...