当前位置: 首页 > 知识库问答 >
问题:

Spring+maven+custom keystore=maven构建错误

丌官运珧
2023-03-14

maven构建包含密钥库和信任库的springboot项目时,我遇到了一个问题。我有一个单独的密钥库和信任库,用来与我的mongo副本(x509)通信。为此,我以实用的方式生成了ssl上下文,并将其传递给MongoClient,这就起作用了。这就是我启动MongoClient的地方(目前是在应用程序主类中:

    @Value("${mongo.keyStore}")
    private String keyStore;
    @Value("${mongo.keyStorePassword}")
    private String keyStorePassword;
    @Value("${mongo.trustStore}")
    private String trustStore;
    @Value("${mongo.trustStorePassword}")
    private String trustStorePassword;
    @Value("${mongo.keyAlias}")
    private String keyAlias;
    @Value("${mongo.subject}")
    private String subject;

    @Bean
    public SSLContext mongoSSLContext() throws GeneralSecurityException, IOException {
        KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
        try (InputStream in = new FileInputStream(keyStore)) {
            keystore.load(in, keyStorePassword.toCharArray());
        }
        KeyManagerFactory keyManagerFactory =
                KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        keyManagerFactory.init(keystore, keyStorePassword.toCharArray());

        KeyStore ts = KeyStore.getInstance(KeyStore.getDefaultType());
        try (InputStream in = new FileInputStream(trustStore)) {
            ts.load(in, trustStorePassword.toCharArray());
        }
        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init(ts);

        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());

        return sslContext;
    }

    @Bean
    public X509Certificate mongoClientCertificate() throws GeneralSecurityException, IOException {
        KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
        try (InputStream in = new FileInputStream(keyStore)) {
            keystore.load(in, keyStorePassword.toCharArray());
        }
        KeyManagerFactory keyManagerFactory =
                KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        keyManagerFactory.init(keystore, keyStorePassword.toCharArray());
        X509KeyManager keyManager = (X509KeyManager) keyManagerFactory.getKeyManagers()[0];
        return keyManager.getCertificateChain(keyAlias)[0];
    }

    @Bean
    public MongoClientSettingsBuilderCustomizer mongoSslCustomizer(SSLContext mongoSSLContext) {
        return clientSettingsBuilder -> clientSettingsBuilder.applyToSslSettings(sslBuilder -> sslBuilder.context(mongoSSLContext));
    }

下面是我的配置:

mongo:
    trustStore: ${PWD}/src/main/resources/keystore/ts.keystore
    trustStorePassword: <password>
    keyStore: ${PWD}/src/main/resources/keystore/ks.jks
    keyStorePassword: <password>
    keyAlias: <key-alias>
    subject: <subject>

我怀疑我这样做是不对的...有人能帮忙吗?

谢谢你!

共有1个答案

田博超
2023-03-14

您能在pom.xml中尝试一下吗?

<build>
    <resources>
        <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>**/*.keystore</exclude>
                <exclude>**/*.jks</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>**/*.keystore</include>
                <include>**/*.jks</include>
            </includes>
        </resource>

    </resources>
 类似资料:
  • 我被这个错误弄得神魂颠倒,在我解决这个问题之前,我无法取得任何进展。 我有最新的STS(Spring Tool Source)3.7.1,专门用于Eclipse Mars 4.5.1。我删除了所有旧版本的STS,也删除了旧的.Eclipse文件,因为我希望这是一个全新的安装。我还进入了c:\Users\Tom Holmes\AppData文件夹,删除了“Spring Tool Suite”的所有痕

  • 我检查了/m2/repository。但找不到任何相关的东西。

  • 这是我的文件: 这是Maven命令输出

  • 当我使用现有的Maven项目选项将一个插件导入到eclipse时,遇到了以下错误。 项目生成错误:无法解析的生成扩展:Plugin com.atlassian.maven.plugins:maven-jira-plugin:3.2.3或其依赖项之一无法解析:在http://repo1.maven.org/maven2中查找com.atlassian.maven.plugins:maven-jira

  • 我在maven项目中得到了以下错误。我在看视频教程。并且maven文件相当简单。 下面是maven文件。 在stackoverflow的另一篇文章中有一篇关于文件格式的文章,因此我也将文件格式更改为utf-8。 任何解决这个问题的建议都会很有帮助。谢谢!

  • 我是maven的新手,并用hello World创建了一个简单的maven项目。当我尝试运行Maven项目时,它会说:- [错误]尚未为此生成指定目标。必须指定有效的生命周期阶段或格式为:或:[:]:的目标。可用的生命周期阶段有:验证、初始化、生成源、过程源、生成资源、过程资源、编译、过程类、生成测试源、过程测试源、生成测试资源、过程测试资源、测试编译、过程测试类、测试、准备包、包、集成前测试、集