我需要生成带有 SAN URI 的 TLS 证书,其中 URI 有一个片段(有一个哈希“#”)。但是当我尝试使用 openssl 生成证书时,该片段被删除。
# generate key and CSR for client certificate
openssl req -nodes -new -keyout me.key -out me.csr -subj "/O=Acme/CN=me"
# sign cert
openssl x509 -req -in me.csr -CA My-CA.crt -CAkey My-CA.key -set_serial 01 -out me.crt -extfile <(echo 'subjectAltName=URI:https://my.example/profile#me')
# verify result
openssl x509 -text -noout -in me.crt
# X509v3 extensions:
# X509v3 Subject Alternative Name:
# URI:https://my.example/profile
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的方法来转义该值,但似乎没有任何效果符合预期。我认为转义可能适用于 Common Name 等字段,但不适用于 SAN 部分。
我对 openssl 替代品持开放态度。但如果我能看到一个概念验证证书,我可以用它来验证它是否有效,这将会很有帮助。
注意:这本质上是 WebID-TLS 的要求 ( https://www.w3.org/2005/Incubator/webid/spec/tls/#dfn-webid_certificate …