您的位置:首页 > 运维架构

汇总多个帖子,RH上用OpenSSL签发证书

2010-12-11 15:17 274 查看
目的:模拟两个人使用CA进行密文通讯(其实好像就是SSL干的事)

看了2个攻略后,我理解的步骤是

1,不管三七二十一先为甲(服务器server)和乙方(客户端client)分别生非对称密钥对(xxxx.key文件为私钥,xxxx.csr文件为公钥的前身)

2,CSR文件要成为公钥,必须获得CA的签名

3,所以我们需要一个CA

4,自建一个CA

5,用这个CA给我们两个证书请求签名

6,把证书和私钥封装后发给两位小盆友,需要转化成p12格式

过程

#openssl

genrsa -des3 -out server2011.key 1024

RSA的非对称算法目前被量子计算机破解到786位,RSA推荐大家至少要用1024位的key

#openssl req -new -key server2011.key -out server2011.csr -config
./openssl.cnf

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:Beijing

Locality Name (eg, city)
[]:Beijing

Organization Name (eg, company) [Internet Widgits Pty
Ltd]:JerryPeak

Organizational Unit Name (eg, section) []:JerryPeak

Common Name (eg, YOUR name) []:Jerry Fong

Email Address []:jerry4ng@aol.com

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:******

An optional company name []:JP

这些blabla的东西是你申请证书所需的信息,注意,如果使用
openssl.cnf中的
默认策在签名过程中ca的信息要和csr中一致,具体策略详见http://secyaher.blog.163.com/blog/static/389557720091029494100/

#openssl genrsa -des3 -out
client2011.key 1024

#openssl req -new -key client2011.key -out client2011.csr -config
./openssl.cnf

这样我们就有了2套非对称密钥,当然还需一个ca来签名,下面开始建立ca

# openssl genrsa -des3 -out
myrootca.key.pem 2048

# openssl req -new -key myrootca.key.pem -out myrootca.req.pem
-config ./openssl.cnf

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:Beijing

Locality Name (eg, city) []:Beijing

Organization Name (eg, company) [Internet Widgits Pty Ltd]:Jerry
CA

Organizational Unit Name (eg, section) []:Jerry CA

Common Name (eg, YOUR name) []:Jerry Peak

Email Address []:justinjia@foxmail.com

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:qwerty

An optional company name []:JC

# openssl x509 -req -days 7305 -sha1 -extfile ./openssl.cnf
-extensions v3_ca -signkey myrootca.key.pem -in myrootca.req.pem
-out myrootca.crt.pem

这是ca给自己签名,这样我们会有一张根证书

Signature ok

subject=/C=CN/ST=Beijing/L=Beijing/O=Jerry CA/OU=Jerry CA/CN=Jerry
Peak/emailAddress=justinjia@foxmail.com

Getting Private key

Enter pass phrase for myrootca.key.pem:xxxxxx

#vi ./openssl.cnf

####################################################################

[ CA_default
]

dir
=
./JerryCA
# Where everything is kept

#mkdir ./JerryCA

#mkdir ./JerryCA/newcrts

#touch ./JerryCA/{serial,index.txt}

#echo "00" > ./JerryCA/serial

#

这是为ca建立工作目
录,
然后开始用ca的私钥给crs签名

#

openssl ca -config
./openssl.cnf -extensions v3_ca -in server2011.csr -out
server2011.crt -cert JerryCA/myrootca.crt.pem -keyfile
JerryCA/private/myrootca.key.pem
-
policy policy_anything -verbose

得到了server2011.crt
同时newcrts目录下多了一个00.pem

#


openssl ca -config
./openssl.cnf -extensions v3_ca -in client2011.csr -out
client2011.crt -cert JerryCA/myrootca.crt.pem -keyfile
JerryCA/private/myrootca.key.pem
-
policy policy_anything
-verbose



就在执行这条命令的时候,我遇到了麻烦,报错ailed
to update database TXT_DB error number
2后,我上网查了一下,似乎是我已经为client2011.csr生成过证书,我修改了openssl.cnf中unique_subject
=
no,发现还是不成,后来在index.txt同一目录下发现一个index.txt.attr文件,里面居然还有一个unique_subject
= yes,改为no后终于ok,下面我要转换证书格式到pkcs#12



参考文献:
http://secyaher.blog.163.com/blog/static/38955772009102941017270/ http://fengzhilinux.blog.51cto.com/1343279/291727 http://rt.openssl.org/Ticket/Display.html?id=502&user=guest&pass=guest 解决TXT_DB的错误
http://blog.chinaunix.net/u2/70777/showart_1844426.html 描述了一般性步骤

----------------------------------------------------------------
http://blog.csdn.net/bell2008/archive/2007/08/02/1723640.aspx 描述了自建CA过程

1

自建CA
中心


CA中心

1
生成CA自己的私钥

2
生成CA(使用私钥)自签名的证书(x509格式,这个证书也称为根证书<root
ca>)

3
使用脚本对需要证书的机构提交的CSR进行签名

CA中间机构

1,
生成自己的私钥

2,
生成请求证书CSR发给CA根中心,然后得到CA签过名的证书(公钥)

3

,用自己的私钥签名
?(
里面应包括根
CA
的证书链啊
)

客户(即需要部署证书的Web Server)

1
生成私钥

2
生成CSR,其中包括自己的公钥

3
收到CA签名后的CSR返回(经ca签名的证书)

4
将CA证书(root ca),私钥以及经ca签名的证书部署在机构

