如何将 SSL 证书添加到 Bluemix java Cloud Foundry 应用程序?

2024-04-16

我正在使用 Spring Boot、Java JDK 1.8、Java MongoDB 驱动程序和 MongoDB 开发微服务。我已经在 Bluemix 上创建了 MongoDB 实例,并且正在从 Java 微服务连接到该实例。

Bluemix 上的 MongoDB 实例启用了 SSL,并且提供 SSL 证书。对于本地开发,我已使用 Base64 解码此证书,并将此 SSL 证书导入到本地 java 密钥库。因此,我可以在本地连接到 Bluemix 上的 MongoDB 实例,没有任何问题。

当我使用 cf CLI 将 Spring Boot 微服务作为 jar 文件部署到 Bluemix 时,微服务无法连接到 Bluemix 上的 MongoDB,因为我尚未上传 MongoDB 提供的 SSL 证书。

有人可以告诉我将 SSL 证书上传到 Bluemix 以便我的微服务可以连接到 MongoDB 实例所需的步骤吗?


选项1a

如果您只有一个证书,则可以使用spring-boot-ssl-truststore-gen https://github.com/orange-cloudfoundry/spring-boot-ssl-truststore-gen它将证书添加到构建包内的系统信任库中:

首先,您需要在 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> 

and

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

如果您要创建 Cloud Foundry 应用程序,接下来在您的 manifest.yml 中声明证书:

env:
    TRUSTED_CA_CERTIFICATE: |-
        -----BEGIN CERTIFICATE-----
        changeme
        -----END CERTIFICATE-----

当你cf push您的应用程序中,证书将被添加到信任库中。

如果您不创建 Cloud Foundry 应用程序,请设置 enivonment 变量TRUSTED_CA_CERTIFICATE与您的证书的价值,例如

$ export TRUSTED_CA_CERTIFICATE=<TRUSTED_CA_CERTIFICATE_VALUE>

选项 1b

spring-boot-ssl-truststore-gen 库不支持 https://github.com/orange-cloudfoundry/spring-boot-ssl-truststore-gen/commit/3d6cf29ad8bad0cd5d2df86865b60dfc75d996d8从 TRUSTED_CA_CERTIFICATE 环境变量加载多个证书。如果您有多个证书,可以尝试直接调用 ssl-truststore-gen api,例如来自您的类之一的静态块:

package helloworld;

import com.orange.clara.cloud.boot.ssl.CertificateFactory;
import com.orange.clara.cloud.boot.ssl.DefaultTrustStoreAppender;
import com.orange.clara.cloud.boot.ssl.TrustStoreInfo;

public class CertLoader {

    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";

    static {
        String[] certs = {
            System.getenv("CERTIFICATE_1"),
            System.getenv("CERTIFICATE_2")
        };

        for (String cert : certs) {
            DefaultTrustStoreAppender trustStoreAppender = new DefaultTrustStoreAppender();
            TrustStoreInfo trustStoreInfo = trustStoreAppender.append(CertificateFactory.newInstance(cert));
            System.setProperty(SSL_TRUST_STORE_SYSTEM_PROPERTY, trustStoreInfo.getTrustStorefFile().getAbsolutePath());
            System.setProperty(SSL_TRUST_STORE_PASSWORD_SYSTEM_PROPERTY, trustStoreInfo.getPassword());
        }
    }
}

然后,您的 manifest.yml 中需要类似以下内容:

env:
    CERTIFICATE_1: |-
        -----BEGIN CERTIFICATE-----
        changeme
        -----END CERTIFICATE-----

    CERTIFICATE_2: |-
        -----BEGIN CERTIFICATE-----
        changeme
        -----END CERTIFICATE-----

选项 1c

将以下内容添加到 pom.xml 中,以便在应用程序启动时自动加载 ssl 证书https://github.com/snowch/spring-boot-ssl-truststore-gen https://github.com/snowch/spring-boot-ssl-truststore-gen:

<repository>
   <id>jitpack.io</id>
   <url>https://jitpack.io</url>
</repository>

<dependency>
   <groupId>com.github.snowch</groupId>
   <artifactId>spring-boot-ssl-truststore-gen</artifactId>
   <version>master</version>
</dependency>

或到你的 Gradle:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

compile 'com.github.snowch:spring-boot-ssl-truststore-gen:master'

Option 2

如果您正在创建 Cloud Foundry 应用程序并使用 liberty buildpack,请参阅此问题以及添加 ssl 证书的可接受答案:将证书添加到信任库以启用 SSL 通信 https://stackoverflow.com/questions/32180717/add-certificate-to-truststore-to-enable-ssl-communication/44621986#44621986

Option 3

如果您有权访问套接字,例如你正在实例化一个MongoClient()您可以自己实例化,而不是让诸如 Spring Cloud Connector 之类的库为您处理此问题,您可以尝试https://www.compose.com/articles/easier-java-connections-to-mongodb-at-compose-2/ https://www.compose.com/articles/easier-java-connections-to-mongodb-at-compose-2/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 SSL 证书添加到 Bluemix java Cloud Foundry 应用程序? 的相关文章

