CA 签名的 X509 证书包含两次 X509v3 扩展 "Subject Alternative Name"

CA signed X509 cert contains X509v3 extension "Subject Alternative Name" twice

如果我使用 OpenSSL 创建 X509 证书,该证书使用 CA 证书签名并包含 X509v3 SAN(主题备用名称)扩展,则生成的证书包含两次 SAN 扩展,而如果证书是自签名的SAN 扩展只出现一次(我认为这是正确的)。

重现步骤:

$ openssl version
OpenSSL 1.0.2n  7 Dec 2017
$ openssl genrsa -out example.key 2048
$ openssl req -new -key example.key -out example.csr
# ... confirm certificate defaults only enter "example.com" as Common Name
$ echo subjectAltName=DNS:example.com,DNS:www.example.com > example.cnf
$ openssl x509 -req -sha256 -days 7300 -text -extfile example.cnf \
  -in example.csr -signkey example.key \
  -CA ../ca.crt -CAkey ../ca.key -set_serial 01 \
  -out example.crt

之后,如果我检查证书,"X509v3 Subject Alternative Name" 部分会打印两次:

$ openssl x509 -in example.crt -text -noout
...
        X509v3 extensions:
            X509v3 Subject Alternative Name: 
                DNS:example.com, DNS:www.example.com
            X509v3 Subject Alternative Name: 
                DNS:example.com, DNS:www.example.com
...

如果不使用 CA 并且证书通过以下方式自签名,则情况并非如此:

$ openssl x509 -req -sha256 -days 7300 -text -extfile example.cnf \
  -in example.csr -signkey example.key \
  -out example.crt

我可以用 OpenSSL 1.0.2nOpenSSL 0.9.8zh 来验证这个行为。

这是 OpenSSL 错误还是对此有任何有效的解释?

见@dave_thompson_085的回答:
同时使用 -signkey-CAkey 没有任何意义并会触发这种奇怪的副作用。