gpt4 book ai didi

java - 文件.keystore和CAKey.pem在SSL中的作用?

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:39 25 4
gpt4 key购买 nike

我成功地将HTTP上的Web应用程序从http接收。
实际上,我对在此过渡阶段遇到的两个文件的作用感到怀疑。我可以看到两个密钥文件,一个是.keystore,另一个是CAKey.pem。我特别想知道他们在什么时间拍摄的。在server.xml中,我找到属性keystoreFile(其值是密钥库的位置)和keystorePass(其值是我在生成.keystore文件期间输入的密码)的条目,而在ApplicationConfig.xml中,我找到两个属性,即openSSLLocation (相对于我能看到的openssl目录的值),第二个属性是密码(相对于我在生成CAKey.pem文件的过程中给定的密码值)。

是否想具体了解这些文件在SSL中包含哪些内容并发挥作用?

编辑我去了布鲁诺伸出的链接。我还通过了另一个信息链接,即http://www.verisign.com/ssl/ssl-information-center/how-ssl-security-works/。现在,通过两个链接,我的理解是kestore文件包含SSL证书的详细信息(如果我们使用像verisign这样的授权CA,它们将提供128位加密,而Java keytool命令证书可能无法提供默认密钥存储)。基于包含私钥的此证书,将进行加密。对?正如versign链接中指出的那样,最后还会发布数字签名作为确认。不确定证书是否具有链接中所指出的目的或认可?像CACert.pem,CAKey.pem这样的文件是否与数字证书相关?

编辑2

这是我遵循的SSL步骤

1)从http://www.slproweb.com/products/Win32OpenSSL.html下载Win32OpenSSL_Light-0_9_8t并安装

2)在OpenSSL安装目录中,创建private子目录。认证中心的私钥将存储在此处。
    在OpenSSL安装目录中,创建子目录newcerts。由CA签名的新证书将存储在此处。
    在OpenSSL安装目录中,创建一个名为index.txt的空文件。 OpenSSL将其签名证书数据库保留在该文件中。
    从OpenSSL安装目录的子目录bin / PEM / demoCA中,将文件序列复制到OpenSSL安装目录。打开复制的串行文件并将其编辑为00,然后保存。每个新的CA签名证书的序列号均取自该文件的内容,每次对证书进行签名时,序列号都会递增。

3)在openssl.cfg中进行以下更改
     dir = c:/ openssl <-这是OpenSSL安装目录
     证书= $ dir / private / cacert.pem
     #crl = $ dir / crl.pem

4)使用命令创建自签名证书
        cd / d“%OPENSSL_HOME%”
        openssl req -new -x509 -days 2000 -keyout private \ CAKey.pem -out private \ CACert.pem -config bin \ openssl.cnf

5)将证书PEM文件转换为DER编码的文件
  cd / d“%OPENSSL_HOME%”
 openssl x509 -in private \ CACert.pem -out private \ CACert.cer -outder DER
 此命令在专用子目录中创建文件CACert.cer。

6)修改Java根证书

cd%JAVA_HOME%
 keytool-导入-keystore jre \ lib \ security \ cacerts -alias AppOpenSSLCert-文件%OPENSSL_HOME%\ private \ cacert.cer

这会将我们的自签名CA证书添加到Java的受信任CA证书中,这些证书保存在Java JDK安装目录中的文件jre \ lib \ security \ cacerts中。
 我们的自签名CA证书存储在别名AppOpenSSLCert下。

根据文档,它应该已经有效(即我尝试使用https击中URL),但是它不起作用。为了使其正常工作,我必须再运行一个命令,即

7)
   C:\ Program Files \ Java \ jdk1.6.0_23> keytool -genkey -alias tomcat -keyalg RSA生成了.keystore文件和私钥)

最后,我在server.xml中进行了更改,并且它起作用了
     keystoreFile =“ c:/。keystore”
     keystorePass =“ changeit”

这就是为什么让我全神贯注的原因。如果我们使用第7步中生成的.keystore文件指向的证书,我从1到6(CAKey.pem和CACert.pem文件)执行的步骤的目的是什么。关于SSL我了解什么,我认为我不应该在server.xml中提及.keystore(在步骤7中生成),但是其他一些密钥库可能在步骤1-6期间某处生成,但是不确定文件名是什么以及在哪里生成?