随机推荐

  • 如何从 LDAP 目录中提取 TNSNames

    我一直在尝试查询 LDAP 目录服务器以检索 tnsnames 条目 我可以使用以下代码 但味道不对 是因为它是错误的 还是因为查询 ldap 涉及几个间接级别 let identifier LdapDirectoryIdentifier
  • Bitbucket:从提示绑定文件以供下载

    我在一个私人存储库中工作 并与我的朋友合作 他对 SCM 之类的东西不太友好 他所需要的只是监控我开发的最新版本 这是 1 个可执行文件 我想知道 而不是每次他想要获取最新更改时克隆整个存储库 有时我的更改集可能由几个仅在开发时使用而不是测
  • OpenGL ES 像素艺术 - 缩放

    我在 iPhone 上的 OpenGL Es 1 1 上显示基于像素的艺术 想想复古瓷砖和艺术 时遇到问题 图块使用 8 个字节 每行 1 个字节 表示 每一位代表一个像素是否被设置 例如数字为 8 的图块 0 0 0 0 0 0 0 0
  • 企业内部应用程序分发

    我正在为一家公司开发 iPad 应用程序 由于保密原因 他们不想将应用程序发布到应用程序商店 他们满足企业计划要求 但尚未参与 该公司想知道分销流程是怎样的 我已经深入苹果文档丛林 我对配置文件有点困惑 由于保密原因 我想使用带有配置文件的
  • 创建规则来限制sql server表中的特殊字符

    我想创建一条规则来限制在列中输入特殊字符 我已经尝试过以下方法 但这没有用 CREATE RULE rule spchar AS make LIKE lt gt 我不知道我在这里做错了什么 任何帮助 将不胜感激 您可以创建一个Check C
  • Python、Brew 和 MySQLdb

    我一直在通过brew安装运行python 我用安装工具安装了 mysql python Egg 根据 mysql python 说明进行标准安装 并将其安装到 usr local lib python2 7 site packages 处理
  • USB接口条码扫描器

    不完全是一个编程问题 但很接近 无论如何我都会试试运气 The 键盘楔子 扫码机插入 读者之间的翻译装置 和键盘 数据发送通过 楔形看起来就像是被输入的 电脑 而键盘 本身仍保持完整功能 因为电脑使用键盘 楔子无法区分 在输入的数据之间 扫
  • 为什么reinterpret_cast不是constexpr?

    考虑以下片段 static constexpr uint8 t a 0 static constexpr const int8 t b reinterpret cast
  • 由 pandoc 从 .md 转换而来的 Beamer 幻灯片中的绘图非常大

    R 生成的正态图chunksR 中的 Markdown 文件在转换为 html 幻灯片或 pdf 时完全相同 但是 当它们通过以下方式转换为投影仪幻灯片时pandoc t beamer ex md V theme Warsaw o beam
  • SVG路径定位

    我正在制作脸部 SVG 无法将眉毛固定在正确的位置 请指教
  • Ado.Net 实体:对象不显示链接成员(外键)

    我有一个简单的数据库方案 用户 帐户 用户与帐户具有一对多关系 我已经生成了 ado net 实体数据模型 我可以创建用户和帐户 甚至可以将它们链接在一起 在数据库中 account user id 已正确填写 因此理论上我应该能够通过实体
  • 具有 DNS 验证的证书陷入待验证状态

    我已将我的域转移到 Route53 并且我希望 Amazon Certificate Manager 为该域颁发证书 我按照控制台中的步骤颁发证书 确实出现了 在 Route53 中创建记录 按钮 我确实按它 它说 成功 我确实看到在 Ro
  • 如何在numpy中设置最大输出宽度?

    我正在使用 Jupyter 笔记本 我有一个相当宽的屏幕 但是显示的输出 例如 当我打印numpyarray 的格式就像屏幕很窄一样 我找到了一种增加单元格宽度的方法 from IPython core display import HTM
  • 用户主目录中的 log4j 日志文件

    我正在开发一个可以在 OSX 和 Windows 上运行的应用程序 我希望将日志写入用户主目录 对于 OSX 它将位于 Users Library Application Support MyApp log 目录下 而在 Windows 下
  • 有没有可靠的方法来检测 io.js 或 node.js 是否正在运行?

    我可以推断 node js 或 io js 是否正在运行的唯一方法是检查process versions node 在 io js 中 我得到 1 0 4 我确信有更好的方法 有人知道吗 现在最可靠的解决方案是执行node h看看它是否包含
  • 静态元素交互

    我有以下代码 Enabled id gt let removal null if this props disabled removal span gt this onDelete id gt x span return removal 它
  • 新:类型“_InternalLinkedHashMap ”不是类型“DocumentSnapshot”的子类型

    抱歉 我现在正在编程 但我正在学习 请帮助我 我被这个问题困住了 这是我的第一个应用程序 几乎已经完成 因此需要类似的帮助才能完成它 我收到此错误 类型 InternalLinkedHashMap 不是类型 DocumentSnapshot
  • 何时添加组件类与用户控件?

    我有一个总体想法 并且有一些明显的情况 但对我来说也有一些灰色区域 什么时候最好使用从组件扩展以及什么时候最好创建用户控件 这与我试图解决的特定工作问题有关 但具体问题并不重要 这个问题的一般答案对我来说就足够了 在 WPF 和 Windo
  • 链接器错误已定义

    我正在制作一个nodejs插件 我的 Visual Studio 项目中有 5 个文件 comm h cc node main cc util h cc 我将它与图书馆链接node lib node main cc有一个功能 v8 Hand
  • 如何将 SSL 证书添加到 Bluemix java Cloud Foundry 应用程序?

    我正在使用 Spring Boot Java JDK 1 8 Java MongoDB 驱动程序和 MongoDB 开发微服务 我已经在 Bluemix 上创建了 MongoDB 实例 并且正在从 Java 微服务连接到该实例 Bluemi