2

У меня есть веб-приложение, использующее тимелеаф, springboot, angularjs и oracle sql developer db.JaxB не Unmarshalling из-за ошибки SSL на облачном литейном заводе?

Локально я могу подключать и получать значения от oracle. Но когда я нажимаю свое приложение на облачный литейный цех, я получаю статус = 500.

ОШИБКА

URL-адрес, что я демаршаллинг имеет ненадежный сертификат («Ваше соединение не защищен)». Я добавил cacerts в свой jvm, что позволило ему работать локально. но я считаю, что мне нужно добавить катетеры в облачный литейный цех. Как я смогу это сделать?

Ошибка 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) 

ERR на rest.springframework.jaxb.JAXSample.readXML (JAXSample.java:34)

Причина

я удалил 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 Но это не сделать трюк.

Покушение

  1. создания папки ресурсов/конфигурации/доверенных в моем приложении.
  2. Добавлен Cert.cer в папку доверия.
  3. Вдвинутое приложение в облачный литейный цех.
  4. сравни установленный окр мой-приложение JAVA_OPTS '-Djavax.net.ssl.TrustStore = путь к классам: ресурсы/конфигурации /' доверенных

То же бездельники ошибка изменилась.

Попытка 2

<dependency> 
    <groupId>io.pivotal.spring.cloud</groupId> 
    <artifactId>cloudfoundry-certificate-truster</artifactId> 
    <version>1.0.1.RELEASE</version> 
</dependency> 
  1. добавлена ​​зависимость

  2. ПРЕПОДНЕСЕНА приложение, загрузить на ср

  3. Добавлена ​​переменная среды на облаке литейном

    CF_TARGET = https://api.my-cf-domain.com

      //url of my secured/untrusted page 
    

Github example

Новая StackTrace ошибка

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) 

Почему эта работа находит локально, но не в облаке?

+1

"Нужен ли профиль облака?" - да, и, возможно, правило брандмауэра, позволяющее PCF подключаться к базе данных Oracle, которая не работает в облаке. – duffymo

+0

@duffymo для облачной конфигурации. я просто добавляю cloud.datasource.url и т. д .... – Jesse

+0

Я думаю, вам также нужна служба, которая будет прикреплена к экземпляру. – duffymo

ответ

1

Есть несколько способов добавить сертификат CA в контейнере:
https://discuss.pivotal.io/hc/en-us/articles/223454928-How-to-tell-application-containers-running-Java-apps-to-trust-self-signed-certs-or-a-private-internal-CA

Самый простой, вероятно, указать на виртуальную машину Java в cacert файл вы расслоении в вашем приложении, используя cf set-env <app> JAVA_OPTS '-Djavax.net.ssl.TrustStore=classpath:resources/config/truststore' или с атрибут «env» в манифесте приложения.

+0

Я сделал то, что вы сказали set-env. и я восстановил мое приложение, оно все еще не работает. Я по-прежнему получаю ту же ошибку, что и трассировка стека выше. – Jesse

+0

Я не думаю, что это ответ на вашу актуальную проблему, которая больше связана с сетью, связанной с сертификатом. Но чтобы предоставить некоторые другие решения для проблем доверия SSL/cert, вы можете проверить этот слайд из предоставленной мной презентации -> https://docs.google.com/presentation/d/1GQ2qrFT3rNJ6L2PURmNfEkKdQhed_vI23Q0hopVFd0o/edit#slide=id.g154ee7fa13_0_13 –

+0

@DanielMikusa Я нашел конкретные доказательства того, что это проблема SSL. Когда я удалил jaxB из моего приложения, он сработал. – Jesse

0

Если вы управляете вашей CloudFoundry платформы, то вы можете использовать следующий подход ::

1) Добавить сертификаты через менеджер ОПС для PCF или через заплечиков http://bosh.io/docs/trusted-certs.html

2) Настройка buildpack использовать пользовательский сертификат доверия магазин ,

сравни установленный окр приложение JBP_CONFIG_CONTAINER_CERTIFICATE_TRUST_STORE «{включено: истинно}»

Ссылки:

https://docs.cloudfoundry.org/buildpacks/java/bosh_custom_trusted_certs.html

https://github.com/cloudfoundry/java-buildpack/blob/master/README.md#configuration-and-extension

0

Кулак вы должны создать файл JKS для загруженного сертификата. Вы можете найти keytool из JDK bin.

Keytool -importcert -file "your.cer" -keystore your.jks -alias "testAlias"

Добавить your.jks файл в качестве ресурса в весенне-загрузки проекта.

набор путь и пароль хранилища сертификатов с использованием конфигурации в application.properties например:

your.ssl.trust-store = your.jks 
your.ssl.trust-password = changeit 

загрузить его из запуска приложения.

Например:

public class LoadSSLTrustStore implements CommandLineRunner{ 


     @Value("${your.ssl.trust-store}") 
     private String keyUrl; 
     @Value("${your.ssl.trust-password}") 
     private String keyPassword; 
    @Override 
    public void run(String... arg0) throws Exception { 
     try{ 
      System.setProperty("javax.net.ssl.trustStore",CustomerMasterServiceApplication.class.getClassLoader().getResource(keyUrl).getFile()); 
      System.setProperty("javax.net.ssl.trustStorePassword",keyPassword); 

     }catch(Exception e){ 
      LOGGER.error("Error in loading SSL trusted key store for Connect to GCIN service",e); 
     } 

    } 

} 

Связанного вопрос

Add SSL keystore file to java trusted store for HTTP Client request on PCF (Cloud Foundry)

+0

Я сохранил мой .crt как .jks с командной строкой. добавлены учетные данные в файле app.properties. и создал класс для загрузки хранилища доверия ssl. Последовал ваш пример из предоставленной вами ссылки. Но я все еще получаю то же самое – Jesse

Смежные вопросы