我有一個web應用程序,使用thymeleaf,springboot,angularjs和oracle sql developer db。由於雲代工廠存在SSL錯誤,JaxB不能解組?
本地我能夠連接並從oracle獲取值。但是當我將我的應用程序推送到雲代工廠時,我的狀態= 500。
錯誤
,我解組有一個不受信任的證書的URL(「你的連接不可靠)」。我在我的jvm中添加了cacerts,它允許它在本地工作。但我相信我需要將cacerts添加到雲代工廠。我將如何能夠這樣做?
SSL錯誤
ERR java.net.ConnectException: Connection timed out
ERR at java.net.PlainSocketImpl.socketConnect(Native Method)
ERR at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
ERR at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
ERR at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
ERR at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
ERR at java.net.Socket.connect(Socket.java:589)
ERR at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668)
ERR at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
ERR at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
ERR at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
ERR at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
ERR at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
ERR at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
ERR at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
ERR at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1105)
ERR at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
ERR at rest.springframework.controllers.IndexController.getDetails(IndexController.java:59)
ERR at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
ERR at java.lang.reflect.Method.invoke(Method.java:498)
ERR at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:999)
在rest.springframework.jaxb.JAXSample.readXML(JAXSample.java:34)ERR
原因
我除去JAXB數據編從我的應用程序中,並上傳到雲代工廠,我沒有得到狀態= 500。我如何添加SSL來防止這種情況發生?
JAXB樣品
public deviceCert readXML(String MAC) throws MalformedURLException {
results customer = null;
deviceCert dcert = null;
String APPKEY = "Production";
try {
JAXBContext jaxbContext = JAXBContext.newInstance(results.class);
//line 34 is below VV.
URL url = new URL("https://untrusted.page.that.I.Am/unmarshalling" + "?mac=" + MAC + "&app_key=" + APPKEY);
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.addRequestProperty("User-Agent", "Mozilla/4.76");
InputStream is = http.getInputStream();
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
customer = (results) jaxbUnmarshaller.unmarshal(is);
List<deviceCert> dcerts = customer.getDcerts();
dcert = dcerts.get(0);
找到相關鏈接here
我跟着CF CLI SSL但是這並沒有這樣的伎倆。
嘗試
- 創建的文件夾資源/配置/信任我的應用程序。
- 將Cert.cer添加到truststore文件夾中。
- 推送應用程序到雲代工廠。
- CF設置ENV我的應用程序內JAVA_OPTS '-Djavax.net.ssl.TrustStore = classpath中:資源/配置/信任'
同樣的錯誤空話改變。
嘗試2
<dependency>
<groupId>io.pivotal.spring.cloud</groupId>
<artifactId>cloudfoundry-certificate-truster</artifactId>
<version>1.0.1.RELEASE</version>
</dependency>
加入依賴性
重新打包的應用程序,上傳到比照
- 在Cloud Foundry
CF_TARGET
新增環境變量= https://api.my-cf-domain.com
//url of my secured/untrusted page
新的堆棧跟蹤誤差
ERR at java.util.concurrent.FutureTask.get(FutureTask.java:205)
ERR at io.pivotal.springcloud.ssl.SslCertificateTruster.getUntrustedCertificateInternal(SslCertificateTruster.java:90)
ERR at io.pivotal.springcloud.ssl.SslCertificateTruster.getUntrustedCertificate(SslCertificateTruster.java:66)
ERR at io.pivotal.springcloud.ssl.CloudFoundryCertificateTruster.trustCertificatesInternal(CloudFoundryCertificateTruster.java:44)
ERR at io.pivotal.springcloud.ssl.CloudFoundryCertificateTruster.trustCertificates(CloudFoundryCertificateTruster.java:32)
ERR at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:420)
ERR at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:403)
ERR at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:394)
ERR at org.springframework.boot.SpringApplication.initialize(SpringApplication.java:261)
ERR at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:237)
ERR at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
ERR at rest.springframework.SpringBootWebApplication.main(SpringBootWebApplication.java:13)
ERR at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
ERR at java.lang.reflect.Method.invoke(Method.java:498)
ERR at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
ERR at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
ERR at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
這項工作爲什麼在本地找到,但不在雲上?
「我需要一個雲個人資料?」 - 是的,可能還有防火牆規則,允許PCF連接到未在雲上運行的Oracle數據庫。 – duffymo
@duffymo用於雲配置。我只是添加cloud.datasource.url等.... – Jesse
我想你還需要一個服務來連接到實例。 – duffymo