質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

4689閲覧

tomcatでクライアント証明書を有効にさせる方法について

ryu22

総合スコア9

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2018/09/06 02:59

・環境
OS:Windows2016
Apache Tomcat/7.0.85

tomcatを使用したWebサイトを構築しておりますが、クライアント証明書要求を有効に
させる設定がうまくいかず、構築に難航しております。

クライアント証明書設定が無効【clientAuth="false"】状態だと接続できるのですが、
有効状態にして接続すると
『このページに安全に接続できません
サイトで古いか安全でない TLS セキュリティ設定が使用されている可能性があります。
この問題が解決しない場合は、Web サイトの所有者に連絡してください。』
が表示され、接続に失敗しております。
※本来はクライアント証明書の選択画面が表示するはずですが、それも表示されません

設定した手順は以下となります。
1.鍵ストアと鍵ペアの生成
keytool -genkey -alias Alias名 -keyalg RSA -keysize 2048 -ext EKU=serverAuth,clientAuth -keystore キーストアファイル

2.CSRを生成し、サーバ証明書を発行
keytool -certreq -sigalg SHA256withRSA -alias tomcat -file CSRファイル -keystore キーストアファイル

3.発行されたサーバ証明書とルート証明書を連結し、インストール
keytool -import -alias Alias名 -file 連結したファイル.cer -keystore キーストアファイル

4.【server.xml】を編集し、クライアント証明書を有効化
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="キーストアファイル" keystorePass="パスワード" keyAlias="Alias名" truststoreFile="キーストアファイル" truststorePass="パスワード" sslEnabledProtocols="TLS" />

5.【web.xml】を編集し、アプリ側にクライアント証明書要求を設定
<login-config>
<auth-method>CLIENT-CERT</auth-method>
</login-config>

6.tomcatのJavaOptionに以下を追加

-Djavax.net.ssl.keyStore=キーストアファイル
-Djavax.net.ssl.keyStorePassword=パスワード
-Djavax.net.ssl.trustStore=キーストアファイル
-Djavax.net.ssl.trustStorePassword=パスワード

7.tomcatを再起動

となります。
設定に何か問題があると思われるのですが、どこが原因なのかが掴めない状況
となっております。
このような現象の場合の原因や対応方法について、何か情報がありましたら
教えていただけるようお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

安全でない TLS セキュリティ設定が使用されている可能性があります

とありますので、Tomcat7.0.xのデフォルトである TLS1.0 ではブラウザが拒否をしている感じでしょうか。CAが発行したサーバ証明書がTLS1.2まで対応できているなら、Tomcat側で設定をしてあげてください。

https://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html

xml

1<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 --> 2<Connector 3 protocol="org.apache.coyote.http11.Http11AprProtocol" 4 port="8443" maxThreads="200" 5 scheme="https" secure="true" SSLEnabled="true" 6 SSLCertificateFile="/usr/local/ssl/server.crt" 7 SSLCertificateKeyFile="/usr/local/ssl/server.pem" 8 SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"/>

Tomcatが動いているのがOracleJDK7以下であればTLS1.2に対応する設定が必要です。

Java7でTLS1.2を有効にする:http://developpp.blog.jp/archives/399844.html

解決できなかったらご容赦ください。

投稿2018/09/06 03:58

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryu22

2018/09/06 05:17

A-pZ様 回答、ありがとうございます。 sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="キーストアファイル" keystorePass="パスワード" keyAlias="Alias名" truststoreFile="キーストアファイル" truststorePass="パスワード" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" /> の形で設定し、Java7のオプションにも『-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2』を 追加してみましたが、状況は変わりませんでした。 証明書の発行・インポート手順にも何か問題があるのでは?とも考えてみたのですが、 何か特別な手順等は必要になりそうでしょうか?
A-pZ

2018/09/06 05:48

なるほどそれは失礼しました。他に考えられるところとしては、私の知る限り、CAの構築方法と、CSR作成からサーバ証明書、クライアント証明書の発行の箇所になにか問題があるのかもしれません。かつて書いたQiitaの記事ですが、参考になればよいのですが。https://qiita.com/alpha_pz/items/4cefda5110e622023acc
ryu22

2018/09/06 07:33

ご紹介いただきました記事を参考にし、設定の見直しを行いクライアント証明書を 有効化させることに成功しました、ありがとうございました。 なお、見直した手順としては、 1.keyAliasを【"tomcat" 】で依頼した証明書を使用し、「-trustcacerts」オプション 付で キーファイルにCA証明書をインポート、そのキーファイルに対してサーバ証明書をインポート keytool -import -alias ca -trustcacerts -file ルート証明書 -keystore キーストアファイル keytool -import -alias tomcat -trustcacerts -file サーバ証明書r -keystore キーストアファイル 2.server.xmlのSSLプロトコルの設定を以下に変更  sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2"  URLEncoding="UTF-8" 3.tomcatのJavaOptionに以下を追加 -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2 -Djavax.net.ssl.keyStore=キーストアファイル -Djavax.net.ssl.keyStorePassword=パスワード -Djavax.net.ssl.trustStore=キーストアファイル -Djavax.net.ssl.trustStorePassword=パスワード となります。 インポートの方法にも問題があったような感じです..
A-pZ

2018/09/06 10:30

それは良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問