部署在 bluemix 和 compose mongodb 上的 java 适配器的 SSL 配置

Posted

技术标签:

【中文标题】部署在 bluemix 和 compose mongodb 上的 java 适配器的 SSL 配置【英文标题】:SSL Configuration of java adapter deployed on bluemix and compose mongodb 【发布时间】:2017-05-30 16:12:21 【问题描述】:

我们有一个 Java 适配器,用于查询 mongodb 数据库并向客户端提供 JSON 响应。

当部署到本地服务器尝试查询 bluemix 上的 compose mongodb 时,我们自然会得到 SSLHandshakeException,这是通过手动将 compose mongodb 提供的证书导入我们的本地 mobilefirst 密钥库来解决的,因为使用 keytool 建议抛出异常:

mfp-server\usr\servers\mfp\resources\security\key.jks

按照文档建议,通过 mfp UI 控制台创建密钥库并没有解决此问题。

但是,我们对如何在部署在 bluemix 上的移动基础上做同样的事情感到困惑。

我们尝试通过接口添加密钥库,在适配器描述符文件中创建连接策略并在 jaxrs 应用程序类中使用 System 属性。

System.setProperty("javax.net.ssl.trustStore",getClass().getClassLoader().getResource("keystorefile").getPath());
System.setProperty("javax.net.ssl.trustStorePassword", "keystorepassword");

目前还没有任何工作,对于本地实例也是如此,更新 key.jks 是我们让 mfserver 和 composeMongoDB 工作的唯一方法。

我们正在使用 MobileFirst 8 和 mongodb java 驱动程序版本 3.2.2

我们正在使用此命令将 compose 的证书导入我们创建的自签名证书:

keytool -importcert -keystore  <keystore name> -file <certificate_file_path>

【问题讨论】:

【参考方案1】:

您可以尝试使用spring-boot-ssl-truststore-gen 并编写一些代码以编程方式将撰写密钥添加到信任库:

public static final String SSL_TRUST_STORE_SYSTEM_PROPERTY = "javax.net.ssl.trustStore";
public static final String SSL_TRUST_STORE_PASSWORD_SYSTEM_PROPERTY = "javax.net.ssl.trustStorePassword";

private String certificate = "-----BEGIN CERTIFICATE-----" +
                             "..." + 
                             "-----END CERTIFICATE-----";

static 
    DefaultTrustStoreAppender trustStoreAppender = new DefaultTrustStoreAppender();
    final TrustStoreInfo trustStoreInfo = trustStoreAppender.append(CertificateFactory.newInstance(certificate));
    System.setProperty(SSL_TRUST_STORE_SYSTEM_PROPERTY, trustStoreInfo.getTrustStorefFile().getAbsolutePath());
    System.setProperty(SSL_TRUST_STORE_PASSWORD_SYSTEM_PROPERTY, trustStoreInfo.getPassword());

你会在你的 pom.xml 中需要这个(或替代):

<repositories>
   <repository>
      <id>jcenter</id>
      <url>http://jcenter.bintray.com </url>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>never</updatePolicy>
        <checksumPolicy>warn</checksumPolicy>
      </snapshots>
       <releases>
         <enabled>true</enabled>
         <checksumPolicy>warn</checksumPolicy>
      </releases>
   </repository>
</repositories> 

<dependency>
    <groupId>com.orange.clara.cloud.boot.ssl-truststore-gen</groupId>
    <artifactId>spring-boot-ssl-truststore-gen</artifactId>
    <version>2.0.21</version>
</dependency>

【讨论】:

以上是关于部署在 bluemix 和 compose mongodb 上的 java 适配器的 SSL 配置的主要内容,如果未能解决你的问题,请参考以下文章

解决了好几个软件的构建问题,在解决部署问题,bluemix部署

如何将内部 MobileFirst 混合应用程序部署到专用的 Bluemix 环境?

在 Bluemix-MobileFirst Foundation 上部署适配器

Django 应用程序部署@Bluemix,其中 postgresql 不能作为服务使用

IBM Mobilefirst 和 IBM Bluemix

如何在 Bluemix php 中部署自定义骨架应用程序