Spring boot構成SSL証明書


背景
今やっているプロジェクトでは、一部の機能がウィジェットに確立されているので、ウィジェットがリクエストを開始し、バックグラウンドをリクエストするときはhttpsしか使用できず、サーバのドメイン名に対してhttps を行うので、証明書の構成の問題を考慮しなければなりません.
ここで先に宣言する必要があります.ドメイン名証明書がまだありませんので、ローカルを使用しています. . は開発時にしか使用できません.小さなプログラムがオンラインになると、証明書は失効します.
証明書は様々な方法で入手でき、構成の過程がほぼ一致しているので、自分で構成するときに交換に注意すればいいです.
自己署名証明書
実験を開発するために、 をローカルに生成する必要があります.証明書を生成するには、JDKに付属のkeytoolツールを直接使用します.
まずjdkのbinディレクトリを見つけます.
次に、コマンドラインがファイルに対応するパスに入り、次のコマンドを入力します.
keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 3650

プロンプトに従って、次の情報を入力します.
覚えておきなさい 、これは後で使います
最後に、現在のディレクトリの下に証明書が生成されます.
アプリケーションを構成します.properties
生成した証明書をプロジェクトディレクトリに移動します.
次に、application.propertiesファイルを構成します.
# SSL      
# https    
server.port=7443
#     
server.ssl.key-store=classpath:keystore.p12
#     
server.ssl.key-store-password=              
#     
server.ssl.key-store-type=PKCS12
#     
server.ssl.key-alias=tomcat

注意深い読者は、ここの構成が証明書を作成するときに使用するコマンド式に対応していることを発見します.
httpからhttpにリダイレクト
私たちの元の要求方式はhttpだったので、今httpsを使いたいなら、リダイレクトしなければなりません.前の衝突とはできません.
package com.yunzhiclub.alice;

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class AliceApplication {

    public static void main(String[] args) {
         SpringApplication.run(AliceApplication.class, args);
    }

    /**
     *      TomcatServletWebServerFactory bean
     *  http      https
     * @return
     */
    @Bean
    public TomcatServletWebServerFactory servletContainer() {

        TomcatServletWebServerFactory  tomcat = new TomcatServletWebServerFactory () {

            @Override
            protected void postProcessContext(Context context) {

                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
        return tomcat;
    }

    /**
     *         HTTP     ,        HTTPS,
     *        application.properties       connector,
     *            HTTP connector,      HTTPS connector
     * @return Connector
     */
    private Connector initiateHttpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080); // http  
        connector.setSecure(false);
        connector.setRedirectPort(7443); // application.properties    https  
        return connector;
    }
}

テスト
ブラウズ中にバックグラウンドインタフェースをリクエスト
正しい要求.
まとめ
自分で生成した証明書は、ブラウザから安全ではないと見なされるので、オンラインになる項目は、正規のSSl証明書を申請しましょう.
関連リファレンス:https://blog.csdn.net/MasonQA...https://blog.csdn.net/m0_3812...