1. ホーム
  2. ジャワ

Spring Boot による HTTPS アクセスの設定

2022-02-08 04:07:13

証明書の生成

  • 新しい証明書を作成する

keytool -genkeypair -alias hellowood -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore hellowood.p12 -validity 3650
Enter the keystore passphrase:
Enter the new password again:
What is your first and last name?
  [Unknown]: HellWood
What is the name of your organization?
  [Unknown]: HelloWood
What is the name of your organization?
  [Unknown]: HelloWood
What is the name of your city or region?
  [Unknown]: BJ
What is the name of your province/city/region?
  [Unknown]: BJ
What is the two-letter country/region code for this unit?
  [Unknown]: CN
Is CN=HellWood, OU=HelloWood, O=HelloWood, L=BJ, ST=BJ, C=CN correct?
  [No]: y

これにより  hellowood.p12 この証明書

すでに証明書をお持ちの場合は、その証明書をPKCS形式に変換することができます。

keytool -import -alias hellowood -file hellowood.crt -keystore hellowood.p12
// or
keytool -importkeystore -srckeystore hellowood.jks -destkeystore hellowood.p12 -deststoretype pkcs12

HTTPSの設定

を設定します。  hellowood.p12  に追加します。  resources/

application.properties

# SSL config
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:hellowood.p12
server.ssl.key-store-password=123456
server.ssl.key-alias=hellowood
server.ssl.enabled=true

インターフェースの追加

@RestController
public class BaseController {

    @GetMapping("/")
    public String root() {
        return "HelloWood";
    }
}

アプリケーションを起動すると、ログにHTTPSで起動したことが表示されることがわかります
2018-12-31 21:54:07.940 INFO 24001 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat はポート (s): 8080 (https) でコンテキストパス ''で起動しました。
http://localhost:8080 にアクセスすると、アクセスに HTTPS が必要であることを示すプロンプトが表示されます。
curl http://localhost:8080/
不正なリクエスト
このホストとポートの組み合わせはTLSを必要とします。
https://localhost:8080 にアクセスすると、正常に HelloWood を返します。
curl --insecure https://localhost:8080
ハローウッド
HTTP を HTTPS にリダイレクトする
HTTPポートを追加するようにポートを修正する(application.properties)

server.port=8443
server.port.http=8080

リダイレクト設定の追加

ConnectorConfig.java
import org.apache.catalina.Context;
import org.apache.catalina.connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation;
import org.springframework.context.annotation;

@Configuration
public class ConnectorConfig {

    @Value("${server.port.http}")
    private int serverPortHttp;

    @Value("${server.port}")
    private int serverPortHttps;

    @Bean
    public ServletWebServerFactory servletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection securityCollection = new SecurityCollection();
                securityCollection.addPattern("/*");
                securityConstraint.addCollection(securityCollection);
                context.addConstraint(securityConstraint);
            }
        };
        factory.addAdditionalTomcatConnectors(redirectConnector());
        return factory;
    }

    private Connector redirectConnector() {
        Connector connector = new Connector(Http11NioProtocol.class.getName());
        connector.setScheme("http");
        connector.setPort(serverPortHttp);
        connector.setSecure(false);
        connector.setRedirectPort(serverPortHttps);
        return connector;
    }
}

curl -v http://localhost:8080
* Rebuilt URL to: http://localhost:8080/
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 302
< Cache-Control: private
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Location: https://localhost:8443/
< Content-Length: 0
< Date: Mon, 31 Dec 2018 14:31:44 GMT
<
* Connection #0 to host localhost left intact

アプリを再度起動し、HTTPとHTTPSのポート情報を含むログを確認します。
2018-12-31 22:17:47.113 INFO 24612 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8443 (https) 8080 (http) with context path ''(Tomcatはポートで起動しました)。
http://localhost:8080 にアクセスすると、https://localhost:8443 にリダイレクトされます。

https://localhost:8443

  • アクセス方法  HelloWood curl https://localhost:8443 --insecure HelloWood% 通常復帰
    HelloWood
    
    curl https://localhost:8443 --insecure
    HelloWood%
    
    
    
    
    
    
    

取得元:https://www.cnblogs.com/powerwu/articles/10981056.html