2017-12-29 37 views
0

私はこれの初心者ですが、私は簡単な修正ではなく、もっと説明を求めています。自己署名証明書(中間CAを含む)を使用したSpringブートアプリケーションのデプロイ

私はHTTPS経由でSpring Bootアプリケーションをデプロイしようとしています(楽しく/テストするために、本番環境にはなりません)。最初に認証局(ルートと仲介)を作成してから、自分のアプリケーション用の証明書(localhost経由でアクセス)を作成し、中間CAを使用してこの証明書に署名しました。これを行うにはthisチュートリアルを使用しました。

次に、this答えを使用して、新しく作成したローカルホスト証明書をキーストアにインポートし、アプリケーションでデプロイします。 Chromeを通してアクセスされたとき、私は2つの問題を提示されました。

  1. 件名代替名がありません。このサイトの証明書には、ドメイン名またはIPアドレスを含むSubject Alternative Name拡張子は含まれていません。

  2. 証明書のエラーです。サイトの証明書チェーンに問題があります(net :: ERR_CERT_AUTHORITY_INVALID)。

私の問題点を正しく理解していれば、以下のことを行う必要があります。

  1. SANは、ドメイン名と一致する共通名に成功した証明書拡張の一種です。この拡張をlocalhost証明書に挿入する必要があります。私の問題は、どこでこれをしなければならないのか分からないことです。それは証明書の作成時ですか?

  2. なぜこれが起こっているのか分かりません。一方の端からは、私のCAは私が作成したものであり、確立されたCAではないので、これはいつも起こると感じていますが、私がオンラインで見ているものからは解決できますが、私はローカルホスト証明書をキーストアに注入しました。中間証明書も注入する必要がありますか?

また、上のチュートリアルに関する質問があります。 server_certとusr_certの違いは何ですか(Sign serverとClient certificateセクションの下にあります)。証明書はサーバーの証明書ですが、ユーザー認証を処理します。その場合、私はserver_certを正しく使用する必要がありますか?

+0

私は、このリソースのおかげでserver_cert拡張機能に拡張機能を追加することで、サブジェクト代替名の問題を解決することができました(https://alexanderzeitler.com/articles/Fixing-Chrome-missing_subjectAltName-selfsigned-cert-openssl/) –

答えて

0

私はそれを理解したように見えるので、私自身の質問に答える。

最初に、ルートCAと中間CAを作成する必要があります。前述のように私はthisチュートリアルに従った。非常に良いですが、強調すべきことがいくつかあります。

  1. ルートを作成openssl.cnfあなたroot/caフォルダの場所にディレクトリを設定してください。これは指示に明記されていますが、強調表示するのは良いことです。また、ルートCAを実行したときにそれらの準備が整うように、デフォルト(81〜86行目)も変更してください。あなたの中間openssl.cnfroot/ca/intermediateにディレクトリを変更し、デフォルト設定のデフォルト値を変更(行81-86)ルートopenssl.cnfのものと一致することを作成する場合

  2. ルート証明書を作成

    は良いコモンネームに
  3. を選びました。

  4. また、openssl.cnfの一部として、thisリンクごとにsubjectAltNameを追加する必要があります。 usr_certおよびserver_certの下に、subjectAltName = @alt_namesを加えます。これにより、証明書を作成するときに必要なサブジェクト代替名が追加されます。私はあなたが本当にserver_certのためにこれを必要と信じていますが、私はちょうど(私はuser_certとにかく使用していない)安全のために両方の下に追加しました。 DNS.1はlocalhostに正しく設定されています。

  5. 中間証明書を作成する場合、詳細はルート証明書のものと同じにする必要があります。したがって、手順3で組織の詳細をコピーする必要があります。共通名は異なる必要があります。

  6. 組織の詳細を作成する際には、非常に注意して共通名をlocalhostに設定することがあります。

  7. バージョンを(データの下で)3に設定されている署名されたサーバ証明書のチェックを確認

    は、被写体CNはlocalhostに設定され、X509v3 Subject Alternative NameDNS:localhostに設定されています。

あなたは、あなたがあなたのSringブートアプリケーションに提供するために、トラスト・ストアを作成する必要が行われます。私はthisのリソースを使いました。私は私がPKCS12は、新しい標準と春ですのでJKSに変換する気にしませんでした

openssl pkcs12 -export -inkey ./intermediate/private/localhost.key.pem -in cert-chain.txt -out cert-chain.p12 

次のコマンドを使用して

cat ./intermediate/certs/localhost.cert.pem ./intermediate/certs/intermediate.cert.pem ./certs/ca.cert.pem > cert-chain.txt 

は、その後、私は私の店を作成し、次のコマンドを使用して、私の証明書チェーンを作成しましたブートはこのフォーマットでうまく動作します。

次に、KeyStore Explorerを使用して、キーストアに正しい階層があるかどうかを確認しました。それは1つの証明書(localhost)を持っていました。私が証明書の階層を見ると、私はroot - > intermediate - > localhostを見ました。

次の事は私がsrc/main/resources下キーストアを入れたんでしたし、あなたがかもしれない春のセキュリティを使用している場合、私は私のYAMLのプロパティ内の次のプロパティファイル(通常の.propertiesファイルでも動作します)

server.port: 8443 
server.ssl: 
    key-store: src/main/resources/cert-chain.p12 
    key-store-password: secretpassword 
    keyStoreType: PKCS12 

を追加しましたまた、security.require-ssl: trueを使用する必要があります。

この時点ではERR_CERT_AUTHORITY_INVALIDと表示されますが、とにかく進むことができます。これは、ルート/中間CAがブラウザによって信頼されていないためです。ブラウザーで証明書を見ると、root - > intermediate - > localhost階層が再び表示されます。中間証明書をブラウザにインポートし、ブラウザを再起動します。緑の安全な南京錠が現れます。成功!あなたは今安全です!

注:時々、私はActive content with certificate errorsエラーを見ました。この場合、hereのようにサイトストレージを削除してください。

関連する問題