使用“ openssl验证”验证证书链时,根据指定了-CAfile还是-CApath,我看到两种不同的行为。使用-CAfile,文件必须包含链中的所有证书,包括自签名根。使用-CApath时,该目录仅需要包含要验证的证书的颁发者;根证书不需要存在。
使用-CAfile:
$ ls -laR
.:
total 16
drwxr-xr-x. 3 tomiii tomiii 4096 Aug 10 12:27 .
drwx------. 62 tomiii tomiii 4096 Aug 10 11:23 ..
drwxr-xr-x. 2 tomiii tomiii 4096 Aug 10 12:27 trusted
-rw-r--r--. 1 tomiii tomiii 1753 Aug 10 12:27 untrusted.pem
./trusted:
total 16
drwxr-xr-x. 2 tomiii tomiii 4096 Aug 10 12:27 .
drwxr-xr-x. 3 tomiii tomiii 4096 Aug 10 12:27 ..
lrwxrwxrwx. 1 tomiii tomiii 16 Aug 10 12:27 05751b17.0 -> intermediate.pem
lrwxrwxrwx. 1 tomiii tomiii 8 Aug 10 12:27 b204d74a.0 -> root.pem
-rw-r--r--. 1 tomiii tomiii 1915 Aug 10 12:26 intermediate.pem
-rw-r--r--. 1 tomiii tomiii 1732 Aug 10 12:26 root.pem
$ openssl verify -CAfile trusted/intermediate.pem untrusted.pem
untrusted.pem: C = US, O = Symantec Corporation, OU = Symantec Trust Network, CN = Symantec Class 3 SHA256 Code Signing CA
error 2 at 1 depth lookup:unable to get issuer certificate
$ openssl verify -CAfile <(cat trusted/*) untrusted.pem
untrusted.pem: OK
使用-CApath:
$ rm trusted/b204d74a.0 trusted/root.pem
$ ls -laR
.:
total 16
drwxr-xr-x. 3 tomiii tomiii 4096 Aug 10 12:27 .
drwx------. 62 tomiii tomiii 4096 Aug 10 11:23 ..
drwxr-xr-x. 2 tomiii tomiii 4096 Aug 10 12:29 trusted
-rw-r--r--. 1 tomiii tomiii 1753 Aug 10 12:27 untrusted.pem
./trusted:
total 12
drwxr-xr-x. 2 tomiii tomiii 4096 Aug 10 12:29 .
drwxr-xr-x. 3 tomiii tomiii 4096 Aug 10 12:27 ..
lrwxrwxrwx. 1 tomiii tomiii 16 Aug 10 12:27 05751b17.0 -> intermediate.pem
-rw-r--r--. 1 tomiii tomiii 1915 Aug 10 12:26 intermediate.pem
$ openssl verify -CApath trusted untrusted.pem
untrusted.pem: OK
我无法在OpenSSL文档中找到任何内容来解释-CApath本身为何信任中间证书,而-CAfile确实具有相同的信任并需要根证书才能验证链。为什么会有所不同?