1.1

使用OpenSSL自建CA中心


假设我们要做的最高层认证中心叫做 myrootca
下面步骤在WINDOWS中测试时到8.1.2步中出现:
Unable to load config info from
/usr/local/ssl/openssl.cnf 的提示

1.1.1

制作 Private Key (及 Public Key )


我们做一个新的 Private Key 。 Public Key
可由 Private Key 推得,所以不用特别去做。
请为最高层认证中心的 Private Key
设定一个适当的密码:123456
制作 RSA[7] Private Key
openssl genrsa -des3 -out
myrootca.key.pem 2048


1.1.2

填写凭证申请书


证申请书,是把你的资料,和这个 Public Key
夹在一起,以便认证中心审核,签上签名用的。所以这个步骤,会问你这个 Key
的相关资料,包括国家、城市、单位名称、部门名称、凭证名称、联络人的信箱,以及申请的效期等等。请一一填写
若你要直接用最高层认证中心来直接当凭证用,凭证名称 (Common
Name) 请用伺服器的全名 (www.abc.com
)(一般不会这样用)
填写凭证申请书
openssl req -new –key
myrootca.key.pem -out myrootca.req.pem


1.1.3

签发证书>>即自签名证书


自己给自己签名:
openssl x509 -req -days 7305
-sha1
-extfile
openssl.cnf -extensions v3_ca
-signkey
myrootca.key.pem
-in
myrootca.req.pem -out myrootca.crt.pem

这样就好了,
Private
Key

myrootca.key.pem,
要小心存好保护

自己签
Public Key
凭证在
myrootca.crt.pem

--------------------------------------------------------
http://www.weizhifeng.net/?p=854 对各个概念说的非常透彻

几个概念:

CA(Certification Authority,认证中心)

SSL (Secure Sockets Layer,安全套接层协议)

TLS(Transport Layer Security,传输层安全)

CSR (Certificate Signing Request,证书签名请求)

流程:需要启用SSL的服务器自己生成CSR,然后让权威的CA进行签名认证或者

自己创建一个CA证书,然后给自己的CSR签名,不过这样的证书不会被浏览器认可。

1. 创建一个自签名的CA证书:

openssl req -x509 -newkey rsa:1024 -keyout ca.key -out ca.crt
2. 生成服务器CSR:

openssl req -newkey rsa:1024 -keyout server.key -out server.csr
3. 签名:

如果不使需要CA证书签名的话,用如下方式生成:

openssl req -x509 -days 1024 -key server.key -in server.csr
> server.crt
如果需要用CA证书签名:

openssl x509 -req -in server.csr -out server.crt -CA ca.crt -CAkey
ca.key -CAcreateserial
4. 查看证书:

openssl x509 -noout -text -in server.crt
5. 验证证书:

openssl verify -CAfile ca.crt server.crt
6. 生成客户端CSR:

openssl req -newkey rsa:1024 -keyout client.key -out client.csr
7. 用CA证书签名:

openssl x509 -req -in client.csr -out client.crt -CA ca/ca.crt
-CAkey ca/ca.key -CAcreateserial
8. 转换,使证书可以安装到浏览器:

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key
-out client.pfx
9. 修改配置文件httpd-ssl.conf:

SSLCertificateFile conf/ssl.crt/server.crt #服务器证书

SSLCertificateKeyFile conf/ssl.key/server.key #服务器私钥

SSLCACertificateFile conf/ssl.crt/ca/ca.crt #CA证书

SSLVerifyClient require #强制浏览器必须安装了证书才能访问

10. 浏览器安装证书:client.pfx
update:

证书链介绍

1. 生成Root CA私钥与证书:

生成RootCA私钥 –> 使用私钥生成CSR –>
生成自签名根证书(用来给二级CA证书签名)。
2. 生成二级CA 私钥与证书:(假如有两个二级CA,
分别负责管理服务器端和客户端证书)

2.1 生成ServerCA私钥 –> 使用私钥生成CSR –>
使用根证书签名生成二级证书(ServerCA证书用来给服务器证书签名)。

2.2 先生成ClientCA私钥 –> 使用私钥生成 CSR–>
使用根证书签名生成二级证书(ClientCA证书用来给客户端证书签名)。
3. 生成服务器端与客户端的私钥与证书:

3.1 生成ServerA私钥 –> 使用私钥生成CSR –>
使用ServerCA证书签名生成三级证书(ServerA证书)。

3.2 生成ClientA私钥 –> 使用私钥生成 CSR–>
使用ClientCA证书签名生成三级证书(ClientA证书)。

3.3 先生成ClientB私钥 –> 使用私钥生成 CSR–>
使用ClientCA证书签名生成三级证书(ClientB证书)。

….可以生成N个客户端证书

1.首先要生成服务器端的私钥(key文件):

运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!

去除key文件口令的命令:

openssl rsa -in server.key -out server.key

2.openssl req -new -key server.key -out server.csr -config openssl.cnf

生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可.

3.对客户端也作同样的命令生成key及csr文件:

openssl genrsa -des3 -out client.key 1024

openssl req -new -key client.key -out client.csr -config openssl.cnf

4.CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.

openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf

5.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:

Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

现在我们所需的全部文件便生成了.

另:

client使用的文件有:ca.crt,client.crt,client.key

server使用的文件有:ca.crt,server.crt,server.key

.crt文件和.key可以合到一个文件里面,本人把2个文件合成了一个.pem文件(直接拷贝过去就行了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: