Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SSL密钥库(.jks)放在哪里,以及如何从.jar访问它?_Java_Mongodb_Ssl_Jar_Keystore - Fatal编程技术网

Java SSL密钥库(.jks)放在哪里,以及如何从.jar访问它?

Java SSL密钥库(.jks)放在哪里,以及如何从.jar访问它?,java,mongodb,ssl,jar,keystore,Java,Mongodb,Ssl,Jar,Keystore,我正在开发一个Java应用程序,它使用SSL与MongoDb通信。该应用程序被设计成打包成一个.jar文件,然后在Docker容器中运行。MongoDb要求您设置JVM系统属性以使SSL正常工作: System.setProperty("javax.net.ssl.keyStore", pathToJKS); System.setProperty("javax.net.ssl.keyStorePassword", pw); 我现在的问题是,我不知道将.jks文件放在哪里,并指定正确的路径,以

我正在开发一个Java应用程序,它使用SSLMongoDb通信。该应用程序被设计成打包成一个.jar文件,然后在Docker容器中运行。MongoDb要求您设置JVM系统属性以使SSL正常工作:

System.setProperty("javax.net.ssl.keyStore", pathToJKS);
System.setProperty("javax.net.ssl.keyStorePassword", pw); 
我现在的问题是,我不知道将.jks文件放在哪里,并指定正确的路径,以便我的应用程序能够在运行时访问它

目前,我的.jks文件位于resources文件夹(src/main/resources/store.jks)中,如果我通过IDE执行应用程序,这是正常的,但当然,只要从.jar文件执行应用程序,我就会得到一个
java.io.FileNotFoundException
。下面是我当前用于获取路径的代码

boolean isIDE = ...;
String pathToJKS = isIDE ? "src/main/resources/store.jks" : getPathFromJar("store.jks");

public String getPathFromJar(String filename) {
    ClassLoader classLoader = getClass().getClassLoader();
    final URL resourceUrl = classLoader.getResource(filename);

    if (resourceUrl != null) {
        return resourceUrl.toExternalForm();
    } else {
        return null;
    }
}

我的问题是将.jks文件放在哪里,以及如何从.jar文件访问它(通过路径)?

所有环境都使用相同的密钥库吗?如果是这样的话,那么我会像你现在做的那样包括在内。如果没有,则只需将密钥库路径添加为启动中包含的必需参数,例如:

java -jar <jar-file>.jar -Dkeystore.location=/some/location/to/keystore.jks
然后执行与此类似的操作以加载它(我想这已经包括在内了,但是嘿):


在创建的测试类文件夹中,包含keystore.jks文件的子文件夹src

测试类:

import java.io.*;
public class Test{

    public static void main(String... args){
        String fileName = args[0];
        new Test().readFile(fileName);

    }   

    void readFile(String fileName){

        try {
        InputStream in = getClass().getResourceAsStream(fileName);
        KeyStore keyStore =  KeyStore.getInstance(KeyStore.getDefaultType());
        keyStore.load(in, "password".toCharArray());
        Enumeration enumeration = keyStore.aliases();
        while(enumeration.hasMoreElements()) {
            String alias = (String)enumeration.nextElement();
            System.out.println("alias name: " + alias);
        }   

        } catch (Exception e) {
            e.printStackTrace();
        } 

    }

}
使用以下命令生成jar:

jar cvfe test.jar Test *.class src/keystore.jks
执行jar文件并读取jar中的密钥库

java -jar test.jar /src/keystore.jks
jar cvfe test.jar Test *.class src/keystore.jks
java -jar test.jar /src/keystore.jks