我有多个服务器通过 webDAV 共享文件。所有服务器上的连接都使用 TLS 和相同的通配符证书进行保护。我有不同的子域指向各自的服务器。但是我无法让 davfs2 接受我的通配符证书,它一直在抱怨:/sbin/mount.davfs: the server certificate does not match the server name
所以例如我有:
服务器A.mydomain.com 服务器B.mydomain.com
都有涵盖 *.mydomain.com 的证书和 mydomain.com 的 SAN
如果我将 mydomain.com 用于 webDAV,当然一切正常,因为证书中明确涵盖了该内容。
我可以将我所有的子域作为 SAN 添加到证书中,但我无法在每次安装(或关闭)机器时都重新颁发证书。
那么有没有办法让 davfs2 接受通配符证书呢?
这个问题实际上与 webDAV 如何处理通配符无关,而是与 X509 证书扩展的处理方式有关。
事实证明,Subject Alternative Name 是用词不当,根据RFC 5280(第 4.2 节),应用程序必须拒绝任何它无法识别的扩展,如果它们被标记为关键(如果它们被标记为非关键,则可以被忽略),但如果应用程序识别扩展名,则必须使用它。
这意味着当 webDAV 遇到 SubjectAltName 时,它会根据服务器名称检查那个并且只检查那个。带有我的通配符的 Common Name 被完全忽略。主题备用名称不提供备用名称或附加名称,它必须提供所有标识名称。
从而将包括通配符在内的所有域名都放入SAN中。