• https在springboot和RestTemplate中的使用


      一、HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1]  。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯。

      二、生成密钥(JDK生成方式)

      1、接收方(服务端)

    keytool -genkey -alias server -keyalg RSA -keystore server.jks

      

      2、接收方(服务端)导出证书

    keytool -export -file server.cer -alias server -keystore server.jks

        

      3、导出发送方密钥

    keytool -import -keystore client.jks -file server.cer -alias client

      

      4、最后有3个文件

      

      三、springboot作为服务端配置

    server:
      ssl:
        enabled: true
        key-alias: server
        key-store-type: jks
        key-store: classpath:jks/server.jks
        key-password: <password>
        key-store-password: <password>

      四、RestTemplate作为客户端配置

      1、需要在springboot的基础上加入httpclient依赖

            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
            </dependency>

      2、加入配置

    import org.apache.http.conn.ssl.NoopHostnameVerifier;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.ssl.SSLContextBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
    import org.springframework.web.client.RestTemplate;
    
    import javax.net.ssl.SSLContext;
    
    @Configuration
    public class RestConfiguration {
    
        @Bean
        public RestTemplate restTemplate() throws Exception {
            HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
            //超时配置
            factory.setReadTimeout(5000);
            factory.setConnectTimeout(2000);
            //https
            SSLContext sslContext = SSLContextBuilder.create()
                    .loadTrustMaterial(new ClassPathResource("jks/client.jks").getFile(), "<password>".toCharArray())
                    .build();
            //连接facotry
            SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
            factory.setHttpClient(HttpClients.custom().setSSLSocketFactory(socketFactory).build());
            return new RestTemplate(factory);
        }
    
    }

      五、总结https不是难在配置,也是难在加密方式。目前国内很多都有考虑采用国标加密算法,而不是RSA的方式,所以这里需要自行考虑。

            
  • 相关阅读:
    JQuery-文档处理&选择器
    JQuery-事件(部分)
    JS中构造函数与函数
    JS中的String.Math.Date
    JS中的_proto_(2)
    JS中的_proto_
    JS中的constructor
    mysql 安装问题
    【转】SpringMVC中DispatcherServlet配置中url-pattern 配置/*和/的区别
    【转】MySql中的函数
  • 原文地址:https://www.cnblogs.com/ll409546297/p/15830040.html
Copyright © 2020-2023  润新知