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

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

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

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

384閲覧

Coreserverで運用するシステムにクライアント認証を組み込みたい

Take_it

総合スコア357

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/06/26 00:25

こちらで質問させて頂いていいものかどうかわかりませんが・・・。
(不適切なものであればお許しください)

現状は、

1)ID/パスワード入力→メールにてワンタイムキー通知→ワンタイムキー入力でログイン確定。
2)ログイン時にランダム文字列発行→ハッシュ化したものを「接続キー」としてデータベースとセッションに保存
3)システム内でアクションを起こす(ページ遷移)たびに接続キーを照合→違っていれば排除、合っていれば新たな接続キーを発行
4)ページ遷移が生じない場合でも20分に一度は待機画面をリロードして接続キーを更新

こんな感じで意図しない外部からのアクセスを防いでいるWEBアプリケーションがあります。

しかし、サーバーのメンテナンスやら通信障害やらが発生すると、復旧のたびに1)のIDパスワード入力からやり直す必要があります。
そうするとワンタイムキーの受信ができるものが常駐しなければならず・・・使い勝手がよくありません。

クライアント証明書を使えば、IDパスワードの入力すら省略し、部外者のアクセスを阻みつつ、リロードするだけでいつでも復旧することができるのですが・・・

調べてみたのですが、coreserverに関してはサーバー側の証明書に関する情報しか出てこず。。

また、「特定の端末からしかアクセスできない」ようにできるのであれば、必ずしもクライアント証明書には拘りません。

皆様のお知恵を拝借できれば幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

クライアント証明書認証は主にサーバレベルでの設定が必要になるので、レンタルサーバなどでは難しいかと思います。
どうしてもクライアント証明書認証を使いたいのであれば、VPSサービスなどを契約して、自分でApacheやnginxなどのWebサーバを構築する必要があります。

また、「特定の端末からしかアクセスできない」ようにできるのであれば、必ずしもクライアント証明書には拘りません。

特定の端末からしかアクセスできないようにする方法ですか。。。
自分も昔そのようなことをやろうとしたことがあるのですが、完全な方法を見つけることは出来ませんでした。

タグにSSLがついていることからSSLを使っていると仮定しますが、端末に秘密の値が入ったCookieを設定してサーバ側でそのCookieの値を照合するなどを考えましたが、現状のやり方で、パスワードを入力した後にメールでワンタイムキーを送ってそれを認証させるということをやっているので、(Cookieはパスワードの代わりになっていると考えられるので)そのセキュリティが必須であれば難しいかもしれません。

また、Cookieを使う場合はsecure属性とhttponly属性をつけてJavaScriptから参照できないようにした方が(XSSなどの脆弱性があったときに秘密の値が漏れる危険を緩和できるので)いいかもしれません。

2)ログイン時にランダム文字列発行→ハッシュ化したものを「接続キー」としてデータベースとセッションに保存

3)システム内でアクションを起こす(ページ遷移)たびに接続キーを照合→違っていれば排除、合っていれば新たな接続キーを発行
4)ページ遷移が生じない場合でも20分に一度は待機画面をリロードして接続キーを更新

これに関してなのですが、接続キーをCookieでなくセッションに保存するのであれば、セッションのデータ自体はサーバ側に保存されて、クライアント側がCookieで送る「セッションID」という値に紐付くセッションのデータをサーバ側で自動的に読み込むようになっているので、接続キーを変えることは意味があまりないかと思います。どちらかというと、セッションIDをデータベースに保存したものと比較(session_id()関数で取得できます)、毎回のアクセスでsession_regenerate_id(true)を呼び出してセッションIDを更新、新しいセッションIDをデータベースに保存する処理をやったらいいかと思います。

投稿2019/06/29 00:07

stmkza

総合スコア478

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

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

Take_it

2019/09/10 13:21

すみません。ベストアンサー選んだつもりでそのままになってました(汗 回答頂いた通り、coreserverでは無理と判断しVPSを利用することにしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問