技术解析

centos7 systemctl 启动 nginx 时不请求 pem 的 passphrase?
0
2021-05-26 15:00:38
idczone
Jun 25 22:32:17 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Jun 25 22:32:17 nginx[32654]: Enter PEM pass phrase:
Jun 25 22:32:17 nginx[32654]: nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/ssl/certs/xxx.ke...M lib)
Jun 25 22:32:17 nginx[32654]: nginx: configuration file /etc/nginx/nginx.conf test failed
Jun 25 22:32:17 systemd[1]: nginx.service: control process exit大带宽服务器ed, code=exited status=1
Jun 25 22:32:17 systemd[1]: Failed to start The nginx HTTP and reverse proxy server.
Jun 25 22:32:17 systemd[1]: Unit nginx.service entered failed state.

为什么要设置 passphrase 呢?你打算在它每次重启的时候登录过去输密码?

服务器私钥加密码并卵
要是真能黑到私钥文件,黑不到配置文件?
私钥密码就是只是给人用的

这是怕nginx突然有一天叛变了带着楼主的私钥私奔了,所以果断套上×××以防××。




黑到配置文件也没用吧 我又没在配置文件里写明
问题是centos6时代用的service就可以正常地向我请求passphrase 为什么systemctl就不行了呢

你想的太简单了
黑进你的服务器还有什么干不了?
装个钩子或者替换systemctl,然后等你重启服务就行了

因为 systemd 不是 initscripts 呗。systemctl 是通过 D-Bus 告诉 systemd 要启动那个服务的,服务进程和你执行命令的终端没有关系。
网上有个补丁,但是没有被接受: http://mailman.nginx.org/pipermail/nginx/2014-April/043281.html
如上边那些邮件里说的,这样根本防不了被黑,除非黑你的人懒或者根本不懂;它只会给你「更安全」的错觉。因为即使你是人工登陆上去输入密码的,nginx 会去解密私钥并保存在内存中。攻击者只要去 nginx 内存里找就可以了。既然能拿到你的加密过的私钥,那么说明攻击者有 root 权限。既然TA有 root 权限,那么取得进程的内存完全没问题。
你还记得 heartbleed 吗?不过是泄漏了一点点 nginx 的内存,也有人成功地取得了私钥: https://blog.cloudflare.com/the-results-of-the-cloudflare-challenge/

数据地带为您的网站提供全球顶级IDC资源