通过openssl命令制作自签名证书,配置源服务器服务器自签名证书,配置Apache反向代理服务器开启后端服务器https证书验证。
在另一篇关于配置Apache反向代理的文章中,介绍了通过https + IP + 端口转发到源服务器,当时是通过关闭后端服务器https证书验证实现的,这样不安全也不规范。本文就来介绍如果通过Apache openssl命令制作自签名证书,配置源服务器服务器自签名证书,配置Apache反向代理服务器开启后端服务器https证书验证。
Linux 使用命令 find / -name openssl
查找 openssl
命令位置,如果Linux系统自身安装了,会找到 /usr/bin/openssl
,我们可以直接使用openssl命令;若系统没有装openssl,但是Apache安装了openssl模块,可以找到 /opt/lampp/bin/openssl
,我们可以使用apache的openssl生成证书。
Windows 安装Apache的,可在Apache/bin目录下找到openssl.exe,也是可以使用openssl生成证书的。
生成证书的配置文件和bash脚本已打包,可直接下载运行gen.sh。下载解压后执行命令 ./gen.sh
或者 bash gen.sh
。对生成证书命令感兴趣的朋友,和windows环境生成证书的,请看本文后半段生成CA根证书 + 服务端证书(源服务器) + 客户端证书(反向代理服务器)的详细介绍和实现方法
Listen 80
后加上 Listen 8001
<VirtualHost _default_:8001>
ServerName 115.155.2.10
#此处省略其他配置,请自己添加
SSLEngine on
SSLCertificateFile "/opt/lampp/etc/ssl.crt/server.pem" #server公钥证书
SSLCertificateKeyFile "/opt/lampp/etc/ssl.key/server.key" #server私钥文件
SSLVerifyClient require #开启客户端证书验证
SSLCACertificateFile "/opt/lampp/etc/ssl.crt/ca.pem" #根证书,可以验证所有它颁发的客户端证书
</VirtualHost>
修改 httpd-ssl.conf 添加 SSLProxyCACertificateFile "conf/ssl.crt/root.crt"
,参考设置如下
<VirtualHost _default_:443>
ServerName www.bluepost.cn
ServerAlias bluepost.cn
SSLEngine on
SSLCertificateFile "conf/ssl.crt/bluepost.cn_public.crt"
SSLCertificateKeyFile "conf/ssl.key/bluepost.cn.key"
SSLCertificateChainFile "conf/ssl.crt/bluepost.cn_chain.crt"
SSLProxyEngine on
SSLProxyCACertificateFile "conf/ssl.crt/ca.pem" #自签名根证书,用于验证所有它颁发的自签名服务端和客户端证书
SSLProxyMachineCertificateFile "conf/ssl.crt/client_key_crt.pem" #开启客户端证书验证时需要
#设置代理通过IP和端口
ProxyPreserveHost on #打开host域名请求地址,如果使用代理,获取的请求地址是对外域名,如果off关闭,则获取的是内网ip地址请求
ProxyPass / https://115.155.2.10:8001/ #将IP地址改为国外服务器的IP
ProxyPassReverse / https://115.155.2.10:8001/
</VirtualHost>
直接用浏览器访问 https://115.155.2.10:8001/
,会报错 此网站出具的安全证书不是由受信任的证书颁发机构颁发的。
这时我们需要将生成的 ca.pem
证书导入到【受信任的根证书颁发机构】,如果开启了客户端证书验证,还需要将 proxy_client.p12
证书文件导入到 【个人】->【证书】中。
使用自签名的证书后,chrome报错此服务器无法证实它就是 115.155.2.10
它的安全证书没有指定主题备用名称。这可能是因为某项配置有误或某个攻击者拦截了您的连接。
错误码是 NET::ERR_CERT_COMMON_NAME_INVALID:
生成证书的时候没有加上备用名称字段,目前的浏览器校验证书都需要这个字段。
生成证书的时候需要添加上备用名称(subjectAltName)扩展字段。使用 openssl
生成crt证书时,需要配置 subjectAltName
参数,详细介绍见修改配置文件server-openssl.cnf文件 alt_names
。
浏览器直接通过端口访问正常,但是通过域名访问报错如下:
Proxy Error
The proxy server could not handle the request
Reason: Error during SSL Handshake with remote server
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
请检查生成源服务器证书时,有没有将域名和IP都加入备用名称(subjectAltName)扩展字段中,修改方法见修改配置文件server-openssl.cnf文件 alt_names
。
转载请注明:半亩方塘 » 制作Apache免费自签名SSL证书,配置Apache反向代理开启后端服务器https证书验证
页面: 1 2