Total Pageviews

Thursday 25 October 2012

Apache下,使用ssl加密http协议

使用mod_ssl模块,使Apache可以使用SSL协议加密HTTP协议,用来保护HTTP会话。
最简洁的配置样例:
<VirtualHost _default_:443>
ServerName    www.urdomain.com
DocumentRoot  /opt/httpd/htdocs
SSLEngine      on
SSLCertificateFile        /opt/httpd/conf/ssl/www.urdomain.com.cert
SSLCertificateKeyFile   /opt/httpd/conf/ssl/www.urdomain.com.key
</VirtualHost>
SSLEngine                 ON 启动SSL引擎
SSLCertificateFile       指定证书
SSLCertificateKeyFile  指定相关密钥
使用SSL加密分为正式场合,比如网上银行、支付宝等对应用安全要求较高的应用上;另一个为非正试场合,比如自己也可以配置一个SSL的web服 务。区别在于,正式场合https应用使用的SSL证书是经过第三方数字签名的,而非正式应用,则是非正式机构或者是自己制作、签名的。
成生密钥对儿:
在创建证书之前,要有一个共公/私有密钥对儿。以www.urdomain.com为例:
openssl genrsa -des3 -rand file1:file2:file3 -out www.urdomain.com.key 1024
genrsa:告诉openssl要生成一个RSA的密钥对儿。
des3:表示私钥应该被一个”pass phrase”编码和保护。
rand:给OpenSSL提供任意的、随机的数据以确保生成的密钥是唯一的和不可预知的。这个开关在Windows里没有必要,在Windows下使用其他的方式获得随机数据。
out:保存位置。
1024:密钥位数。
当使用了-des3选项,成生了受“口令”保护的密钥对儿时,启动apache时需要输入口令才能启动。假如不想要每次都输入“口令”(不安全),可以使用不受“口令”保护的密钥,去掉-des3选项即可,也可以使用下面的命令转换一下:
openssl rsa -in www.urdomain.com.key -out www.urdomain.com.key.nopassword
显示密钥文件的信息:
openssl rsa -noout -text -in www.urdomain.com.key
该命令也可用于查看ssh-key的信息,其实质是一样的。

创建一个证书签署请求(正式应用场合):
正式场合的应用,需要一个经证书颁发机构签署的证书,为此,我们先成生一个证书,提交由第三机构签名认证。使用命令:
openssl req -new -key www.urdomain.com.key -out www.urdomain.com.csr
需要填写一些地域、组织机构类的信息。需要特殊说明的是:在一个网站站书里,Common Name (eg, YOUR name)一栏标识完全限定的域名(FQDN),假如此处与以后使用证书的站点名不同,浏览器将发布一个错误,无法访问。
完成之后,证书就存储在www.urdomain.com.csr里。下面的命令可以显示这个证书的信息:
openssl req -noout -text -in www.urdomain.com.csr
然后,可以所这个证书签署请求提交给一个CA(证书签署机构)处理。
Verisign和Thawte是两家可以选择的CA:
https://digitalid.verisign.com/server/apacheNotice.htm
https://www.thawte.com/ssl-digital-certificates/buy-ssl-certificates/
创建自签署证书(非正式应用场合):
非正式的应用,可以自己签署自己的证书:
openssl x509 -req -days 365 -in www.urdomain.com.csr -signkey www.urdomain.com.key -out www.urdomain.com.cert
并且,必须使用:chmod 400 www.urdomain.com.key 来保护密钥文件。
另一个问题:
貌似SSL不能与基于主机名的虚拟主机一同工作。
有一个协议把一个已有的HTTP连接升级到TLS,但是并不是所有的浏览器支持此项功能(RFC 2817)。
参考:
SSL原理解析
http://www.yesky.com/ServerIndex/77125243130347520/20040426/1791592.shtml
SSL原理解密
http://fanqiang.chinaunix.net/a6/b8/20010608/121000441.html