ü 证书我们称为CA;
ü 根证书叫Root CA;
上述这个图什么意思?
首先,RootCA是全球的根,这个“树”的根是全球任何IE、FireFox、Safari里的证书库里都有这个RootCA的,因为它们是权威,所以全球的电子证书拿它们做“根”,这些证书比较具有代表性的是:
ü Verisign
ü RSA
这两家公司是世界上所有加密算法的“鼻祖”,因此被拜为全球所信任,我们可以在我们的IE中看到这些“根”。
其此,全球的计算器客户默认在装完系统后,都会带有这些ROOT CA,因此“由ROOT CA签出来的服务器证书将自动被客户端所信任”。
所以,这个信任关系,就此建立。
在HTTPS是SSL的一种,它们间是如何进行加密传输的呢,就是这个“信任关系”,先建立起信任关系,然后再开始数据传输,在加密的世界中“建立信任”就需要用到至少2张证书,即ROOT CA, SERVER CA,我们把这个信任建立的过程称为“Hands Shake”,握手协议。
前面说到了,这个握手分单向和双向,包括上述这个图就是一个单向握手,什么叫单向,什么叫双向呢?我们下面来讲解:
ü 单向握手信任
我们又称它为“包二奶协议”,大家想一下,贪官包二奶和二奶说“你跟着我,我每月给你1万块”,他说的这个话,能不能写下来? 能吗? 当然不能,写下来还得了,将来二奶一不爽把这份白纸黑字的东西交到中纪委还不把这烂货给双规了哈?
所以,二奶单向里信任贪官,这就是二奶协议,即客户端认为我访问的这台服务器“是安全的”,因此客户端可以向服务器发送和提交任何东西。
ü 双向握手信任
我们又称它为“君子协定”,呵呵,从这个词表面上来看就知道这个协议有多牢靠了,首先,它是写在字面上的,其次,双方都签署协议这个信任关系怎么样啊? 非常牢靠!
即客户端信任服务器,因此客户端可以向服务器发送和提交任何东西。同时,服务器也信任客户端,允许该客户端向我发送和提交东西。
为什么我们要把好好的口令保护给去除呢?这边不是去除而是代表这个证书在被应用程序启动时不需要显示的提示用户输入口令,要不然我们会出现下面这种情况:
在启动HTTPS协议的服务器时,一般我们点一下service->apache2.x启动,就启动了,但如果这个https所带的证书是没有经过上述这道手续后处理的话,这个服务在启动时会失败,而需要切换成手动命令行启动,就是黑屏!在黑屏状态下,apache2.x服务器启动时会提示你要求:输入口令,这个太麻烦了,一般启动服务器服务的一定是超级管理员,因此一般情况下没必要在启动相关服务时再输入一遍口令了。
ü 生成CA即ROOT CA证书并自签
网上有很多说法,说是先产生CA的Request请求,再用ca.key去自签,我给大家介绍一条一步到位的产生ca ROOT证书的命令,为了安全,我们在最后加上“-configC:\openssl\bin\openssl.cnf”,以使openssl工具可以找到相应的config文件(有些系统在指定了OPENSSL_CONF环境变量后一般就不需要在命令行里去手工指定这个-config变量了)。
由于我们产生的证书为:X509格式,因此需要按照X509格式填入相关的值。
² AU-国家家的缩写,如:CHINA=CN,美国=USA,英国=UK,日本=JP
² State or Province Name-省/洲的缩写或者是全称,如:上海=SH
² Locality Name-城市的全称或者是缩写,如:上海=SH
² Organization Name-公司名,如:Cognizant
² Common Name-要安装这台证书的主机名,证书是和主机名绑定的,如果证书里的主机名和你实际的主机名不符,这张证书就是非法的证书。
我们不能够填IP,一定一定要填主机名即域名www.xxx.com这样的东西,比如说我填的是shnlap93,但我的主机怎么知道shnlap93是指:10.225.106.35或者说是指localhost这台机器呢?
打开C:\Windows\System32\drivers\etc\hosts这个文件,如下:
localhost shnlap93
10.225.106.35 shnlap93
看到了吧?所以当我们使用pint shnlap93时,它是不是就可以知道shnlap93=10.225.106.35啦?
EmailAddress-邮件地址,爱填不填,可以跳过,反正我们是“自签”。
Look,我们的CA证书生成了,可以双击这张证书,查看信息后关闭它。
目前这张ROOT 证书,只是个自签的产品,因为是自签,一般其它客户端的IE里因此是不会带有这张根证书的。
要其实客户端也能信任这张根证书,我们必须怎么办?
将它安装到我们的IE的信任域里。
ü 将ROOT CA导入客户端的根级信任域,有多少台客户端,每个客户端都要导一边这个证书!
所以说如果我们拥有世界级的根证书该多好啊,电脑上默认就带有我们的证书,因此知道这帮世界级的根证书机构为什么能挣钱了吧?50-500美金签张证书,几秒钟的事,CALL!!!
点[导入]按钮
下一步,下一步,此时会有一个弹出框,选“yes(是)”完成导入。
再来打开我们的ca.crt文件
发现了没有,这张证书是有效的证书了,所以在“证书信息”前原有的一个红叉叉,消失了。
ü 生成Web服务器端证书密钥
我们的root证书有了,现在可以生成Web服务器端的证书了,并且用root ca去签名
先生成密钥,密码6个a
去除密码(提示:enter pass phrase for server.key时输入刚才生成密钥时的密码即6个a。
ü 生成Web服务器端证书的签名请求
生成服务器端证书请求时需要输入server端key的口令,我们为了方便,也用6个a。
ü 用Root CA去对Web服务器的证书请求即csr(certificate request)进行签名认证
输入y并回车
此时它会提示:
1 out of 1certificate requests certified, commit? [y/n],再 输入y并回车
一切回复正常了。
2.6 为Apache HttpServer布署https协议
ü 用文本编辑器打开httpd.conf文件,找到如下这一行
#Include conf/extra/httpd-ssl.conf
这行默认是被注释掉的,因此请把它放开,修改成如下
Include conf/extra/httpd-ssl.conf
ü 打开D:\tools\httpd\conf\extra\里的httpd-ssl.conf文件
在开头处添加如下这一行语句
#
# This is the Apache server configuration file providing SSL support.
# It contains the configuration directives to instruct the server how to
# serve pages over an https connection. For detailing information about these
# directives see <URL:http://httpd.apache.org/docs/2.2/mod/mod_ssl.html>
#
# Do NOT simply read the instructions in here without understanding
# what they do. They're here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
#
LoadModule ssl_module modules/mod_ssl.so
然后找到下面这一行
SSLCertificateFile "D:/tools/httpd/
把它改成:
SSLCertificateFile "D:/tools/httpd/cert/server.crt"
再找到下面这一行
SSLCertificateKeyFile "D:/tools/httpd/
把它改成
SSLCertificateKeyFile "D:/tools/httpd/cert/server.key"
然后把我们在我们的Apache HttpServer的安装目录下手工建一个目录叫cert的目录,并把我们在前面生成的server.crt与server.key文件拷入d:\tools\httpd\cert目录内。
在httpd.conf文件中搜索“ServerName”
搜到下面这样的一句
ServerName 10.225.101.35:80
把它改成你的主机名
ServerName shnlap93:80
此处的shnlap93是你的主机名
再继续在httpd.conf文件中搜索“VirtualHost *”
搜到下面这一句
<VirtualHost *>
把它改成
<VirtualHost shnlap93:80>
在D:\tools\httpd\conf\extra\httpd-ssl.conf文件中查找
搜“VirtualHost _default_:443”
然后把位于< VirtualHost _default_:443>段内的头三行改成如下格式
² 确保你的http的发布目录在d:/www
² 确保你的HTTPS的主机名为shnlap93:443(这边的名字和生成证书里的common name必须完全一模一样连大小写都必须一样)
DocumentRoot "D:/www"
ServerName shnlap93:443
ServerAdmin admin@localhost
然后在下一个“</VirtualHost> ”结束前,填入下面这几行语句
DirectoryIndex index.html index.htm index.jsp index.action