Taw*_*awm 10 tomcat ssl-certificate fqdn jira keytool
我正在尝试获得适合我们内部 Jira/Confluence 部署的证书。人们通过主机名或 FQDN 以不同的方式访问它们。我正在使用 Java 7 的 keytool,因此我可以访问服务器备用名称功能:
-ext san=dns:jira
Run Code Online (Sandbox Code Playgroud)
……我把它交给……
jira.example.com
Run Code Online (Sandbox Code Playgroud)
...作为生成证书时的 CN。然后我生成一个签名请求,将 CSR 交给我们的 Win2k8r2 PKIcertreq
以获取密钥签名并将密钥导入回密钥库。
现在,当我按照上面所说的进行设置时,我的浏览器(Chrome、Firefox、Safari)似乎认为这jira
是唯一有效的名称,即使当我检查证书时 CN 显示 FQDN。
如果我删除ext
它,它将使用作为 FQDN 的 CN。
当我有多个ext
语句时,它只使用最后一个,并且我尝试DNS:foo
在一个ext
条目下将多个字符串与各种标点符号一起使用。
我遇到的另一个角度是设置 Web 服务器对 FQDN 执行 301。我对此也很好,但我坚持使用 Tomcat,所以“切换到 Apache/nginx”对我不起作用。这似乎是我遇到的唯一一个用 Tomcat 做类似事情的文档,但它已经 3 岁了,对我来说已经结束了。他们是否已将该功能添加到 Tomcat6?
小智 22
我意识到这个问题已经很老了,但对于任何可能觉得它有用的人,我会提到对我有用的方法:
-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
Run Code Online (Sandbox Code Playgroud)
注意:我使用 java8 keytool;我希望这也适用于 java7 keytool,但我还没有测试过
OpenSSL
使用和不使用生成多域证书,keytool
然后将密钥和证书转换为 Java 密钥库以与 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
Run Code Online (Sandbox Code Playgroud)
请注意上例中的别名值。-name
这是您必须传递到的证书的名称tomcat
。
为了完整起见,我将介绍如何与证书颁发机构一起使用 SAN 颁发证书:
SAN = email:copy
...
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=${ENV::SAN}
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
Run Code Online (Sandbox Code Playgroud)
运行此命令以生成包含 SAN 的密钥 + CSR(未经测试):
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
Run Code Online (Sandbox Code Playgroud)
运行此命令以颁发证书:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
36242 次 |
最近记录: |