我试图让我们的Jira / Confluence部署在内部正确的证书。 人们以不同的方式访问它们,无论是从主机名还是FQDN。 我正在使用Java 7的keytool,所以我可以访问服务器备用名称function:
-ext san=dns:jira
我递给他…
jira.example.com
作为CN生成证书时。 然后我生成一个签名请求,将CSR交给我们的Win2k8r2 PKI以获得certreq以获得密钥签名并将密钥导回到密钥存储区。
现在,当我在浏览器(Chrome,Firefox,Safari)上面提到的设置时,似乎认为jira是唯一有效的名称,即使在我检查证书时CN也显示FQDN。
如果我删除了ext ,它将使用CN是FQDN。
当我有多个ext语句时,它只是使用最后一个,我试图在一个ext条目下连同多个标点符号串起多个DNS:foo 。
另一个angular度是我设置networking服务器做一个301到FQDN。 我也很好,但是我坚持使用Tomcat,所以“切换到Apache / Nginx”不适用于我。 这似乎是我遇到过的唯一一个用Tomcat做这种事情的文档,但它已经3岁了,对我来说这是一天的结束。 他们有没有添加到Tomcat6的function?
我意识到这个问题是相当古老的,但对于任何人可能会觉得有用,我会提到什么对我有用:
-ext san=dns:jira,dns:jira.example.com 顺便说一句,你也可以添加IP地址,如果你喜欢。 我个人使用以下为我的开发电脑:
keytool -certreq ... -file server.csr -keystore server.keystore ... -ext san=dns:localhost,dns:myComputerName,ip:127.0.0.1,ip:::1
注意:我使用java8 keytool; 我希望这在java7 keytool中工作,但我没有testing过
使用OpenSSL生成多域证书,而不是使用keytool生成多域证书,然后将密钥和证书转换为Java Keystore以与Tomcat配合使用。 以下示例生成一个自签名证书,应该很容易适应“真实”证书。
按照以上链接中的指导生成一个openssl.cnf,然后运行这些命令:
# Generates a self-signed certificate + key, omit if you already have one openssl req -config openssl.cnf -x509 -days 3650 -newkey rsa:2048 \ -out self-signed-certificate.pem -keyout pub-sec-key.pem # Remove passphrase from key openssl rsa -in pub-sec-key.pem -out new.key # Generate PKCS12 keystore openssl pkcs12 -export -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES \ -export -in self-signed-certificate.pem -inkey new.key -name alias \ -out keystore.p12 # Convert PKCS12 to JKS keytool -importkeystore -destkeystore keystore.jks -deststoretype JKS \ -srcstoretype PKCS12 -srckeystore keystore.p12
在上面的例子中,注意别名的名字 。 这是你必须传递给tomcat的证书的名字。
为了完成,我将介绍如何使用SAN颁发证书可以与证书颁发机构一起工作:
SAN = email:copy ... [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName=${ENV::SAN} subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer
运行此命令以生成包含SAN的Key + CSR(未经testing):
SAN="DNS: domain1.example.com, DNS: domain2.example.com" openssl req \ -config /path/to/openssl.conf \ -subj "/C=XX/ST=XX/L=xxx/O=My Org/OU=My OU/CN=main.example.com" \ -newkey rsa:2048 -out file.csr -keyout out.key \ -infiles /path/to/csr/file.csr
运行此命令来发出证书:
SAN="DNS: domain1.example.com, DNS: domain2.example.com" openssl ca \ -config /path/to/openssl.conf -policy policy_anything \ -subj "/C=XX/ST=XX/L=xxx/O=My Org/OU=My OU/CN=main.example.com" \ -infiles /path/to/csr/file.csr