添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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: 我也搜到这篇文章了,作者说的忒不清楚了。 问题是因为docker中映射elasticsearch数据卷,对应外部目录权限不够导致的。 解决方案: 比如我的宿主机外部目录在/home/elasticsearch/xxx 那么宿主机中授权就行了:chmod -R 777 /home/elasticsearch/ -R会递归把目录下所有目录授权的。 Failed to encrypt the section connectionStrings using provider RsaProtectedConfigurationProvider IIS网站只能通过localhost访问,IP和主机名都不行 Tomcat shutdown port 8005这个端口可以关掉吗?