SSL是Security Socket Layer;安全的套接字层
他介于HTTP和TCP协议层之间
SSL是Netscape公司开发的,属于个人
TLS是标准委员会制定的
OpenSSL是SSL的开源实现
CA:证书颁发机构:Certification Authority
两台主机要通信,他们需要先建立链接,建立链接的时候又需要保证这个链接是安全的,那么如何保证安全呢?
这里就需要用到SSL来保证传输的安全性,SSL可以生成一对秘钥对,在建立安全链接的时候,客户端发出请求到服务器端,服务器端收到请求,把自己的公钥通过网络传给客户端,然后安全链接就建立了,之后发出的包都是通过这个安全链接来传送的,这个安全链接是虚拟的,只是每一个数据包的首部都增加了一个对应的SSL头部的字段,经过解密以后才能得到HTTP包的内容,客户端收到包后,需要使用服务端给发送过来的公钥来进行相应字段段的解密,解密成功以后,才可以得到对应的HTTP包。
一个服务商发布了一个软件,希望得到用户们的支持,但是用户担心下载到的软件不安全,这么如何保证这个软件的安全性?
这里就需要用到CA来保证这个服务商发布的软件是安全的,CA会给这个服务商颁发一个数字证书,这个证书就可以证明这个软件是安全的,我们可以放心使用。那么,这个证书颁发机构肯定是权威的,不然出了问题找谁去呢,对吧。比如我们新建了一个网站,这个网站没有经过CA认证,没有给你颁发证书,那你的网站到底安全不安全呢,这时候如果有客户访问我们的网站,就会弹出来一个框告诉我们这个网站不一定安全,出了什么事你自己兜着。这时候胆子小点的,或者担心中招的朋友肯定就不会接着访问了,然后我们的网站慢慢就没人访问了,那这时候你就需要去权威机构买一个证书来证明你的网站是安全的。所以CA就担任了这个作用了,这里只说了道理,具体的可以上http://kb.cnblogs.com/page/194742/ 和 https://baike.baidu.com/item/ca%E8%AF%81%E4%B9%A6/10028741?fr=aladdin这看看。
接下来是具体的命令:
//自定义自己的CA来给自己颁发证书
openssl req -new -x509 -key server1024.key -out server.crt -days 365
//显示自定义的CA的具体信息
openssl x509 -text -in server.crt
//修改CA的配置文件(/etc/pki/tls/openssl.cnf)
把dir改为绝对路径
//到/etc/pki/CA/生成对应的私钥
(umask 077; openssl genrsa -out private/cakey.pem 2048)
//根据私钥生成对应的自签证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem
//在/etc/pki/CA/下生成对应的其他文件
mkdir certs newcerts private
touch index.txt
touch serial
echo 01 > serial
实验:给自己的httpd服务器签发证书(rhel系列)
1. 到/etc/httpd/目录下创建一个SSL目录
mkdir /etc/httpd/ssl
2. 为httpd服务器生成私钥
cd /etc/httpd/ssl
(umask 077; openssl genrsa -out httpd.key 1024)
3. 为httpd服务器生成申请
openssl req -new -key httpd.key -out httpd.csr
之后填写申请表
4. 填完之后,就可以拿着申请去签名了,下面是签名命令
openssl ca -in httpd.csr -out httpd.crt -days 365
5. 截止此处证书签发完毕
6. 作为CA,怎么查看自己签发过的申请呢?
cd /etc/pki/CA
cat index.txt //index.txt中存放的是签发过的CA证书信息
cat serial //下个CA证书的序列号
7. 生成测试用的证书,仅在rhel系列
cd /etc/pki/tls/certs
make httpd.pem
此方法仅用在测试中,因为私钥也在证书中