openssl下生成建立CA并生成服务器和客户端证书方法



双向认证:

 

  1. 客户端向服务器发送消息,首先把消息用客户端证书加密然后连同时把客户端证书一起发送到服务器端,
  2. 服务器接到消息后用首先用客户端证书把消息解密,然后用服务器私钥把消息加密,把服务器证书和消息一起发送到客户端,
  3. 客户端用发来的服务器证书对消息进行解密,然后用服务器的证书对消息加密,然后在用客户端的证书对消息在进行一次加密,连同加密消息和客户端证书一起发送到服务器端,
  4. 到服务器端首先用客户端传来的证书对消息进行解密,确保消息是这个客户发来的,然后用服务器端的私钥对消息在进行解密这个便得到了明文数据。

 

单向认证:

 

  1. 客户端向服务器发送消息,
  2. 服务器接到消息后,用服务器端的密钥库中的私钥对数据进行加密,然后把加密后的数据和服务器端的公钥一起发送到客户端,
  3. 客户端用服务器发送来的公钥对数据解密,然后在用传到客户端的服务器公钥对数据加密传给服务器端,
  4. 服务器用私钥对数据进行解密,

这就完成了客户端和服务器之间通信的安全问题,但是单向认证没有验证客户端的合法性。


  在OpenSSL的安装目录下的misc目录下,运行脚本sudo ./CA.sh -newCA。运行完后会生成一个demoCA的目录,里面存放了CA的证书和私钥。在serial文件中写入第一个序列号“01”



生成server证书

1.创建私钥 :

openssl genrsa -out server/server-key.pem 1024 

2.创建证书请求 :

openssl req -new -out server/server-req.csr -key server/server-key.pem

-----

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

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

Locality Name (eg, city) []:bj

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

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

Common Name (eg, YOUR name) []:localhost   #此处一定要写服务器所在ip

Email Address []:[email protected]

 

 

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

3.自签署证书 :

openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650 

4.将证书导出成浏览器支持的.p12格式 :

openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12 

密码:123456



生成client证书 

1.创建私钥 :

openssl genrsa -out client/client-key.pem 1024 

2.创建证书请求 :

openssl req -new -out client/client-req.csr -key client/client-key.pem

-----

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

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

Locality Name (eg, city) []:bj

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

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

Common Name (eg, YOUR name) []:dong

Email Address []:[email protected]

 

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

 

3.自签署证书 :

openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650 

4.将证书导出成浏览器支持的.p12格式 :

openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12 

密码:123456


验证可以:openssl verify -CAfile /etc/ins/ca.crt /etc/ins/client.crt

     


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


出现错误

openssl TXT_DB error number 2 failed to update database


产生的原因是:

 

This thing happens when certificates share common data. You cannot have two 
certificates that look otherwise the same.

 

方法一:

 

修改demoCA下 index.txt.attr

 

  1. unique_subject = yes  

 改为


  
  1. unique_subject = no  

 方法二:

 

删除demoCA下的index.txt,并再touch下

 


  1. rm index.txt  
  2.   
  3. touch index.txt  

 方法三:

将 common name设置成不同的







------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
简述:

genrsa -des3 -out server.key 1024

openssl req -new -key server.key -out server.csr
openssl ca -in client.csr -out server.crt
openssl verify -CAfile ca.crt  server.crt


参考 http://11lingxian.iteye.com/blog/1491607
http://www.360doc.com/content/11/0419/12/2150778_110723774.shtml


你可能感兴趣的:(openssl,证书)