30
Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved. OpenSSH のののの のののののの 2014 年 10 年 27 年 #ssmjp@conoha - GMO Yours

OpenSSHの認証に証明書を使う

Embed Size (px)

DESCRIPTION

2014年10月27日の「#ssmjp 2014/10」でLTした資料です。詳細はConoHaの技術ブログもご覧ください https://www.conoha.jp/blog/tech/3659.html

Citation preview

Page 1: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

OpenSSHの認証に証明書を使う

2014 年 10 月 27 日

#ssmjp@conoha - GMO Yours

Page 2: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

自己紹介

• ひろのぶ (@hironobu_s)

• Web 系開発 & インフラ屋

• 所属 :GMO インターネット

• 最近 ConoHa の中の人になりました

• 緑陣営 Lv7

Page 3: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

conoha.jpのブログ書いてます

Page 4: OpenSSHの認証に証明書を使う

1 分ではじめる、クラウドのような VPS

https://www.conoha.jp/unity1025

ConoHa VPS

• VPS ホスティングサービス

• 古い言い方だとレンタルサーバ

• 仮想サーバを 930 円から

• さまざまな OS に対応

Page 5: OpenSSHの認証に証明書を使う

1 分ではじめる、クラウドのような VPS

https://www.conoha.jp/unity1025

ConoHa クーポン• ConoHa のサービスを 3,000 円分使え

ます

• VPS でもオブジェクトストレージでも

• 新規アカウント登録すると、さらに 1,500 円分追加されます

• あわせて 4,500 円• 一番安いプランで 4 ヶ月分

Page 6: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

宣伝乙w

Page 7: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

SSHの認証方式

Page 8: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

SSHの認証方式• パスワード認証

• Obsolete

• 公開鍵認証

• 最もポピュラー?

• LDAP 認証

• 一元管理できるが、構築すると大がかり

• 弊社内はこれ。

Page 9: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

証明書認証• バージョン 5.4 からサポート

• CentOS などの 5.3 系でも使えます

• 独自 CA( 認証局 ) を作り、ユーザやホストの公開鍵に署名して証明書とする

• CA の鍵を信用し、 CA によって署名された証明書を持つユーザ / ホストを認証する方式

Page 10: OpenSSHの認証に証明書を使う
Page 11: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

公開鍵認証との違い公開鍵認証 証明書による認証

ユーザ認証

ユーザの公開鍵をサーバ上のauthorized_keys ファイルに追加する。サーバは乱数を生成し、ユーザの公開鍵で暗号化し送信。ユーザは暗号鍵で復号し乱数のハッシュ値を計算、それをサーバに送信。サーバはハッシュ値を照合する。

あらかじめユーザの公開鍵に CA が署名をする。またサーバは CA の公開鍵を保持する。ユーザは接続時に署名済みの公開鍵( 証明書 ) を送信し、サーバはそれを検証する

ホスト認証

ユーザの接続時に、サーバは自身の公開鍵とフィンガープリントを送信する。ユーザはそれを確認し、公開鍵を受け入れるかを決める

あらかじめサーバの公開鍵に CA が署名をする。ユーザは CA の公開鍵を保持しており、接続時にサーバから送信された署名済みの公開鍵 ( 証明書 ) を検証する。

Page 12: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

つまり

おおざっぱに言うと SSL/TLS と同じです。

Page 13: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

何が便利なのか• ホストには CA の公開鍵を設定しておけば良い

• ユーザの追加削除のたびに公開鍵の登録 / 削除が不要

• LDAP を構築するより運用もお手軽?( 規模による )

Page 14: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

こんなこともできる• ユーザをログイン禁止にしたい ( 証明書の失効 )

• 有効期限を設定したい ( 証明書に有効期限を設定する )

• 実際のユーザと、ログイン可能なシステムユーザを分けて管理したい (Principals の設定 )

• ユーザ毎にポートフォワード (port-forwarding) やエージェント転送 (agent-forwarding) の許可をしたい

Page 15: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

CA(認証局 )って何?

Page 16: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

Certificate Authority

 電子的な身分証明書を発行し、管理する機関。認証局、 CA 局または CA センターと呼ぶ場合もある。 CA には、“パブリック CA” と“プライベート CA” があり、前者は本人性を第三者が発行する証明書により証明するもので、電子商取引など不特定多数の広い範囲で運用される。

出典 : http://www.atmarkit.co.jp/aig/02security/ca.html

