Apache的编译安装见这篇:
http://www.cnblogs.com/yjken/p/3921840.html
网上查阅了一大批资料,得知自己生成的证书是会被浏览器提示“证书不安全”的,我也就没有去生成证书,而是直接去了startssl 申请了一个免费的证书,据说startssl也是全球唯一的一个可以申请免费ssl证书的地方,并且是被主流浏览器(firefox,chrome,IE,safari)认可的,所以,对于安全性要求不高的情景,免费的证书已经完全满足需求了,当然,如果你的安全性要求比较高,startssl也是有更高级的安全证书支持的,不过,这些更安全的证书可就是收费的了。
简单说下申请证书的步骤:
1. 去www.startssl.com注册一个帐号
2. 因为startssl不是那种常见的帐号密码登录的模式,而是不需要密码,甚至也不需要帐号,而是安装一个startssl的个人证书到你的浏览器上,下次进入这个网站,直接在弹出的证书上点确认就可以了,所以,第一次注册后,根据它的引导,会生成一张个人证书,安装至你的浏览器上,这个证书只是用来登录startssl网站用的,没有其它用处。
3. 验证邮箱,验证域名,startssl需要确认你确实是某域名的所有者,所以它会首先要求验证域名的所有权,验证步骤也很简单,假设你的域名是abc.com , 那么它会将验证字符串发送到诸如[email protected]这样的邮箱,你打开这个邮箱,把验证字符串拷贝并粘贴过去,就算成功了,很简单。
4. 生成证书,首先会生成一张顶级域证书,再生成一张二级域证书(整个步骤根据它的向导来,就可以了),期间有个密码,是必须要记住的,不然生成的证书,就会没法用了。
最终会得到下面几个文件:
ca.pem , ssl.crt , ssl.key , sub.class1.server.ca.pem
其实这张ssl.key是加密过的,直接配置到apache上也是可以的,只是这样很不方便,因为,每次启动apache都必须输入一遍密码,所以,你可以直接在线解密这个私钥的.
这样生成的私钥,配置到Apache上,就不需要启动Apaceh时输入密码短语了。
配置如下:
<VirtualHost *:443> SSLEngine On SSLCertificateFile certificate/ssl.crt SSLCertificateKeyFile certificate/ssl.key SSLCertificateChainFile certificate/sub.class1.server.ca.pem SSLCACertificateFile certificate/ca.pem ServerAdmin [email protected] DocumentRoot "~/www/abc" ServerName www.abc.com:443 ErrorLog "logs/error/abc_error_log" CustomLog "logs/custom/abc_log" common </VirtualHost>
主要是这几行:
SSLEngine On SSLCertificateFile certificate/ssl.crt SSLCertificateKeyFile certificate/ssl.key SSLCertificateChainFile certificate/sub.class1.server.ca.pem SSLCACertificateFile certificate/ca.pem
这个服务器名称需要增加443,端口号:
ServerName www.abc.com:443
这样,配置就完成了,不过,如果你这个时候重启Apache,你会发现用https访问不了网站,我当时配置的时候,就忽略了这一点,结果找了一大堆资料,还是不行,没办法,只好自己研究了,去服务器上,用netstat命令查看,发现,完全没有开启433监听端口,也就是说Apache的配置上还漏了一条,我在“Listen 80”下面,又加了一行“Listen 443”
Listen 80 Listen 443
这样,再重启Apache,使用https方式,打开网站,畅通无阻,问题解决。
对了,如果你的Apache不是我的安装方式,可能还会出问题,就是,你可能压根就没有安装ssl,我在安装Apache的时候,是有这条的:
with-ssl=/usr/include/openssl
这样,安装了ssl功能,如果不是编译成静态的,而是动态库的话,还得去掉下面这行的注释:
LoadModule ssl_module modules/mod_ssl.so
好了,这样,一般是不会有什么问题的了。