Total Pageviews

Tuesday 29 November 2011

OpenSSL证书的生成

OpenSSL 证书生成主要有三步,1、管理员生成“证书私钥‘,然后用私钥生成一份“证书请求文件“(.csr)2、管理员将“证书请求文件“交给商业性CA签署,比如 Verisign 形成正式证书。3、管理员在服务器上导入这个证书。

一、准备工作

根据 OpenSSL 默认配置文件,新建相应目录结构。当然你也可以修改配置文件[ca_default]部分,指定相应目录。
1
sudo vim /usr/local/ssl/openssl.cnf  (选做,修改配置文件)
1
2
3
4
5
mkdir -p /usr/local/ssl/demoCA
cd /usr/local/ssl/demoCA
mkdir private crl certs newcerts
echo '01' > serial #在demoCA目录下新建serial文件并写入01。
touch index.txt #在demoCA目录下新建index.txt的空文件

二、CA 根证书

2.1、生成CA根证书私钥

生成 CA 根证书 RSA 私钥,openssl genrsa 支持 des3 参数,更多内容《OpenSSL 之 genrsa 命令》
1
openssl genrsa -out private/cakey.pem 1024 #生成CA认证中心 RSA 私钥

2.2、生成CA根证书

利用CA私钥,生成自签署的CA证书这一步很关键,也很容易出现问题。首先相应目录结构和文件一定要准备好,然后证书格式请选择pem而非crt,另外所在目录是demoCA。
1
openssl req -new -x509 -key private/cakey.pem  -out cacert.pem
特别注意!!
国家、省、组织名一定要填写不能为空,且记住你填写的值,其他的(包括Common Name)建议为空值。

1
2
3
4
5
6
7
Country Name (2 letter code) [AU]:(国家)
State or Province Name (full name) [Some-State]:(洲/省)
Locality Name (eg, city) []:(城/镇)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:(组织名)
Organizational Unit Name (eg, section) []:(单位名)
Common Name (eg, YOUR name) []:(httpd-ssl.conf中的ServerName 名称)
Email Address []:(邮箱)

三、SSL 服务器证书

3.1、生成服务器证书私钥

1
openssl genrsa -out private/server.key 1024

3.2、生成服务器证书请求文件

利已生成的服务器证书私钥,生成服务器证书请求csr文件
1
openssl req -new -key private/server.key -out crl/server.csr
特别注意!!
1、国家、省要与上面CA证书一致,否则签署时必然要失败。
2、 Common Name 此时相当重要,请输入你需要SSL支持的域名,如 localhost(域名只能一个),否则浏览器提示证书错误。(多域名证书)

3.3、签署服务器证书

1
2
cd ..
openssl ca -in demoCA/crl/server.csr -out demoCA/certs/server.crt
 
--------------------------------------------------------------------------------

SSL认证

SSL:安全套接层,是netscape公司设计的主要用于web的安全传输协议。通过基于公开密钥体系的证书认证方式来确保客户端和网站服务器之间的数据安全。要实现SSL,就需要apache的SSL证书并且通过CA认证。
软件版本:Apache_2.2.10-win32-x86-openssl-0.9.8i.msi

SSL认证流程:

SSL 客户端在TCP连接建立之后,发出一个消息给服务器,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息,SSL的服务器端会回应 一个数据包,这里面确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了身份和自己的公钥)。Client在收到这个消息后会生成一个 秘密消息,用SSL服务器的公钥加密后传过去,SSL服务器端用自己的私钥解密后,会话密钥协商成功,双方可以用同一份会话密钥来通信了。
如 果对于一般的应用,管理员只需生成"证书请求“(后缀大多为.csr),它包含你的名字和公钥,然后把这份请求交给诸如verisign等有CA服务公 司,你的证书请求经验证后,CA用它的私钥签名,形成正式的证书发还给你。管理员再在web server上导入这个证书就行了。
如果你不 想花那笔钱, 或者想了解一下原理,可以自己做CA。从ca的角度讲,你需要CA的私钥和公钥。从想要证书的服务器角度将,需要把服务器的证书请求交给CA. 如果你要自己做CA,别忘了客户端需要导入CA的证书(CA的证书是自签名的,导入它意味着你"信任“这个CA签署的证书)。而商业CA的一般不 用,因为它们已经内置在你的浏览器中了。

一、准备工作:

1.1、将Apache目录下conf目录中的openssl.cnf文件复制到C:\usr\local\ssl\文件夹中
2.2、在Apache到bin目录下新建文件夹demoCA;然后在demoCA文件夹中新建newcerts文件夹。
3.3、在demoCA文件夹中新建文件index.txt,内容为空。新建iserial文件,内容为"01“。

二、实现SSL过程:

2.1、PACHE以支持SSL

编辑httpd.conf,查找下面代码,并去掉前面的#
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf

2.2、生成服务器密钥命令:

openssl genrsa -out server.key 1024
说明:此命令将生成1024 位的RSA 私钥,得到server.key文件

2.3、生成证书请求

openssl req -new -key server.key -out server.csr
这是用步骤1的密钥生成证书请求文件server.csr, 这一步提很多问题,按要求输入

2.4、生成内部CA私钥

openssl genrsa -out ca.key 10245.利用CA私钥生成自签署CA证书
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

2.5、为网站服务器签署证书

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

2.6、结束操作

将"server.crt" server.key复制到conf文件夹下,并重新启动 APACHE。
在IE中导入CA的证书到可信任区域,否则会报告证书不可信任!

三、特别说明:

这些证书制作仅仅供开发使用。

No comments:

Post a Comment