Page 17: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

難しそうに見えますが

• 要は鍵のペアです。• 普通に ssh-keygen で作った鍵ペアが、そのま

ま CA の鍵として使えます。• コマンドを見てもらった方がわかりやすいです

Page 18: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

やってみよう

Page 19: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

手順 (1)

[hiro@MBP]# ssh-keygen -f ca.keyGenerating public/private rsa key pair.Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ca.key.Your public key has been saved in ca.key.pub.The key fingerprint is:d8:c3:3e:0b:0e:e3:1d:de:f5:76:18:6a:76:2e:7d:80 hiro@The key's randomart image is:( 中略 )[hiro@MBP]# ls -ltotal 16-rw------- 1 hiro staff 1675 10 22 11:26 ca.key-rw-r--r-- 1 hiro staff 416 10 22 11:26 ca.key.pub

CA( 認証局 ) の鍵ペアを作る

Page 20: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

手順 (2)ユーザの鍵ペアを作る

[hiro@MBP]# ssh-keygen -f user.keyGenerating public/private rsa key pair.Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in user.key.Your public key has been saved in user.key.pub.The key fingerprint is:f6:fa:6d:a7:3c:10:f7:56:05:4d:d6:f8:d0:b8:19:e9 hiro@The key's randomart image is:( 中略 )[hiro@MBP]# ls -ltotal 32-rw------- 1 hiro staff 1675 10 22 11:26 ca.key-rw-r--r-- 1 hiro staff 416 10 22 11:26 ca.key.pub-rw------- 1 hiro staff 1675 10 22 11:35 user.key-rw-r--r-- 1 hiro staff 416 10 22 11:35 user.key.pub

Page 21: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

手順 (3)ユーザの公開鍵に CA 鍵で署名[hiro@MBP]# ssh-keygen -s ca.key -I user_root -n root user.key.pubSigned user key user.key-cert.pub: id "user_root" serial 0 for root valid from 2014-10-22T11:58:00 to 2014-10-23T11:59:53[hiro@MBP]# ls -ltotal 40-rw------- 1 hiro staff 1675 10 22 11:26 ca.key-rw-r--r-- 1 hiro staff 416 10 22 11:26 ca.key.pub-rw------- 1 hiro staff 1675 10 22 11:35 user.key-rw-r--r-- 1 hiro staff 1518 10 22 12:01 user.key-cert.pub-rw-r--r-- 1 hiro staff 416 10 22 11:35 user.key.pub

• -s: 署名に使用する秘密鍵を指定。• -I: 公開鍵に署名する際の Specify を指定。ログの記録名。• -n: Principal の指定。ログイン可能な UNIX ユーザ名を列挙。

←NEW!

Page 22: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

手順 (4)ログインしてみよう

[hiro@MBP]# ssh -v -i ~/.ssh/user.key [email protected]

debug1: Offering RSA-CERT public key: user.keydebug1: Server accepts key: pkalg [email protected] blen 1094debug1: ssh_rsa_verify: signature correct

↓ こんな表示が出るはず

Page 23: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

ハマったこと

Page 24: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

CentOS6はオプションが違う• CentOS6.5 に含まれる OpenSSH-5.3p1 の

ssh-keygen コマンド

• Principal を設定する重要な -n オプションが、別のオプションに割り当てられている。(Extract public key from smartcard)

Page 25: OpenSSHの認証に証明書を使う

CentOS6 の ssh-keygen の man ページ

Page 26: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

_人人人人人人_>  2つある < ̄ Y^Y^Y^Y^Y ̄

Page 27: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

つまり・・・• man も間違ってる

• CentOS6 の場合 -n オプションは Principal の設定として機能しない

• 署名ができない ( 署名に Principal の設定は必須 )

• 詰む

Page 28: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

• 一応、バグ報告は上がっていた

• https://bugs.centos.org/view.php?id=6904

• -n じゃなくて -Z に割り当てられていた

• man には書かれていない

• 知らんがな・・・

(CentOS7 では修正されてました )

Page 29: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

まとめ

• ユーザやサーバがそれなりに多い• けど LDAP を作るのは面倒だ• と言う場合にいいかも• 続きは Web で

https://www.conoha.jp/blog/tech/3659.html

Page 30: OpenSSHの認証に証明書を使う

Copyright (c) 2014 GMO Internet, Inc. All Rights Reserved.

ご清聴ありがとうございました