MyException - 我的异常网
当前位置:我的异常网» 开源软件 » Openssl生成根证书、服务器证书并签核证件

Openssl生成根证书、服务器证书并签核证件

www.MyException.Cn  网友分享于:2015-08-26  浏览:0次
Openssl生成根证书、服务器证书并签核证书

 

http://blog.csdn.net/gloomuu/article/details/4456501

 

Step 1. Create key (password protected)

 

openssl genrsa -out prvtkey.pem 1024/2038                     (with out password protected)   

openssl genrsa -des3 -out prvtkey.pem 1024/2048    (password protected)


这个命令会生成一个1024/2048位的密钥。
Step 2. Create certification request

openssl req -new -key prvtkey.pem -out cert.csr

openssl req -new -nodes -key prvtkey.pem -out cert.csr

这个命令将会生成一个证书请求,当然,用到了前面生成的密钥prvtkey.pem文件
这里将生成一个新的文件cert.csr,即一个证书请求文件,你可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。

Step 3: Send certificate request to Certification Authority (CA)

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

 

 


cacert.pem 生成过程见“OpenSSL建立自己的CA

 

有了privkey.pemcacert.pem文件后就可以在自己的程序中使用了,比如做一个加密通讯的服务器

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

 

 

(1) 环境准备

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

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

除了生成钥匙,在我们的CA体系中还需要创建三个文件。第一个文件用来跟踪最后一次颁发的证书的序列号,我们把它命名为serial,初始化为01。第二个文件是一个排序数据库,用来跟踪已经颁发的证书。我们把它命名为index.txt,文件内容为空。

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

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

$ touch openssl.cnf

文件内容如下:

[ ca ]
default_ca = myca

[ myca ]
dir = /var/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=/var/MyCA/openssl.cnf"
$ export OPENSSL_CONF

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

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

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

[ req ]
default_bits = 2048
default_keyfile = /var/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 = HZ
countryName = CN
emailAddress = test@cert.com 
organizationName = Root Certification Authority
[ root_ca_extensions ]
basicConstraints = CA:true

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

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

注:“-days 356“控制有效期限为365天,默认为30天。

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

$ 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//var/MyCA/private/中。

$ openssl ca -in testreq.pem

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

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

文章评论

写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
老程序员的下场
老程序员的下场
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
旅行,写作,编程
旅行,写作,编程
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
我是如何打败拖延症的
我是如何打败拖延症的
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
10个调试和排错的小建议
10个调试和排错的小建议
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
那些争议最大的编程观点
那些争议最大的编程观点
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
Java程序员必看电影
Java程序员必看电影
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员都该阅读的书
程序员都该阅读的书
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
编程语言是女人
编程语言是女人
总结2014中国互联网十大段子
总结2014中国互联网十大段子
为什么程序员都是夜猫子
为什么程序员都是夜猫子
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员和编码员之间的区别
程序员和编码员之间的区别
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
 程序员的样子
程序员的样子
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员必看的十大电影
程序员必看的十大电影
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
鲜为人知的编程真相
鲜为人知的编程真相
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
一个程序员的时间管理
一个程序员的时间管理
如何成为一名黑客
如何成为一名黑客
每天工作4小时的程序员
每天工作4小时的程序员
中美印日四国程序员比较
中美印日四国程序员比较
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员应该关注的一些事儿
程序员应该关注的一些事儿
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
漫画:程序员的工作
漫画:程序员的工作
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员的鄙视链
程序员的鄙视链
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有