方案1A
如果你有一個證書,就可以使用spring-boot-ssl-truststore-gen這將證書添加到buildpack內的系統信任:
首先,你需要這在你的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>
如果要創建一個雲應用代工,接下來聲明在manifest.yml證書:
env:
TRUSTED_CA_CERTIFICATE: |-
-----BEGIN CERTIFICATE-----
changeme
-----END CERTIFICATE-----
當你cf push
您的應用程序,該證書將被添加到信任。
如果您未創建雲代工應用,請將環境變量TRUSTED_CA_CERTIFICATE
設置爲證書的值,例如,
$ export TRUSTED_CA_CERTIFICATE=<TRUSTED_CA_CERTIFICATE_VALUE>
可能性1b
彈簧引導-SSL-信任根庫does not support加載從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
添加以下你的朋友。當你的應用程序啓動時使用https://github.com/snowch/spring-boot-ssl-truststore-gen XML自動加載SSL證書:
<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>
或您的搖籃:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
compile 'com.github.snowch:spring-boot-ssl-truststore-gen:master'
選項2
如果要創建一個Cloud Foundry的應用並使用liberty buildpack看到這個問題以及接受的添加ssl證書的答案:Add certificate to truststore to enable SSL communication
選項3
如果您有權訪問套接字,您自己實例化一個MongoClient()
實例,而不是讓彈簧雲連接器等庫處理此問題,您可以嘗試使用https://www.compose.com/articles/easier-java-connections-to-mongodb-at-compose-2/
感謝您的迴應。我需要將多個SSL證書添加到manifest.yml文件,因爲我在Bluemix上連接了多個MongoDB實例。您能否讓我知道如何爲manifest.yml文件中的多個SSL證書添加TRUSTED_CA_CERTIFICATE? –
我已更新選項1以提供更多信息。請讓我知道你是如何得到的。 –
Chris,請允許我告訴我們如何在manifest.yml文件中添加多個SSL證書,或者是否存在對此方法的限制? –