我的服务器仅通过 HTTPS 提供 WebDAV,以便其他计算机可以访问 DAV。假设证书是为 颁发的www.myserver.com
,WebDAV 位于https://www.myserver.com/webdav
。
由于种种原因,我也想让服务器本身挂载这个目录。由于使用实际的 URL 并在整个互联网上进行路由是没有意义的,所以我只是采取了一种捷径:
mount https://localhost/webdav
但现在我遇到一个问题:
/sbin/mount.davfs: the server certificate does not match the server name
这是有道理的。正如 的开发者所解释的davfs
,我获得的证书是 的,www.myserver.com
但它是由 提供的127.0.0.1
,所以当然不匹配。
我想在启动时自动挂载此卷。想必这行不通,因为每次启动时它都会等待有人回答“是/否”以接受证书。如何让 davfs 忽略此 URL 或此证书的此问题?
答案1
您可以通过编辑该文件来解决该问题/etc/hosts
。只需将 localhost 定义的行更改为类似以下内容:
127.0.0.1 www.myserver.com all_other_aliases localhost
使用ping
它来检查:
$ ping www.myserver.com
PING www.myserver.com (127.0.0.1) 56(84) bytes of data.
64 bytes from www.myserver.com (127.0.0.1): icmp_req=1 ttl=64 time=0.013 ms
...
现在,安装期间认证检查的名称查找应该正确解析。
答案2
您的证书中可以有多个主机名和 IP,这些称为主题备用名称。CACert 建议始终执行此操作,即使是一个名称。
不幸的是,创建它们有点棘手,并且需要openssl.conf
动态更改。根据我的笔记整理,生成新的证书签名请求的过程如下:
openssl req -sha256 -key your-private-key.pem -out your-csr.pem \
-subject "(your subject)" \
-config <(/bin/cat /etc/pki/tls/openssl.cnf ./myhosts.cfg) \
-reqexts hostnames
哪里myhosts.cfg
有这样的内容:
[ hostnames ]
subjectAltName = \
DNS:www.myserver.com,\
DNS:localhost,\
IP:127.0.0.1
标准 openssl 配置位于/etc/pki/tls/openssl.cnf
RedHat/CentO 上,也可能位于其他发行版的其他地方。我从来没有真正为IP做过这件事,但是OpenSSL 文档建议这应该是可能的。
如果您想切换到正确签名的证书,您可能会发现某些 CA 可能拒绝为私有子网 IP 颁发证书。
答案3
我有同样的问题。我的解决方案很简单:
echo y | mount -t davfs https://localhost/<URL details> <mount point>
也许不漂亮,但很有魅力(<...>
用您的详细信息替换代码)。然后我将此命令添加到我的/etc/rc.local
(Ubuntu)中,它会在每次启动时自动安装。到目前为止工作没有问题。