FIDO-U2F絡みのメモ1
_muili.
二段階認証セキュリティキー(U2F)対応の認証ページを作るための私的メモ。環境はCentOS7/Apache+OpenSSL/PHP。まずはデモが動くよう環境を整える。
環境
- FIDO U2F Security Key
-
- ※ここではyubiko-neoを使用。
- U2F-API
- php-u2flib
- ※一部サンプルを動作させるには、PHP5.5以上が必要。try-finally句がある。
- ※U2Fの仕様でSSL認証(HTTPS接続)が必須。
- ※一部サンプルを動作させるには、PHP5.5以上が必要。try-finally句がある。
- サーバ
- (windows7/virtualbox)
- CentOS Linux release 7.2.1511 (Core)
- Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.5.36
- 192.168.56.100
- CentOS Linux release 7.2.1511 (Core)
- クライアント
- Chrome38以降はプラグイン導入不用
- 38未満のスタンドアローン版なら必要かも。
FIDO U2F (Universal 2nd Factor) extension for Chrome - 38未満のスタンドアローン版なら必要かも。
関連パス
- SSLCertificateFile
- /etc/httpd/conf/server.crt
- SSLCertificateKeyFile
- /etc/httpd/conf/server.key
- DocumentRoot
- /var/www/html
- U2F-API
- /var/www/src/u2flib_server/U2F.php
- U2F-PDO(demo)
- /var/www/html/pdo/index.php
- App-ID
- /var/www/html/app-id.json
PHP5.5
- 破棄
- # yum remove php
- 導入
- # yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
- # yum install --enablerepo=remi,remi-php55 php pdo
HTTPS対応
- 導入
- # yum install openssl mod_ssl
- SSL証明書の発行(dummy)
- # cd /etc/httpd/conf
- # openssl genrsa -aes128 1024 > server.key
- # openssl req -new -key server.key > server.csr ## country state local common
- # openssl x509 -in server.csr -days 36500 -req -signkey server.key > server.crt
- # openssl genrsa -aes128 1024 > server.key
- 鍵の再発行が必要になった場合
- # mv server.key server.key.bak
- # openssl rsa -in server.key.bak > server.key
- SSL証明書の設定
- # vim /etc/httpd/conf.d/ssl.conf
## 100行目付近 SSLCertificateFile /etc/httpd/conf/server.crt ## 107行目付近 SSLCertificateKeyFile /etc/httpd/conf/server.key
- 関連サービスの有効化
- # service httpd restart
- # firewall-cmd --permanent --add-service=https
- # firewall-cmd --reload
- # firewall-cmd --permanent --add-service=https
ライブラリ(APIとdemo)
- 取得
- $ git clone https://github.com/Yubico/php-u2flib-server.git
- 設置
- $ cp -prf php-u2flib-server/src /var/www
- $ cp -prf php-u2flib-server/examples/pdo /var/www/html
App-ID
- 設置
- $ vim /var/www/html/app-id.json
{ "trustedFacets" : [{ "version": { "major": 1, "minor" : 0 }, "ids": [ "https://192.168.56.100" ] }] }
アクセス
- URL
- https://192.168.56.100/pdo/
- 注意点
- 見た目、どこまで遷移しているか分からない。
- chromeで[F12]/[CS-J]を押しconsoleを表示させておく。
- 流れ
- yubico-neoをUSB端子に挿しておく(認証前ならいつでも構わない)
- ブラウザでURLに接続
- ユーザ名入力
- registerかauth..を選ぶ
- [submit]押す
- 1次認証失敗(yubico-neo非点滅)(END)
- 1次認証成功(yubico-neo点滅)
- (chrome-consoleに何らか出る)
- yubico-neoの丸い凹んだ部分に接触
- 2次認証可否
- ブラウザでURLに接続