verisign链接中的最后一个问题。它讨论了两个证书,即SSL证书和数字证书。 SSL证书和数字证书在上述情况下适合哪里?

最佳答案

从Java的角度来看,您首先应该尝试了解keystore and truststore之间的区别(两者都是用于不同目的的密钥库)。

JSSE中没有默认密钥库,但是默认情况下某些应用程序使用$HOME/.keystore:这是包含您的证书的证书,并且您具有私钥。

相反,信任库确定您愿意信任哪些远程证书。它包含许多CA证书,遇到新证书时可以建立证书路径。如果存在这样的路径(并且如果激活了该证书则不撤消证书),则此(先验)未知证书将被视为受信任。

听起来您所使用的过程包括创建自己的证书颁发机构,因此最终将获得一个CA证书文件及其私钥(很可能是该CAkey.pem文件)。这仅应用于与此CA颁发新证书。


  如果我们使用授权的CA(例如verisign),它们将提供128位加密
  这可能是由java keytool命令设置的默认密钥库
  证书没有)。


不是用来选择加密密钥大小的证书,而是密码套件。 (The era of SGC certificates is over。)

在SSL / TLS握手期间,服务器证书用于对服务器进行身份验证(以确保客户端正在与要与其通信的服务器通信)并协商一组共享的对称密钥(取决于密码套件):这些是用于加密的密码。

如果要针对特定​​密钥大小使用keytool生成证书,请使用-keysize 2048(例如)。请注意,这是证书中密钥的大小,而不是用于加密本身的对称密钥的大小。

keytool大致相同的命令可用于生成CSR,以发送到商业CA。无论您使用商业CA还是自己使用,都不会有任何变化。加密强度。不同之处在于,默认情况下没有人会识别您自己的证书,因此您必须将其显式导入客户端。证书主要用于验证与您通信的远程实体的身份。

(您可能也对this question中的讨论感兴趣。)

编辑:

您混合了两个完全不同的过程。

1.创建自己的CA。

使用OpenSSL所做的就是生成自己的证书颁发机构(CA)。因此,您将获得CAcert.pemCAkey.pem这是CA证书及其私钥(用于与此CA颁发新证书)。如果沿着这条路线走,您要做的就是将CAcert.pem作为受信任的CA证书导入到客户端中,并且随您颁发的证书也将受到信任。您可能还对OpenSSL的CA.pl感兴趣,它是一个脚本,其中包装了许多您可能需要更手动完成的过程。

OpenSSL无法处理JKS文件,如果没有一些额外的步骤,此过程就不会很有用。在这里,您可以:


使用OpenSSL为服务器生成密钥+证书(CA.pl应该会帮助)。从Java的角度来看,更容易以PKCS#12格式(.p12文件)导出它:然后,您可以直接从Java中将该文件用作类型为PKCS12(在<您的配置)。
通过keystoreType="PKCS12"通过keytool生成CSR,使用OpenSSL颁发证书(同样,CA.pl应该会提供帮助),将此证书重新导入到密钥库中(通过-certreq)并使用该JKS存储。


2.直接为此服务器使用自签名证书。

如果只有一台服务器,这可能是最简单的。

在这种情况下,请按照this answer中所述的步骤进行操作,并将与keytool一起导出的证书导入到客户端的信任库(或浏览器)中。




  verisign链接中的最后一个问题。它谈论两个证书,即
  SSL证书和数字证书。其中SSL证书和
  数字证书适合上述情况吗?


不确定,真的。我找不到它谈论“数字证书”的地方。严格来说,没有“ SSL证书”之类的东西,尽管该表达式或多或少总是表示“用于SSL / TLS的X.509证书”。

您可以将X.509证书用于SSL / TLS以外的其他目的,并将SSL / TLS与其他类型的证书一起使用。最常见的是带有SSL / TLS的X.509。

“数字证书”还可以涵盖更广泛的类别,例如OpenPGP证书也可以用于SSL / TLS(例如,参见this answer)。还有Attribute Certificates,甚至不包含公共密钥(在您真正了解X.509证书的含义之前,请不要阅读它们,否则会更加困惑)。

不过我的猜测是,Verisign将使用“ SSL证书”来表示与SSL一起使用的X.509证书,也可能是“ X.509”证书的“数字证书”以用于其他用途,例如电子邮件签名/加密。两者都将在PKI(由Verisign建立)的范围内。

关于java - 文件.keystore和CAKey.pem在SSL中的作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9586304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com