导航

一、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.pemserver.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,成功打开页面。