nginx: [emerg] cannot load certificate SSL: error:0200100D:system library:fopen:Permission denied:fo
最新推荐文章于 2023-09-01 11:25:39 发布
最新推荐文章于 2023-09-01 11:25:39 发布
阅读量3.3w
换了SSL Cert之后,Nginx无法启动,发生如下错误。
nginx: [emerg] cannot load certificate “/etc/nginx/ssl/test.crt”: BIO_new_file() failed (SSL: error:0200100D:system library:fopen:Permission denied:fopen(’/etc/nginx/ssl/test.crt’,‘r’) error:2006D002:BIO routines:BIO_new_file:system lib)
-
确认使用
sudo
运行。
-
确认该文件可以
cat
打开。
-
确认文件权限与原Cert一致。
-
nginx -t
successful.
查了一下,原来是 SELinux 的问题。
SELinux
,即 Security Enhanced Linux,是一种基于委任式存取控制 (Mandatory Access Control, MAC)的权限控制系统,比通常所理解的用户自主式存取控制 (Discretionary Access Control, DAC)更严格。
DAC 主要根据程序的拥有者和文件的rwx权限来决定用户可以进行的操作,但 root 可以控制一切,777文件可以被任何人操作。
MAC 可以通过规则限定特定的程序只能操作指定的文件,这样就算是 root 运行的程序,也不能随意访问其他不相关的文件了。
SELinux
默认使用
targeted
模式。
getenforce
sestatus -v
检查 Audit log 可以发现,文件不能访问的原因,是程序与目标文件的 scontext
(Security Context) 不一致。
Nginx 使用的是httpd_t
,自己copy的文件使用的是user_home_t
。
导致这个问题的操作是,先在 home
下创建了文件,然后再 mv
到当前目录,而 scontext
不会因复制移动而修改。
$ sudo ausearch -m avc -ts today
time->Thu Apr 9 12:00:42 2020
type=PROCTITLE msg=audit(1586404842.411:635786): proctitle=2F7573722F7362696E2F6E67696E78002D63002F6574632F6E67696E782F6E67696E782E636F6E66
type=SYSCALL msg=audit(1586404842.411:635786): arch=c000003e syscall=2 success=no exit=-13 a0=55ba2565c54d a1=0 a2=1b6 a3=24 items=0 ppid=1 pid=65228 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1586404842.411:635786): avc: denied { read } for pid=65228 comm="nginx" name="test.crt" dev="dm-0" ino=136402657 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
查看测试 Cert 与原来版本的区别。
$ sudo ls -lrtZ /etc/nginx/ssl
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 origin.crt
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 origin.key
-rw-r--r--. root root unconfined_u:object_r:user_home_t:s0 test.crt
-rw-r--r--. root root unconfined_u:object_r:user_home_t:s0 test.key
使用 restorecon
让文件恢复正确的 SELinux type。
$ sudo restorecon -v -R /etc/nginx/ssl/test.*
restorecon reset /etc/nginx/ssl/test.crt context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_config_t:s0
restorecon reset /etc/nginx/ssl/test.key context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_config_t:s0
$ sudo ls -lrtZ /etc/nginx/ssl
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 origin.crt
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 origin.key
-rw-r--r--. root root unconfined_u:object_r:httpd_config_t:s0 test.crt
-rw-r--r--. root root unconfined_u:object_r:httpd_config_t:s0 test.key
可以使用 semanage
查询和修改默认的目录安全性本文,此即restorecon
恢复的所谓正确 SELinux type 的来源。
$ sudo semanage fcontext -l|grep etc/nginx
/etc/nginx(/.*)? all files system_u:object_r:httpd_config_t:s0
重启 Nginx , 成功!
nginx: [emerg] cannot load certificate SSL: error:0200100D:system library:fopen:Permission denied:fo
换了SSL Cert之后,Nginx无法启动,发生如下错误。nginx: [emerg] cannot load certificate “/etc/nginx/ssl/test.crt”: BIO_new_file() failed (SSL: error:0200100D:system library:fopen:Permission denied:fopen(’/etc/nginx/ss...
将证书文件和私钥文件上传到Nginx服务器的证书目录(/usr/local/nginx/conf/cert)
编辑Nginx配置文件nginx.conf,修改与证书相关的配置
按i键进入编辑模式
在nginx.conf中找到到server属性配置,把前面#删除
修改内容如下:
配置HTTP请求自动跳转HTTPS
然后重启Nginx服务器就可以了重启如果出现错误:
nginx: [emerg] cannot load certificate "C:/ssl/1_flyrun.work_bundle.crt": BIO_ne
w_file() failed (SSL: error:02001003:system library:fopen:No such process:fopen(
'C:/ssl/1_flyrun.work_bundle.crt','r') error:2006D080:BIO routines:B
nginx 配置 ssl 后无法访问 nginx: [emerg] cannot load certificate “*”: BIO_new_file() failed
# 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。
server {
listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
server_name localhost; #将localhost修改为您证书绑定的域名,例如:ww...
将相应模块安装回来即可。
$ sudo nginx -s reload
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:38
$ sudo nginx -V
nginx vers...
根据引用和引用的信息,nginx报错"cannot load certificate"是因为它无法找到指定的证书文件。根据引用中的配置,将证书部署在/etc/ssl/certs目录下即可。所以,证书应该放置在"/etc/ssl/certs"目录下,而不是"/usr/local/nginx/ssl.key"文件中。请将证书文件移动到正确的位置,然后重新启动nginx服务。123
#### 引用[.reference_title]
- *1* *2* [cannot load certificate “/usr/local/nginx/ssl/*.pem“: BIO_new_file() failed](https://blog.csdn.net/weixin_49807584/article/details/128160629)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item]
- *3* [Nginx配置证书报错nginx: [emerg] cannot load certificate “../software/nginx/zhifu.pem“: BIO_new_...](https://blog.csdn.net/weixin_52998454/article/details/129087837)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item]
[ .reference_list ]
nginx: [emerg] cannot load certificate SSL: error:0200100D:system library:fopen:Permission denied:fo
32989
nginx: [emerg] cannot load certificate SSL: error:0200100D:system library:fopen:Permission denied:fo
我在学渗透:
nginx: [emerg] cannot load certificate SSL: error:0200100D:system library:fopen:Permission denied:fo
cmmpp:
nginx: [emerg] cannot load certificate SSL: error:0200100D:system library:fopen:Permission denied:fo
ELK - Elasticsearch启动不了: Could not create the Java Virtual Machine
tiancao222:
Failed to encrypt the section connectionStrings using provider RsaProtectedConfigurationProvider
IIS网站只能通过localhost访问,IP和主机名都不行
Tomcat shutdown port 8005这个端口可以关掉吗?