<b>SSL</b><b>的实现过程</b>
<a href="http://blog.51cto.com/attachment/201304/212341879.png" target="_blank"></a>
首先,客户端与服务器端进行三次握手。(因为http基于TCP/IP协议进行通信),然后他们建立SSL会话,协商要使用的加密算法,当协商完成之后。服务器端就会将自己的证书发送给客户端,客户端验证发现没有问题之后,就会生成一个对称密钥发送给服务器端,然后客户端就发送请求给服务器端,服务器端便会使用刚刚客户端发来的对称密钥加密将内容发送给客户端。这样ssl会话就建立起来了。
但是,客户端如何验证服务器的证书是否真实呢,那么便需要一个CA:第三方证书颁发机构给我们的服务器端颁发证书。所以客户端便可以到CA去验证服务器端的证书。
这时候的CA,应该自己有一份证书保存在客户端这边,并且这段证书是自签的。(用以客户端可以到CA去验证服务器端的证书。)
那么服务器端如何到CA让CA给自己搞一份证书呢:首先服务器端先生成一份密钥,将公钥交给CA,由CA对它签署并生成证书,保存一份并回送给服务器端。服务器对其进行配置使用,然后在通话过后就可以将证书发送给客户端,客户端询问CA在进行验证。
<b>①前提:</b>
要想使你的web服务器支持ssl功能,第一步得安装SSL模块
[root@Cyz ~]# yum install mod_ssl
//查看都安装了什么
[root@Cyz ~]# rpm -ql mod_ssl
/etc/httpd/conf.d/ssl.conf //说明是配置文件,更改配置需要重启
/usr/lib/httpd/modules/mod_ssl.so
/var/cache/mod_ssl //缓存目录
/var/cache/mod_ssl/scache.dir
/var/cache/mod_ssl/scache.pag
/var/cache/mod_ssl/scache.sem
<b>②提供CA</b>
重新找台主机,用这台主机做我们的CA:这台主机的IP为111.9
<a href="http://blog.51cto.com/attachment/201304/212603552.png" target="_blank"></a>
要想做CA,首先得生成自签证书,:
[root@localhost ~]# cd /etc/pki/CA/
//生成私钥
[root@localhost CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
//umask为了生成时权限其他用户无权限访问 –out表示路径)
Generating RSA private key, 2048 bit long modulus
.......................................+++
........................+++
e is 65537 (0x10001)
//查看权限
[root@localhost CA]# ls -l private/
total 8
-rw------- 1 root root 1679 Apr 10 16:15 cakey.pem //600的权限
//然后去修改配置文件中的默认信息,将其改为我们通常使用的
[root@localhost CA]# vim ../tls/openssl.cnf
<a href="http://blog.51cto.com/attachment/201304/212726313.png" target="_blank"></a>
//为自己生成自签证书
[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
//然后继续编辑openssl.cnf找到
[ CA_default ]
dir = /etc/pki/CA//改为这样子
//然后创建
[root@localhost CA]# mkdir certs crl newcerts
[root@localhost CA]# touch index.txt
[root@localhost CA]# echo 01 > serial
[root@localhost CA]# ls
cacert.pem certs crl index.txt newcerts private serial
//这个时候就已经准备好了CA就可以使用了
这个时候回到我们的客户端111.1
[root@Cyz ~]# cd /etc/httpd/ //保存在这里
[root@Cyz httpd]# mkdir ssl
[root@Cyz httpd]# ls
conf conf.d logs modules run ssl
[root@Cyz httpd]# cd ssl/
[root@Cyz ssl]# ls
[root@Cyz ssl]# (umask 077; openssl genrsa 1024 > httpd.key) //生成密钥
Generating RSA private key, 1024 bit long modulus
................................++++++
.....................................................++++++
[root@Cyz ssl]# ll
-rw------- 1 root root 887 Apr 10 16:33 httpd.key
[root@Cyz ssl]# openssl req -new -key httpd.key -out httpd.csr //生成证书颁发请求
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:CN
State or Province Name (full name) [Berkshire]:Henan
Locality Name (eg, city) [Newbury]:Zhengzhou
Organization Name (eg, company) [My Company Ltd]:MageEdu
Organizational Unit Name (eg, section) []:Tech
Common Name (eg, your name or your server's hostname) []:hello.magedu.com
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
httpd.csr httpd.key
[root@Cyz ssl]# scp httpd.csr 172.16.111.9:/tmp //将csr(证书签署请求)复制到CA
The authenticity of host '172.16.111.9 (172.16.111.9)' can't be established.
RSA key fingerprint is 44:0a:1f:77:7f:cb:df:09:a8:8d:ac:23:47:b3:a8:99.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.111.9' (RSA) to the list of known hosts.
[email protected]'s password:
httpd.csr 100% 704 0.7KB/s 00:00
然后回到CA进行签署
[root@localhost CA]# openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Apr 10 08:41:24 2013 GMT
Not After : Apr 8 08:41:24 2023 GMT
Subject:
countryName = CN
stateOrProvinceName = Henan
organizationName = MageEdu
organizationalUnitName = Tech
commonName = hello.magedu.com
emailAddress = [email protected]
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
10:B1:D2:C5:48:58:66:7B:35:71:BD:62:1D:77:85:12:EB:36:DF:63
X509v3 Authority Key Identifier:
keyid:30:86:2F:D5:DC:10:09:DA:38:19:E5:72:34:05:D5:5D:CE:83:B2:86
Certificate is to be certified until Apr 8 08:41:24 2023 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated //颁发成功
//去查看生成的证书
[root@localhost CA]# cd /etc/pki/CA/
cacert.pem crl index.txt.attr newcerts serial
certs index.txt index.txt.old private serial.old
[root@localhost CA]# cat index.txt //查看内容
V 230408084124Z 01 unknown /C=CN/ST=Henan/O=MageEdu/OU=Tech/CN=hello.magedu.com/[email protected]
[root@localhost CA]# cat serial //已经自动排序
02
//然后把证书发送给请求者。这里我们到客户端去复制证书
[root@Cyz ssl]# scp 172.16.111.9:/tmp/httpd.crt ./
httpd.crt 100% 3864 3.8KB/s 00:00
这个时候要记得返回CA中将tmp下的临时文件给删除掉以免别人获取
[root@localhost CA]# cd /tmp/
[root@localhost tmp]# ls
busybox grub-install.log.s11228 httpd.csr whatis.Fa3163
grub-install.img.o11227 httpd.crt initrd
[root@localhost tmp]# rm httpd.c*
rm: remove regular file `httpd.crt'? y
rm: remove regular file `httpd.csr'? y
这个时候证书已经签署成功了,我们应该如何配置使用它呢:
[root@Cyz ssl]# cd /etc/httpd/conf.d/
[root@Cyz conf.d]# ls
manual.conf php.conf proxy_ajp.conf README ssl.conf virtual.conf welcome.con1
[root@Cyz conf.d]# vim ssl.conf
//将里面的内容作如下修改:
<VirtualHost 172.16.111.1:443>
#ServerName www.example.com:443
ServerName hello.magedu.com
DocumentRoot "/www/magedu.com"
SSLCertificateFile /etc/httpd/ssl/httpd.crt //证书文件
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key //密钥文件
//检查语法
[root@Cyz conf.d]# httpd -t
Syntax OK
//重启服务
[root@Cyz conf.d]# service httpd restart
<a href="http://blog.51cto.com/attachment/201304/212851238.png" target="_blank"></a>
然后继续修改物理机的HOSTS文件
<a href="http://blog.51cto.com/attachment/201304/212523176.png" target="_blank"></a>
//添加如下
172.16.111.1 hello.magedu.com
然后我们来访问下:(我们这里的是https://)系统提示我们这个网站安全证书有问题,原因是因为我们CA不受信任,解决方法自然是我们手动导入证书了:
<a href="http://blog.51cto.com/attachment/201304/212920468.png" target="_blank"></a>
我们来到CA,将CA的证书发送给物理主机一份
<a href="http://blog.51cto.com/attachment/201304/212939503.png" target="_blank"></a>
点击这里的绿色按钮
<a href="http://blog.51cto.com/attachment/201304/212957356.png" target="_blank"></a>
<a href="http://blog.51cto.com/attachment/201304/213054357.jpg" target="_blank"></a>
将其扩展名改为crt 会发现变了样子
<a href="http://blog.51cto.com/attachment/201304/213109509.jpg" target="_blank"></a>
然后双击进行安装
完成之后就可以打来IE来验证啦
<a href="http://blog.51cto.com/attachment/201304/213217215.jpg" target="_blank"></a>
本文转自 陈延宗 51CTO博客,原文链接:http://blog.51cto.com/407711169/1175701,如需转载请自行联系原作者