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

我成功地通过http从https上获取了我的web应用程序。 实际上我怀疑在这个过渡阶段遇到的两个文件的角色。 我可以看到两个密钥文件,一个是.keystore,另一个是CAKey.pem。 我特别想知道他们在什么时候进入画面。 在server.xml中,我找到了一个atrributes keystoreFile(其值是keystore的位置)和keystorePass(我在生成.keystore文件期间给出的密码值)的条目,而在ApplicationConfig.xml中我找到了两个属性,即openSSLLocation (我可以看到openssl目录的值),第二个属性是password(对于哪个值,我在生成CAKey.pem文件时给出了密码值)。

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

编辑我通过bruno引出的链接。 我还通过另一个信息链接链接,即http://www.verisign.com/ssl/ssl-information-center/how-ssl-security-works/ 。 通过这两个链接之后我的理解是kestore文件包含SSL证书的详细信息(如果我们使用授权的CA像verisign那么它们提供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 .Did中,以下更改dir = c:/ openssl < – 这是OpenSSL安装目录certificate = $ 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 -outform DER此命令在私有子目录中创建文件CACert.cer 。

6)修改Java根证书

cd%JAVA_HOME%keytool -import -keystore jre \ lib \ security \ cacerts -alias AppOpenSSLCert -file%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生成.keystore文件的RSA((当将客户端发出https请求并且客户端匹配此证书时,将发送SSL证书)在信任库和私钥中)

最后我在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的角度来看,您应该首先尝试理解密钥库和信任库之间的区别(这两者都是用于不同目的的密钥库)。

JSSE中没有默认的密钥库,但是某些应用程序默认使用$HOME/.keystore :这是包含您的证书的内容,您拥有私钥。

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

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

如果我们像verisign一样使用授权的CA,它们提供128位加密,这可能是由java keytool命令证书提供的默认密钥存储所没有的)。

它不是用于选择加密密钥大小的证书,而是密码套件。 ( SGC证书的时代结束了 。)

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

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

或多或少使用keytool的相同命令可用于生成CSR以发送给商业CA. 无论您使用商业CA还是自己的CA都不会对加密强度产生任何影响。 不同之处在于默认情况下没有人会识别您自己的证书,因此您必须明确地在客户端中导入它。 证书主要用于validation与之通信的远程实体的身份。

(您可能也对此问题的讨论感兴趣。)

编辑:

你混合了两个完全不同的程序。

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通过-certreq生成CSR,使用OpenSSL发出证书(同样,CA.pl应该提供帮助),将此证书重新导入密钥库(通过keytool )并使用该JKS存储。

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

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

在这种情况下,请按照本答案中描述的过程,将使用-export导出的证书导入客户端的信任库(或导入浏览器)。


verisign链接中的最后一个问题。 它讨论了两个证书,即SSL证书和数字证书。 SSL证书和数字证书适用于上述场景?

不确定,真的。 我找不到它在哪里谈论“数字证书”。 严格来说,没有“SSL证书”这样的东西,尽管表达式或多或少总是意味着“用于SSL / TLS的X.509证书”。

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

“数字证书”还可以包含更广泛的类别,例如OpenPGP证书也可以用于SSL / TLS(例如,请参阅此答案 )。 还有属性证书 ,它们甚至不包含公钥(在你真正了解X.509证书之前不要阅读它们,否则,你会更加困惑)。

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

密钥库文件是存储使协议受到保护所必需的证书的详细信息的文件。 证书包含有关谁是您从中接收应用程序数据的来源以及validation其是否是目标方的信息。 (来源: http : //techtracer.com/2007/09/12/setting-up-ssl-on-tomcat-in-3-easy-steps/ )

CAKey.pem包含validation证书的私钥