一、SSL/TLS 基础
TLS:传输层安全协议
SSL:安全套接字层
KEY:私钥
CSR:证书签名请求,即公钥,生成证书时需要将此提交给证书机构,生成 X509 数字证书前,一般先由用户提交证书申请文件,然后由 CA 来签发证书
CRT:即证书,一般服务器证书server.crt和客户端证书client.crt都需要通过CA证书ca.crt进行签名
X.509:证书格式,一般以.crt结尾
OpenSSL:SSL的一个实现,(开源)
二、生成服务器证书
1、创建自签凭证
进入cmd,进入apache的bin目录下
cd d:/phpStudy/Apache/bin
而后指定ssl配置文件目录
set OPENSSL_CONF=d:\phpStudy\Apache\conf\openssl.cnf
2、生成证书
openssl req -config openssl.cnf -new -out server.csr
或者不用配置ssl目录,直接指定openssl.cnf文件路径
openssl req -new -out server.csr -config ../conf/openssl.cnf
回车确认之后,会弹出一些问题,一一回答就好。
下面是个示例,首先会让设定一个密码,之后再输入一遍以确认密码,这个密码设定好要记住。
之后的Country Name等内容,自己看着填,Common Name这里提示可以填全域名(FQDN:以http://开头的域名全称)或你的名字,因为我是在本机测试,所以只填了http://127.0.0.1
再后面的extra问题就自己看着随便填了。
此时,bin
目录下,成功生成 privkey.pem,server.csr2个文件。
3、生成私钥
openssl rsa -in privkey.pem -out server.key
此时会被要求输入之前设定的密码,输完确认后,在bin目录下会生成server.key文件。
4、创建证书 server.crt
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365
此步将会在bin目录下生成server.crt文件。
将server.key, server.crt拷贝到d:/phpStudy/Apache/conf目录下
三、开启Apache的SSL功能
1、打开httpd.conf,我的在d:\phpStudy\Apache\conf\目录下。
移去下面两行前面的注释,并保存
- #LoadModule ssl_module modules/mod_ssl.so
- #Include conf/extra/httpd-ssl.conf
打开httpd-ssl.conf文件,我的在d:\phpStudy\Apache\extra\目录下。
修改
SSLCertificateFile"D:/phpStudy/Apache/conf/server.crt"
SSLCertificateKeyFile"D:/phpStudy/Apache/conf/server.key"
将标签下的DocumentRoot,ServerName等设定为自己需要的内容。
2、启动httpd
出现以下错误:
D:\phpStudy\Apache\bin>httpd -X (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 : AH00072: make_sock: could not bi nd to address [::]:443 (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 : AH00072: make_sock: could not bi nd to address 0.0.0.0:443 AH00451: no listening sockets available, shutting down AH00015: Unable to open logs
修改httpd_ssl.conf,将端口号改为442
Listen 442
再重新启动httpd,启动成功。
此时的证书还是无法使用,点开server.crt,我们可以看到:
将server的证书添加到受信任的根证书颁发机构,在开始运行中输入certmgr.msc,在受信任的根证书颁发机构导入server.crt,这样再次查看证书路径信息就会变为:
输入https://127.0.0.1:442,成功打开页面。