我正在使用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实例吗?
答案 0 :(得分:2)
选项1a
如果您有一个证书,则可以使用spring-boot-ssl-truststore-gen将证书添加到buildpack内的系统信任库:
首先,您需要在pom.xml(或替代方案)中使用它:
public function _getSocialAccountTitle()
{
if (isset($this->social_network)) {
return $this->social_network->title.' ('.$this->user_key.')';
}
return $this->id;
}
和
<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>
如果您要创建云代工厂应用,请在manifest.yml中声明证书:
<dependency>
<groupId>com.orange.clara.cloud.boot.ssl-truststore-gen</groupId>
<artifactId>spring-boot-ssl-truststore-gen</artifactId>
<version>2.0.21</version>
</dependency>
当您env:
TRUSTED_CA_CERTIFICATE: |-
-----BEGIN CERTIFICATE-----
changeme
-----END CERTIFICATE-----
申请时,证书将被添加到信任库。
如果您没有创建云代工厂应用,请使用证书的值设置enivonment变量cf push
,例如
TRUSTED_CA_CERTIFICATE
选项1b
spring-boot-ssl-truststore-gen库does not support从TRUSTED_CA_CERTIFICATE环境变量加载多个证书。如果您有多个证书,可以尝试直接调用ssl-truststore-gen api,例如从你的一个类中的静态块:
$ export TRUSTED_CA_CERTIFICATE=<TRUSTED_CA_CERTIFICATE_VALUE>
然后,您需要在manifest.yml中使用以下内容:
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());
}
}
}
选项1c
将以下内容添加到pom.xml中,以便在使用https://github.com/snowch/spring-boot-ssl-truststore-gen启动应用程序时自动加载ssl证书:
env:
CERTIFICATE_1: |-
-----BEGIN CERTIFICATE-----
changeme
-----END CERTIFICATE-----
CERTIFICATE_2: |-
-----BEGIN CERTIFICATE-----
changeme
-----END CERTIFICATE-----
或您的Gradle:
<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>
选项2
如果您正在创建云代工厂应用并使用liberty buildpack,请参阅此问题以及添加ssl证书的已接受答案:Add certificate to truststore to enable SSL communication
选项3
如果您有权访问套接字,例如您自己实例化allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
compile 'com.github.snowch:spring-boot-ssl-truststore-gen:master'
实例,而不是让像Spring spring连接器这样的库为您处理此问题,您可以尝试https://www.compose.com/articles/easier-java-connections-to-mongodb-at-compose-2/