参考文章:
http://blog.csdn.net/zhaoxy_thu/article/details/21133399
http://www.linuxidc.com/Linux/2010-02/24456.htm
- 安装所需的软件:
Apache Http Server2..0.65 + OpenSSL,我在官网下载的文件名是 httpd-2.0.65-win32-x86-openssl-0.9.8y.msi
下载地址:http://mirror.bit.edu.cn/apache//httpd/binaries/win32/httpd-2.0.65-win32-x86-openssl-0.9.8y.msi
- 生成服务器证书:(cmd下进入apache安装目录下的bin目录)
a. 生成服务器用的私钥文件 server.key
openssl genrsa -out server.key 1024
b. 生成未签署的server.csr
openssl req -new -out server.csr -key server.key -config ..\conf\openssl.cnf
注意:
1) Common Name必须和httpd.conf 中 ServerName必须一致,否则apache不能启动。其他字段可以为空
2) 之后所有的ServerName的值都要和这里填写的一样,否则证书验证不给通过。
- 签署服务器证书server.crt
a. 生成CA私钥
openssl genrsa -out ca.key 1024
b. 利用CA的私钥产生CA的自签署证书
openssl req -new -x509 -days 365 -key ca.key -out ca.crt -config ..\conf\openssl.cnf
以上签署证书仅仅做测试用,真正运行的时候,应该将CSR发送到一个CA返回真正的用书.
网上有些文档描述生成证书文件的过程比较繁琐,就是因为他们自己建立了一个CA中心证书,然后再签署server.csr.
用openssl x509 -noout -text -in server.crt可以查看证书的内容。证书实际上包含了Public Key.
c. CA为网站服务器签署证书
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ..\conf\openssl.cnf
- 正确放置生成的server.crt和server,key
在当前目录(bin目录下)创建demoCA,里面创建文件index.txt和serial以及文件夹newcerts,serial内容为01,index.txt为空.
- 配置httpd.conf
a. 配置VirtualHost标签 (在文件的末尾,默认是被注释掉的,打开即可)
<VirtualHost *:80>
ServerAdmin 邮件地址,随便写,但不能为空
DocumentRoot 根路径
ServerName 和之前生成证书时的CommonName字段一致
ErrorLog logs/dummy-test-error_log
CustomLog logs/dummy-test-access_log common
SSLEngine on
SSLCertificateFile server.crt的完整本地路径
SSLCertificateKeyFile server.key的完成本地路径
</VirtualHost>
ps. crt和key的文件路径可以自定义,只要前后保持一致就可以了
b. <Directory "根目录"> 同DocumentRoot 的值一致
c. 移除注释行
LoadModule ssl_module modules/mod_ssl.so
注意到ssl.conf的配置都在标签<IfDefine SSL>中,所以为了使IfDefine 指令有效,运行apache 的时候要加上 -D SSL 参数。
d. 启动服务器
apache -D SSL -k start (之后每次启动最好都使用命令行启动,否则会访问不了)
- 配置ssl.conf
DocumentRoot 目录和httpd.conf中的配置一致
ServerName 同上
- 安装证书到浏览器
在浏览器中访问https://(ip地址),浏览器还是会报连接错误,需要再将证书导入到浏览器的证书信任列表中,
操作步骤就是双击ca.crt,一步步按照提示完成即可
安装完成后重启服务器,重启浏览器,否则浏览器还是无法识别证书。
- 在iphone中用safiri打开https://ip,访问生成的ca.crt,安装在iphone上,然后访问之前的安装连接即可在线安装。
如果设备没有安装ca.crt,设备会拒绝访问https的地址,直接弹出提示框 无法连接到ip。