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

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

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

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

Q&A

解決済

1回答

8193閲覧

OpenSSLで作成するクライアント証明書とはどれを指すのでしょうか

ayako01

総合スコア27

OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

0グッド

1クリップ

投稿2016/12/27 07:51

###前提
googleAppsへのログイン時にアクセス制限をかけたく、要件は以下の通りです。
1)社内からのアクセスは制限しない(グローバルIPで制限)
2)社外からのアクセスは「クライアント証明書」が入った端末のみログインを可能にしたい

###前提と背景
サードパーティ製のシングルサインオン機能を導入予定であり、その製品では上記の要件が満たせることは確認済み。
要件の1)は問題なく稼働を確認し、2)ができない状態。

要件をクリアする機能は製品に備わっているようですが、製品の営業担当から「クライアント証明書の準備はお願いします。OpenSSLを使えばできます。」と言われ、それがハテナで苦戦している状態です。
(もちろん先方にも聞いてみてるのですが、イマイチ回答が分からずでここで質問させて頂きました。)

###発生している問題・エラーメッセージ
実際に社外のネットワークからクライアント証明書(と思っているもの)が入ったPCでアクセスすると、Chromeのエラー画面が表示される。

cert.hogehoge.net でログイン証明書が承認されなかったか、ログイン証明書が提示されていない可能性があります。 システム管理者にお問い合わせください。 ERR_BAD_SSL_CLIENT_AUTH_CERT

macOS 10.12.2
Google Chrome 55.0.2883.95 (64-bit)

###コンソールで叩いたコマンド

//1.CA局を作成 OpenSSL> req -new -x509 -keyout private/cakey.pem -out cacert.pem -days 3650 //2.署名要求書を作成 OpenSSL> req -new -nodes -out server/newreq.pem //3.証明書の発行 OpenSSL> ca -policy policy_anything -out server/cert.pem -infiles server/newreq.pem // 1.で生成されたもの C:\usr\ssl\bin\cacert.pem //このCA証明書は、シングルサインオン機能側からアップロードしました C:\usr\ssl\bin\private\cakey.pem //2.で生成されたもの C:\usr\ssl\bin\server\newreq.pem C:\usr\ssl\bin\privkey.pem //3.で生成されたもの C:\usr\ssl\bin\server\cert.pem //これがクライアント証明書?に相当するのか??

###質問内容
Chromeのエラー内容的には原因は以下かなと思ってます。
・クライアント側に証明書がインポートされていない
・クライアント側にインポートする証明書が間違っている
→私がクライアント証明書と思ってるファイルは本当にクライアント証明書なのか?
→違う場合はどのようにクライアント証明書を作成するのか

OpenSSLや証明書関連の一般的な知識不足とググり方の悪さが相まって、欲しい情報が拾えずかなり苦戦しております。
解決の糸口でもご教示頂けると幸いです。

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

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

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

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

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

ikedas

2016/12/27 10:33

そのサードパーティのSSO製品の名称とバージョンを明記すると、多少は回答の手がかりになるかもしれません。ただ、メーカの営業さんを通して確認するのがベストだと思います。
s.t.

2016/12/27 10:52

営業の人ひどいですね・・・
ikedas

2016/12/28 05:56

営業の人は別に悪くないですよ。
guest

回答1

0

ベストアンサー

まさに今日OpenSSLコマンドを叩いていました。

「『サーバ側が指定した認証局が署名した証明書』を見せれば通してやるよ」というのがクライアント証明書認証です。

クライアント証明書認証においては、登場人物は 認証局(CA) と クライアント の二人です。
それぞれ、KEY(秘密鍵)と CERT(公開鍵)、場合によっては CSR(署名要求) ができるので、ファイルは4つ~6つになるはずです。

作成する手順は以下のとおりです。「誰の何」を整理しながら作業してくださいね。

  1. 認証局の秘密鍵を作る。(同時に、署名されていない公開鍵ができる)。
  2. 認証局の(署名されていない)公開鍵をもとに、証明書署名要求を作る。
  3. 上位認証局に署名してもらい、認証局としての権威を得る。ただし今回の場合は権威が不要なので、自分で署名するので十分です。
  4. クライアントの秘密鍵を作る。(同時に、署名されていない公開鍵ができる)。
  5. クライアントの(署名されていない)公開鍵をもとに、証明書署名要求を作る。
  6. 認証局に署名してもらい、クライアントとしての立場を得る。

ここまで分かれば、質問で記載いただいたコマンドの組み合わせでできるはずです。

本来は、クライアントの秘密鍵はクライアント自身で作ってもらう必要がある(秘密鍵はおいそれとネットワーク上を流しちゃいけない)ので、いろいろと工夫する必要があるのですが、省きます。

このあとは、クライアントのブラウザから使えるところに、クライアントの秘密鍵(と公開鍵)を登録してやれば、ブラウザが自動的にその証明書をサーバに提示してくれます。

投稿2016/12/27 11:35

編集2016/12/27 11:38
matobaa

総合スコア2493

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問