HTTPSは現在、基本的には、HTTPSを必要とする、特に公共のプログラムや開発期間のいくつかの小さな数を行うには、ますます人気になってきています。
しかし、HTTPS証明書はまだ非常に高価であり、個々の開発者は、各クラウドサービスプロバイダでの無料証明書を申請することができます。私は20のために適用することができ、1年間有効な印象を持っています。
今日、我々は我々のインターフェイスのためのHTTPSの設定、船団の護衛を開く方法を、と話をし、春のブートプロジェクトです。
httpsのプロフィール
のは、ウィキペディアの紹介によると、HTTPSが何であるかを見てみましょう:
HTTPSは、(ハイパーテキスト転送プロトコルセキュア)、略称:HTTPS、しばしばTLS、SSLまたはHTTPセキュア上HTTP上HTTPと呼ばれる)コンピュータ・ネットワークを介した送信のための安全な通信プロトコルです。HTTPS HTTPを介した通信が、データパケットを暗号化するSSL / TLSを使用するため。HTTPSの開発の主な目的は、データ交換のプライバシーと整合性を保護するために、Webサーバーの認証を提供することです。契約は1994年に初めてのNetscape(ネットスケープ)によって提案された後、インターネットに拡張。
歴史的に、HTTPS接続は、多くの場合、機密情報のネットワーク伝送上の支払取引と企業情報システムのために使用されています。2000年代後半と2010年代初頭には、広く実際のWebページのすべての種類を確認するために使用され、HTTPS、およびユーザーアカウントを維持することは、通信、アイデンティティやWebブラウジングのプライバシーを保護します。
加えて、安全なハイパーテキスト転送プロトコル(S-HTTP)、達成するHTTPセキュアな伝送があるが、広くHTTPSに使用され、HTTPセキュアな伝送が事実上実現なり、S-HTTP、広くサポートされていません。
準備
まず、私たちは自分の実験では、さまざまなベンダーから無料のクラウドサービスを申請することができ、HTTPS証明書を持っている必要がありますが、あまりにも面倒もする必要がないため、我々は直接のJava JDK管理ツールキーツールの助けを借りてくる無料のHTTPS証明書を生成することができます。
%JAVVA_HOME%\bin
ディレクトリ、デジタル証明書を生成するには、次のコマンドを実行します。
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore D:\javaboy.p12 -validity 365
コマンドの意味は次のとおりです。
- でgenkeyは、新しいキーを作成することを約束しました。
- 別名は、キーストアの別名を表します。
- keyalgは、暗号化アルゴリズムはRSA、非対称暗号化アルゴリズムであることが示されます。
- キーサイズは、キーの長さを表しています。
- これは、キーストア生成された鍵格納場所を表します。
- 有効期限は、日中のキーの有効期間を表しています。
最良の生成プロセスを以下に示します:
コマンドが完了した後、我々は、Dディスクのディレクトリにあるjavaboy.p12という名前のファイルが表示されます。図は次のとおりです。
あなたがファイルを持っていたら、私たちもOK仕事する準備が整いました。
httpsを導入
次は、プロジェクト内のhttpsを導入する必要があります。
リソースディレクトリ春ブーツを投影するコピーjavaboy.p12の上に生成されます。そして、次のapplication.propertiesを追加します。
server.ssl.key-store=classpath:javaboy.p12
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=111111
どこで:
- キーストアキーファイル名。
- キーの別名の鍵の別名を表します。
- キーストアパスワードはCMDコマンドパスワードの実行中に入力されます。
一度設定され、我々が直接インターフェイスにアクセスするために、HTTPプロトコルを使用している場合、あなたは、この時間を春ブートプロジェクトを開始することができ、次のエラーが表示されます。
以下の結果にアクセスするには、HTTPSを使用します。
私たち自身の世代のHTTPS証明書がブラウザによって認識されていないが、我々だけのアクセスを継続するためにそれをクリックして、重要ではありませんのためです(実際のプロジェクトでは、HTTPSのみ証明書に認識し、ブラウザを交換する必要があります)。
要求の転送
春ブーツを考慮すると、この問題を解決するために、我々はここで、ユーザがHTTPコールが自動的にHTTPSに転送されて送信するときに、要求を転送するように設定することができ、同時スタートのHTTPおよびHTTPSをサポートしていません。
次のように具体的な構成は次のとおりです。
@Configuration
public class TomcatConfig {
@Bean
TomcatServletWebServerFactory tomcatServletWebServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(){
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
factory.addAdditionalTomcatConnectors(createTomcatConnector());
return factory;
}
private Connector createTomcatConnector() {
Connector connector = new
Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8081);
connector.setSecure(false);
connector.setRedirectPort(8080);
return connector;
}
}
ここでは、HTTPリクエストポート8081は、8081からのすべての要求は、自動的にこののポート8080でhttpsにリダイレクトされます設定されています。
それでは、私たちは、要求が自動的にHTTPSにリダイレクトされますhttpに行きます。
エピローグ
Spring Boot 中加入 https 其实很方便。如果你使用了 nginx 或者 tomcat 的话,https 也可以发非常方便的配置,从各个云服务厂商处申请到 https 证书之后,官方都会有一个详细的配置教程,一般照着做,就不会错了。
关注公众号【江南一点雨】,专注于 Spring Boot+微服务以及前后端分离等全栈技术,定期视频教程分享,关注后回复 Java ,领取松哥为你精心准备的 Java 干货!