教程-带加密的Java密钥存储(JKS)

2025-07-08 14:45:02 6
  • 收藏
  • 管理

    大家好,大家好

    我已经有一段时间没有写这些东西了。

    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

    上一页:教程-构建您自己的证书透明日志分析器 下一页:教程-在Ubuntu 1610上使用ApacheWeb服务器的Certbot Cloudflare DNS
    全部评论(0)