Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.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 以编程方式设置信任库_Java_Spring_Spring Boot_Tomcat_Truststore - Fatal编程技术网

Java 以编程方式设置信任库

Java 以编程方式设置信任库,java,spring,spring-boot,tomcat,truststore,Java,Spring,Spring Boot,Tomcat,Truststore,我想为我的应用程序设置自定义信任库。我想使用System.setProperty。在tomcat中设置不是一个选项 所有的配置似乎都很好,但不起作用。 我使用SpringBoot2.0.6,带有外部tomcat 我尝试在不同的地方进行配置,比如在SpringApplication.run之前的Bean的Postconstruct中。以下是我最近的代码: static { System.setProperty("javax.net.debug", "all"); System.s

我想为我的应用程序设置自定义信任库。我想使用System.setProperty。在tomcat中设置不是一个选项

所有的配置似乎都很好,但不起作用。 我使用SpringBoot2.0.6,带有外部tomcat

我尝试在不同的地方进行配置,比如在SpringApplication.run之前的Bean的Postconstruct中。以下是我最近的代码:

 static {
    System.setProperty("javax.net.debug", "all");
    System.setProperty("javax.net.ssl.trustStore", "/opt/grtc8/profiles/appconf/insurance/https-trust.p12"); 
    System.setProperty("javax.net.ssl.trustStorePassword", "xys");
    System.setProperty("javax.net.ssl.trustStoreType", "PKCS12");
 }

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(InsuranceCalculatorApplication.class);
}

public static void main(String[] args){

    SpringApplication.run(InsuranceCalculatorApplication.class, args);
}
我有一个证书例外,它似乎没有读取文件,或其他什么


我使用的是Tomcat8.5。

在Java代码中设置系统属性是一种相当可疑的做法。问题是,只有当您能够确保设置属性的代码总是在使用属性的代码之前运行时,才会出现这种情况

在这种情况下,在初始化SSL提供程序时使用属性。这很可能是由执行静态块之前发生的一些静态初始化触发的

有几种方法可以解决这个问题:

使用-D选项从命令行设置属性。根据您的需求,您可以在启动时使用一些魔法来选择trust store;e、 g.使用包装器脚本或自定义启动程序应用程序

在Java代码中加载JVM的默认信任存储等,而不是依赖属性。例如:

让这种方法与Tomcat一起工作可能很棘手。。。假设您希望为Tomcat的服务器端执行此操作

显然,如果您使用的是SpringBoot,则可以替换默认的Tomcat连接器;看见那可能会给你一条进去的路


但我认为务实的解决方案是第一个。更改规则:-

谢谢!不允许从外部源使用-D选项。是否有可能spring boot server.ssl。属性设置在这里也起作用吗?据我所知,它只适用于被盗用的tomcat。另外,我正在使用oauth2身份验证,并且在应用程序启动之前需要这些值,因为我必须通过https到达身份验证服务器的令牌密钥端点。通过System.setProperty设置这些属性确实有效,因此它不可能是初始化顺序问题。我有几十个或几百个测试用例和主要的测试过程。你有什么“证书异常”?