经过大量搜索,我还没有找到有关此问题的文档。突然,可能是在软件更新之后(?),cURL 无法建立 SSL 连接,并出现以下错误:
curl: (35) error:0200100D:system library:fopen:Permission denied
使用 strace,我发现它正在尝试打开被拒绝的 SSL 证书:
open("/etc/ssl/certs/3c58f906.0", O_RDONLY|O_LARGEFILE) = -1 EACCES (权限被拒绝)
此证书是一个指向 AddTrust_External_Root.pem 的符号链接,而后者又是指向 /usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt 的符号链接。权限确实不允许我的用户访问它:
ls -l /usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt
-rw-r----- 1 root ssl-cert 1521 2011-09-01 18:48 /usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt
该文件无法供所有人读取可能是有原因的,但它阻止了 cURL 运行。有人知道原因吗?更重要的是,有安全可靠的解决方案吗?
答案1
没有理由认为这个文件不是所有人都可读的。它不是你系统独有的,并且包含在默认安装中:http://packages.ubuntu.com/lucid/all/ca-certificates/filelist
一般来说,我认为 /usr/share/ 下的任何内容都可能是全世界可读的(因为它在“share”下)。
现在真正的问题是,为什么这个文件在你的系统上不可读。很可能是一个错误。
答案2
嗯。在我的 Lucid 安装中它是可读的:
$ ls -l /usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt
-rw-r--r-- 1 root root 1521 2011-09-01 16:48 /usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt
您的安装似乎有问题,或者之前的管理员由于不明原因更改了所有权/权限。