FIDO-U2F絡みのメモ1

二段階認証セキュリティキー(U2F)対応の認証ページを作るための私的メモ。環境はCentOS7/Apache+OpenSSL/PHP。まずはデモが動くよう環境を整える。

環境

FIDO U2F Security Key
yubico-neo
※ここではyubiko-neoを使用。
U2F-API
php-u2flib
※一部サンプルを動作させるには、PHP5.5以上が必要。try-finally句がある。
※U2Fの仕様でSSL認証(HTTPS接続)が必須。
サーバ
(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
クライアント
Chrome38以降はプラグイン導入不用
38未満のスタンドアローン版なら必要かも。
FIDO U2F (Universal 2nd Factor) extension for Chrome

関連パス

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
鍵の再発行が必要になった場合
# 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

ライブラリ(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次認証可否