检查
- 在配置SSL之前需检查Apache是否是SSL版本。检查的方法:查看Apache安装目录的bin目录下是否含有
openssl.exe
(该程序用于生成SSL密钥和证书),modules目录下是否含有mod_ssl.so
。
如果没有则说明该Apache不是SSL版本,需要重新安装Apache-SSL版本。(最主要的是mod_ssl.so
,如果没有openssl.exe
可以直接安装OpenSSL软件)
概念(参考自此文章)
- TLS:传输层安全协议 Transport Layer Security的缩写
- SSL:安全套接字层 Secure Socket Layer的缩写
- KEY:通常指私钥。
- CSR:Certificate Signing Request的缩写,即证书签名请求,这不是证书,可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构。
- CRT(或CER):certificate的缩写,即证书。其中,CER是CRT证书的微软型式,通常而言,.cer文件是二进制数据,而.crt文件包含的是ASCII数据。cer文件包含依据DER(Distinguished Encoding Rules)规则编码的证书数据,这是x.690标准中指定的编码格式。X.509是一个最基本的公钥格式标准,里面规定了证书需要包含的各种信息。通常我们提到的证书,都是这个格式的,里面包含了公钥、发布者的数字签名、有效期等内容。要强调的是,crt(或crt)文件只里面是不包含私钥的。
- PFX:pfx数字证书既包含有公钥又包含私钥。
- X.509 是一种证书格式.对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。X.509的证书文件,一般以.crt结尾,根据该文件的内容编码格式,可以分为以下二种格式:
- PEM - Privacy Enhanced Mail,打开看文本格式,以"-----BEGIN…"开头, "-----END…"结尾,内容是BASE64编码.Apache和* NIX服务器偏向于使用这种编码格式.
- DER - Distinguished Encoding Rules,打开看是二进制格式,不可读.Java和Windows服务器偏向于使用这种编码格式
证书生成
- 安装完成后以管理员打开命令提示符并进入bin目录,下表为生成证书请求所需的执行命令。注意,如果仅仅到“生成crt证书”(第三步)是不够的,此时进入Internet选项会发现系统可以导入证书但是在证书框内没有显示,这是因为crt证书没有整合私钥,所以需要将crt和key文件合并为一个文件pfx。
序 | 命令 | 解释 |
---|---|---|
1 | openssl genrsa -out server.key 2048 | 目的:申请私钥,获得.key 2048 指密钥空间长度为2048位。 |
2 | openssl req -new -key server.key -out server.csr | 目的:获得公钥.csr 1. openssl :使用openssl.exe 2. req -new :请求request一个私钥和公钥3. -key server.key :私钥的输出位置及文件名4. -out server.csr :公钥的输出位置及文件名5.执行成功后提示要输入相关信息。 填写说明详见此文第六步 |
3 | openssl req -x509 -days 365 -key server.key -in server.csr > server.crt | 目的:生成CA证书并由此为自己颁发CRT证书 1. openssl :使用openssl.exe 2. req -x509 :请求request一个x509格式的证书(X.509格式的证书,一般以.crt结尾) 3. -days 365 :设置证书有效期为一年4. -key server.key :私钥的位置及文件名5. -in server.csr :公钥的位置及文件名6. > server.crt :证书输出位置及文件名 |
4 | openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt | 目的:私钥和公钥合并为pfx证书(便于导入证书) 此处需要设置一个密码<也就是口令> 用于从pfx文件中导出私钥时的验证,这个密码就是对私钥再次加密,这样就保证了私钥的安全,别人即使拿到了你的证书备份(pfx),不知道加密私钥的密码,也是无法导入证书的。其中原因是:RSA的私匙是很长的一个数字,用户不可能将它记住,PGP的办法是让用户为随机生成的RSA私匙指定一个口令(passphase),只有通过给出口令才能将私匙释放出来使用。 |
证书安装
- 打开Apache安装目录下conf目录中的httpd.conf文件,将以下两项去掉注释后保存退出。
# LoadModule ssl_module modules/mod_ssl.so
# Include conf/extra/httpd-ssl.conf
- 打开Apache安装目录下conf/extra目录中的httpd_ssl.conf文件,找到
SSLCertificateFile
和SSLCertificateKeyFile
这两个配置项,证书(.crt)和私钥(.key)文件。注意不需要配置公钥文件。
配置虚拟主机目录:
- SSL模式下,虚拟主机需要在httpd-ssl.conf中配置
- 若配置的主机是基于域名的,需记得加上NameVirtualHost。
- 将
SSLMutex "file:C:/Program Files/Apache Software Foundation/Apache2.2/logs/ssl_mutex"
换成SSLMutex default
- 将
DocumentRoot
换成网页所在位置 - 将
ServerName www.example.com:443
改成自己的主机域名,如:ServerName www.A-ExampleDance.com:443
- 添加
<Directory>
项及其内容 - 注释掉
ErrorLog
和TransferLog
- 注释掉
<FilesMatch "\.(cgi|shtml|phtml|php)$">
和其后紧跟的“原装”<Directory>
- 保存退出并重启Apache。
其它注意事项
- 访问时需要在地址栏添加上
https://
协议标识,否则会走hosts文件的DNS这条路,直接跳到http的localhost:80去。