使用openssl为apache2配置ssl

作者: shaneZhang 分类: 互联网技术 发布时间: 2014-11-17 10:09

  最近想玩一下apache,在自己的ubuntu10.04上装了一个,安装很方便,但ubuntu源中的apache有缺陷,没有apache2-ssl-certificate命令,不能方便的产生证书,所以需要借助openssl来完成。

1.首先,确保apache2 的ssl模块已经加载:

 $sudo a2enmod ssl

2.使用128位rsa算法生成密钥server.key

 $openssl genrsa 1024 > server.key 

3.由密钥生成证书请求文件server.csr 

 $openssl req -new -key server.key > server.csr 

 (需要填写许多证书信息)

4.生成证书

 $openssl req -x509 -days 365 -key server.key -in server.csr > server.crt 

 (-days参数 为有效期)

5.把证书和密钥放置到相应位置(这里我放到/etc/apache2/ssl/)

 $sudo mv server.* /etc/apache2/ssl/

6.修改 /etc/apache2/sites-available/default-ssl文件

将其中的证书相关配置替换为

    SSLCertificateFile /etc/apache2/ssl/server.crt 

    SSLCertificateKeyFile /etc/apache2/ssl/server.key 

7.在/etc/apache2/sites-enable/目录下为刚才的default-ssl配置文件生成软连接(如果已经有就不要了)

 $sudo ln -s ../sites-available/default-ssl 001-default-ssl

8.检查/etc/apache2/ports.conf文件中443端口已经监听

 Listen 443

9.重启apache

 $sudo /etc/init.d/apache2 restart

10.在浏览器中输入https://localhost:443/ 验证是否成功 

 

 最后附一段SSL的原理:(来自http://leo-dream.javaeye.com/blog/313592

原理: 
要想保证网络通信的安全,我们第一反应就是给传输的数据加密,这也是现行安全传输通用的模式。但在传统加密方式(单密钥,对称加密)下,密钥不可避免的要被传送于网络节点之间,(除非是写死到各个节点中,不过那样就没有任何灵活性和普适性),在一定强度的网络攻击下,这种加密方式是很脆弱的。 
SSL 的出现解决了这个难题,理解SSL 的关键是理解非对称加密的含义。 
在对称加密的情况下,源数据A,通过使用密钥B,加密成为密文C。任何人,只要获得了密钥B,就能够对截获的密文C解密,还原出源数据A。(依靠”算法安全”远不如依靠”密钥安全”);在非对称加密中,出现了“密钥对”的概念,即有一个公共密钥(公钥)和一个私有密钥(私钥),经公钥加密的密文只能由私钥解密,反过来,经私钥加密的密文只能由公钥解密。这是个重要的特性(数学原理可参考RSA算法),下面的模拟https通信流程说明了这一特性的重要。 
1,客户端向服务端发出请求,服务端将公钥(以及服务端证书)响应给客户端;
2,客户端接收到服务器端端公钥与证书,验证证书是否在信任域内,不信任则结束通信,信任则使用服务端传过来的公钥生成一个“预备主密码”,返回给服务端。
3,服务端接收客户端传过来的“预备主密码”密文,使用私钥解密。非对称加密的安全性也就在于此了,第三方无法获取到“预备主密码”的明文,因为除了服务端,其他任何人是没有私钥的。
4,双方使用“预备主密码”生成用于会话的“主密码”。确认后,结束本次SSL 握手,停止使用非对称加密。
5,双方使用“主密码”对称加密传输数据,直到本次会话结束。
总结整个流程:先采用非对称加密模式,保证“主密码”只被通信双方获知,而后使用传统的对称加密方式通信,这样,保证了密钥安全(即“主密码”)就等于保证了数据安全。之所以建立安全连接后,转而使用对称加密,是因为非对称加密的运算量很大,用于“常态”的数据通信十分低效。

以上描述的仅是SSL 协议中加密通信的原理,没有涉及到证书验证,以及客户端,服务端模式。  

如果觉得我的文章对您有用,请随意打赏。如果有其他问题请联系博主QQ(909491009)或者下方留言!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注