大家好,大家好
我已经有一段时间没有写这些东西了。
JK给人们带来了一些头痛,所以我想我应该写一本关于这方面的指南
A)谈论JKS、密钥工具和密钥库资源管理器
B)使用RSA 2048密钥(SIMPLE-CERT)创建一个jks-letscrypt.jks
C)添加第二个RSA 4096密钥-(SAN-CERT)
D)为Simple-Cert创建CSR,为SAN-Cert创建CSR
E)Certbot的全面挑战
F)将证书添加到密钥库并验证
G)添加到Tomacat 8.x并验证证书和JKS功能
H)将标准certbot制品转换为JKS(感谢@sahsanu)
I)使用Bash和OpenSSL创建JKS文件
J)使用pyjk创建带有钩子的JKS文件
K)处理中间体和根部--备选方案和基础工作
希望这能有所帮助,澄清一些事情。
Andrei,谈谈JKS、KeyTool和KeyStore Explorer
JKS作为一种格式很棘手,因为没有证书密钥就不能存在。这可能会令人困惑,但处理起来相当简单。
JK还可以有多个密钥和证书,这些密钥和证书称为密钥对。
KeyTool是一个用于处理JKS的Java命令行实用程序,可在Java开发工具包(JDK)或Java运行时环境(JRE)中使用。首要任务是确认密钥工具是否可用。
KeyTool的有用参考:
数字海洋
Java KeyTool Essentials:使用Java密钥存储|DigitalOcean
Java密钥工具是用于操作Java密钥库的密钥和证书管理工具,包含在Java中。Java密钥库是授权证书或公钥证书的容器,通常由基于Java的.
密钥库资源管理器是另一个非常适合使用密钥库的工具。可以在此处下载:http://keystore-explorer.org/,使用RSA2048密钥创建一个jks-letscrypt.jks
从头开始创建JKS在生成证书时增加了几个优点,因为它可以为我们简化事情。
如前所述,密钥必须具有与其相关联的证书,因此我们必须在生成密钥时提供域名。
我们将使用以下参数创建JKS
密钥库名称:letscrypt.jks
密钥库密码:test12345
密钥名称(别名):Simple-Cert
域名:jks-Simple-cert.firecube.xyz
Web私钥:RSA 2048
要运行的命令:
KEYTOOL-genkeypair-alias Simple-cert-keyalg RSA-KEYSIZE 2048-KEYSTORE letscrypt.jks-DNAME“CN=jks-Simple-cert.firecube.xyz”-store pass est12345
Image.png972×63 2.65 KB
让我们拥有我们刚刚创建的JK的可视(密钥库资源管理器)表示:
图像.png693×179 23 KB
Image.png709×194 23.5KB
Image.png1243×275 46.8 KB,添加第二个RSA 4096密钥-(SAN-cert)
我们现在将向JKS添加第二个密钥。
注意:这不是大多数安装所必需的步骤,但是要完全理解JKS功能和别名的用途,最好有两个密钥(并在tomcat配置中引用它们)
命令:
KEYTOOL-genkeypair-alias SAN-cert-keyalg RSA-KEYSIZE 4096-KEYSTORE letsENCRYPTT.jks-DNAME“CN=jks-San-cert.firecube.xyz”-store pass est12345
Image.png963×79 2.99 KB
Image.png730×194 26.5 KB,为Simple-Cert创建一个CSR,为SAN-Cert创建一个CSR
像大多数进程(例如OpenSSL)一样,我们从私钥生成CSR。
在JK的情况下,我们将使用JK中的现有密钥来创建两个CSR。
查看工具帮助,我们可以看到各种选项
没有介绍的一个选项是-ext选项,它允许我们拥有X509 V3扩展(特别是SAN)
CSR:
我们将创建的第一个CSR将具有以下参数
域名:jks-Simple-cert.firecube.xyz
SAN名称:JKS-Simple-cert.firecube.xyz
密钥名称(别名):Simple-Cert
命令:
密钥工具-certreq-alias Simple-cert-keystore letscrypt.jks-file jks-Simple-cert_firecube_xyz.csr-store pass est12345-ext SAN=dns:jks-Simple-cert.firecube.xyz
Image.png712×233 24.6KB
Image.png864×634 46.2 KB
我们将创建的第二个CSR将具有以下参数
域名:jks-San-cert.firecube.xyz
SAN名称:jks-San-cert.firecube.xyz、jks-San-cert1.firecube.xyz、jks-San-cert2.firecube.xyz
密钥名称(别名):San-cert
命令:
注意:Windows需要引号,Linux可能不需要
KEYTOOL-certreq-alias San-cert-keystore letscrypt.jks-file jks-San-cert_firecube_xyz.csr-store pass est12345-ext“San=dns:jks-San-cert.firecube.xyz,dns:jks-San-cert1.firecube.xyz,dns:jks-San-cert2.firecube.xyz”
Image.png965×62 2.21 KB
Image.png826×582 39 KB,使用Certbot完成挑战
我们将使用手动插件处理上面创建的DNS挑战和CSR
我使用的是虚拟环境(Certbot-Products for This)
注意:学习和练习时应使用--STAGE标志。一旦您可以可靠地从暂存颁发机构颁发证书并删除--暂存并获得生产证书。
Jks的CSR-Simple-cert.firecube.xyz
命令:
CERTBOT证书--手动--CSR D:\LETSENCRYPT\JAVA-KEY-TOOL\jks-simple-cert_firecube_xyz.csr--首选--挑战“域名系统”
Image.png699×276 10.7KB
Jks的CSR-Simple-cert.firecube.xyz
命令:
CERTBOT证书--手动--CSR D:\LETSENCRYPT\JAVA-KEY-TOOL\jks-san-cert_firecube_xyz.csr--首选--挑战“域名系统”
我按照证书的内容重命名了证书(仅证书和带有中间体的证书),将证书添加到密钥库并进行验证
添加证书的关键是将它们与密钥相关联
命令:
KEYTOOL-IMPORT-ALIAS SIMPLE-CERT-KEYSTORE letsENCRYt.jks-store pass est12345-file.\jks-Simple-cert-with-chain.erc.
KEYTOOL-IMPORT-ALIAS SAN-CERT-KEYSTORE letsENCRY.JKS-STOREPASS Test12345-FILE.\jks-San-cert-with-chain.erc.
您可能会收到这样的消息
您可以选择YES以强制密钥工具接受证书,但是也可以使用不同的方法来处理此错误
我们可以下载We‘s Encrypt X3 Intermediate并使用以下命令将其添加到存储中
KEYTOOL-IMPORT-trustcacerts-alias le_intermediate-file.\LE_INDIRED_X3_IDENT.erc.-keystore。\letsEncrypt.jks-store pass est12345
如果我们再次运行这些命令,我们将不会收到警告,因为中间层位于密钥库中。
注意:即使中间证书在证书文件中,密钥库也不信任它们,直到中间证书在存储中。
Image.png968×102 4.67 KB
让我们使用密钥库资源管理器来看看JK
Image.png708×238 34.4 KB
简单-证书
Image.png1270×574110KB
SAN-Cert
Image.png1258×564 99.3 KB
正如我们所看到的,证书与私钥相关联。
下面是使用相同JK的两个端口以及端口(8443和8444)的不同别名的示例配置。这是JKS文件的优点之一。
您还可以将历史证书存储在JKS.Image.png927×242 11.2 KB中
确认书:
Web浏览器:
图像.png1322×615 95.5 KB
Image.png1406×569 110 KB
OpenSSL:做得很好,值得一试。将标准certbot构件转换为JKS
一旦确定了正确的证书,就需要使用新的密钥和证书重新创建密钥库。
0.-创建一个目录来存储您的密钥库,我使用的是/etc/tomcat8/keystore/对于这个例子,您应该使用您想要的路径。
Mkdir-p/etc/tomcat8/keystore/
1.-创建一个pkcs12存储(用您想要的密码更改HERETHEPASSWORD):
Openssl pkcs12-/etc/letsencrypt/live/gpsowl.com/fullchain.pem-in导出密钥/等/letsENCRYPT/LIVE/gpsowl.com/Prikey.pem-out/etc/tomcat8/keystore/gpsowl.com.p12-密码密码:HERETHEPASSWORD
2.-将pkcs12存储导入密钥库(使用前一个命令中使用的密码更改HERETHEPASSWORD):
KeyTool-Importkeystore-srckeystore/etc/tomcat8/keystore/gpsowl.com.p12-srcstorretype pkcs12-srcstore Pass HERETHEPASSWORD-destkeystore/etc/tomcat8/keystore/gpsowl.com.keystore-eststore键入jks-deststore Pass HERETHEPASSWORD
3.-配置您的Tomcat以使用正确的密钥库并传递:
4.-重新启动或重新加载Tomcat.,使用Bash和OpenSSL创建JKS文件
感谢@DarkSupremo和@ opium提供的剧本和本文中的工作:
允许加密到Java和Glassfish服务器
我...
另一个剧本:
使用Tomcat 6.x和7.x服务器配置Let ' s Protect
B...
Andrei