11
votes

Comment configurer Spring RestTemplate avec SSL (au printemps @mvc)

Je veux configurer mon Spring Spring @mvc STRUT> STUCT'S SPOTTEMPATE DE RESSION STROND> AVEC SSL STRAND> pour communiquer à Reste Strong> HTTPS forte> Application, qui s'est déployé sur Tomcat STROND> Server (printemps 3, Tomcat 7). J'ai fait jusqu'à présent mes œuvres de Reportez-vous à ce lien a>. Maintenant, je n'ai aucune idée de l'utilisation des certificats générés forts> avec Resttemplate de ressort fort>, quelqu'un peut-il avoir une idée s'il vous plaît aidez-moi. Merci. Jusqu'à présent, des choses que j'ai faites,

// Sécurité printring XML configurations strong> p> xxx pré>

// configurations pour activer SSL avec TOMCAT strong> p> xxx pré>

pour générer des touches, des certificats, etc., p>

// générer des touches client et serveur: strong> p>

F: \ jdk1.6.0_23 \ bin> BeyTool -genkey -keystore KeyStore_Client -Alias ​​-Alias ​​- Nom de nom "CN = localhost, ou = dev, o = mybusiness, l = colombo, S = Colombo, S = Westen, c = SL "
F: \ jdk1.6.0_23 \ bin> keytool -genkey -keystore keyStore_server -alias serverkey -dname "cn = localhost, ou = dev, o = mybusiness, l = colombo, s = westen, c = sl" p>

// générer des certificats de client et de serveur: strong> P>

F: \ jdk1.6.0_23 \ bin> BeyTool -export -export -Elias ClientKey -RFC -KeyStore KeyStore_Client> Client.Cert F: \ jdk1.6.0_23 \ bin> BeyTool -Eltool -Eltool -export -Elias ServerKey -RFC -keyStore KeyStore_Server> Server.Cert P>

// Importation de certificats à des fidèles correspondants: strong> p >

F: \ jdk1.6.0_23 \ bin> Tool-Import -Alport -Alias ​​ClientCert -File Client.cert -keyt -keytstore Trustore_Server F: \ jdk1.6.0_23 \ bin> BeyTool -Import -Alport ServerCert -File ServerCert -Cert -keyStore TrustTore_Client P>

// Configurations Resttemplate de ressort stress> P>

P> P> P> P> P> P> P> P> P> P> P> P> P> P>

ResponseEntity<User> rECreateUser = restTemplate.postForEntity("https://127.0.0.1:8443/skeleton-1.0/login", user, User.class);


0 commentaires

4 Réponses :


7
votes

Ceci est parce que le certificat SSL du service que vous appelez n'est pas signé par une autorité de certification de confiance. La solution de contournement consiste à importer le certificat dans le magasin de fiducie de certificat (CaCerts) de votre JRE.

  1. Téléchargez le certificat en ouvrant l'URL dans un navigateur, cliquez sur le verrouillage. Icône dans la barre d'adresse du navigateur.
  2. Une fois que vous avez un fichier .cer exécuté la commande ci-dessous XXX


2 commentaires

Est-il possible de maintenir le client client au niveau du serveur d'applications sans configurer au niveau Java?


Vous pouvez importer le certificat dans un fichier personnalisé Trust Store, puis la spécifier comme décrit ici: Stackoverflow.com/a/18767045/1575914 Ou vous pouvez expérimenter des choses décrites ici Stackoverflow.com/a/6755459/157591



2
votes

Vous pouvez configurer la plaque de repos avec le HTTPComponentsClienthttprectesFactory à partir de Apache httpComponents httpClient , qui soutient définitivement SSL.

ref: repose (Resttemplate) au support de la bibliothèque de printemps Protocole HTTPS?


0 commentaires

2
votes

variante pour la chaussure à ressort:

  1. Ajouter une dépendance: P>

    server:
        ssl:
            enabled: true
            key-store: /path/to/key.keystore
            key-store-password: password
            key-alias: alias
            trust-store: /path/to/truststore
            trust-store-password: password
    
  2. Fournissez un haricot de repose-dos: p> li> ol> xxx pré>

    1. Fournissez les propriétés SSL requises dans votre application.Properties ou application.YAML Fichier: Li> OL>
      @Bean
      private RestTemplate restTemplate() {
              SSLContext sslContext = buildSslContext();
              SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext);
      
              HttpClient httpClient = HttpClients.custom()
                      .setSSLSocketFactory(socketFactory)
                      .build();
      
              HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
      
              return new RestTemplate(factory);
          }
      
      private SSLContext buildSslContext() {
              try {
                  char[] keyStorePassword = sslProperties.getKeyStorePassword();
                  return new SSLContextBuilder()
                          .loadKeyMaterial(
                                  KeyStore.getInstance(new File(sslProperties.getKeyStore()), keyStorePassword),
                                  keyStorePassword
                          ).build();
              } catch (Exception ex) {
                  throw new IllegalStateException("Unable to instantiate SSL context", ex);
              } finally {
                  sslProperties.setKeyStorePassword(null);
                  sslProperties.setTrustStorePassword(null);
              }
          }
      


0 commentaires

0
votes

Vous pouvez définir quelques propriétés système pour sélectionner la confiance utilisée dans les clients

    System.setProperty("javax.net.ssl.trustStorePassword", "mypassword");
    System.setProperty("javax.net.ssl.keyStoreType", "jks");
    System.setProperty("javax.net.ssl.trustStore", "truststore_client");


0 commentaires