我正在配置一个 Apache SSL 反向代理,以便从中间件调用后端服务器,我拥有该服务器的客户端证书和密钥。简而言之:
http https
middleware -----------> proxy -------------> backend
中间件甚至不知道后端服务器,这是反向代理的技巧。
我(我想我)能够操作代理,因为我收到了
AH02268:代理客户端证书回调:(localhost:80)下游服务器需要客户端证书但未配置,因此我理解代理正在尝试调用后端,但最后一个抱怨是代理没有将证书传递给他。
因此,我错过了正确配置证书的机会。据我所知,我必须编译 SSLCertificate * 和 SSLProxyMachineCertificate* 部分conf.d/modes-enabled/ssl.conf
。我尝试了这种方法
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLEngine off
SSLProxyEngine on
SSLProtocol all
# proxy
SSLProxyMachineCertificateFile /usr/local/etc/apache2/ssl.crt/certificate.pem
SSLProxyMachineCertificateChainFile /usr/local/etc/apache2/ssl.crt/chain.pem
SSLProxyCACertificateFile /usr/local/etc/apache2/ssl.crt/ca.pem
# certificate
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /usr/local/etc/apache2/ssl.crt/all.pem
SSLCertificateChainFile /usr/local/etc/apache2/ssl.crt/certificate.pem
# key
SSLCertificateKeyFile /usr/local/etc/apache2/ssl.key/server.key
SSLPassPhraseDialog exec:/usr/local/etc/apache2/pwf.sh
几点说明:
certificate.pem
是服务器证书。chain.pem
是证书的中间链,不包括边界。ca.pem
是根 CA 证书。server.key
是 RSA 私钥
我用 pwf.sh 脚本替换了输入密码的正常对话框模式,但我甚至无法启动 apache,因为我有此消息
AH02252:为 SSL 代理配置的客户端证书不完整(丢失或加密私钥?)[ssl:emerg] [pid 12484]
AH02312:初始化 mod_ssl 时发生致命错误,退出。AH00016:配置失败
现在我(遗憾地)读到,没有办法解决这个问题,因为正如 apache.org 网站所说,在所有 SSLProxyMachine* 指令下:
(目前不支持加密私钥)
我迷路了吗?
答案1
您自己已经意识到不支持加密私钥。如果您坚持使用加密私钥,那么您就输了。如果可以接受以纯文本提供私钥,请执行此操作。要将加密私钥转换为纯文本密钥,请使用(对于 RSA 密钥)
openssl rsa -in encrypted_key.pem -out decrypted_key.pem