首页 > 解决方案 > keytool 错误:java.io.FileNotFoundException:node0.cer(没有这样的文件或目录)

问题描述

我想为 cassandra 中的开发准备服务器证书以进行客户端到节点的加密,但是在运行命令时遇到以下问题:

我正在按照这些链接进行设置:

https://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/secureSSLClientToNode.html https://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/secureSSLCertificates.html

当我运行以下命令时:

keytool -export -alias cassandra -file node0.cer -keystore cassandra.keystore

我收到此错误:

keytool error: java.lang.Exception: Keystore file does not exist: cassandra.keystore

当运行以下命令时:

keytool -import -v -trustcacerts -alias node0 -file node0.cer -keystore truststore.node0

收到此错误:

keytool error: java.io.FileNotFoundException: node0.cer (No such file or directory) java.io.FileNotFoundException: node0.cer (No such file or directory)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:195)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at java.io.FileInputStream.<init>(FileInputStream.java:93)
        at sun.security.tools.keytool.Main.doCommands(Main.java:1037)
        at sun.security.tools.keytool.Main.run(Main.java:368)
        at sun.security.tools.keytool.Main.main(Main.java:361)

我的操作系统是 RS-Centos-7。

有人可以帮忙吗?

标签: javacassandracentos7cassandra-3.0

解决方案


我假设您在生成密钥后尝试将证书的公共部分导出到单独的文件中。

所以对于第一个命令

keytool -export -alias cassandra -file node0.cer -keystore cassandra.keystore

-keystore 参数将获取使用命令创建的密钥库

keytool -genkey -keyalg RSA -alias node0 -validity 36500 -keystore keystore.node0

这是keystore.node0

第二个错误是正常的,因为您没有在上一步生成 node0.cer 文件。

进一步说明:

第一步是生成密钥并将其保存到密钥库。这是通过

keytool -genkey -keyalg RSA -alias node0 -validity 36500 -keystore keystore.node0

此命令生成一个私钥/公钥对,并使用别名 node0 将其保存到密钥库 keystore.node0 中。

第二个命令是 keytool -export -alias cassandra -file node0.cer -keystore cassandra.keystore

应该导出一个证书,但是里面有一些错误的参数。正确的命令(与上述命令相关)是

keytool -export -alias node0 -file node0.cer -keystore keystore.node0

在此之后,您应该有一个可以进一步使用的 node0.cer。

基本上为了在 Cassandra 节点之间启用 SSL,您正在执行以下操作:

  • 为每个节点创建一个包含私钥 - 公钥对的密钥库
  • 为集群中的每个节点创建一个包含证书的信任库
  • 更改每个节点上的 cassandra.yaml 文件,以指定该节点的密钥库和信任库。
  • 重新启动卡桑德拉。

为简单起见,您可以拥有相同的信任库,其中包含集群中所有节点的所有证书。


推荐阅读