OpenSSHの認証に証明書を使う

  • View
    1.065

  • Download
    1

  • Category

    Internet

Preview:

DESCRIPTION

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

Citation preview

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

OpenSSHの認証に証明書を使う

2014 年 10 月 27 日

#ssmjp@conoha - GMO Yours

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

自己紹介

• ひろのぶ (@hironobu_s)

• Web 系開発 & インフラ屋

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

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

• 緑陣営 Lv7

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

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

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

https://www.conoha.jp/unity1025

ConoHa VPS

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

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

• 仮想サーバを 930 円から

• さまざまな OS に対応

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

https://www.conoha.jp/unity1025

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

ます

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

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

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

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

宣伝乙w

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

SSHの認証方式

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

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

• Obsolete

• 公開鍵認証

• 最もポピュラー?

• LDAP 認証

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

• 弊社内はこれ。

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

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

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

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

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

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

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

ユーザ認証

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

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

ホスト認証

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

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

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

つまり

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

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

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

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

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

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

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

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

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

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

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

CA(認証局 )って何?

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

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

難しそうに見えますが

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

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

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

やってみよう

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( 認証局 ) の鍵ペアを作る

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

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!

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

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

[hiro@MBP]# ssh -v -i ~/.ssh/user.key root@example.com

debug1: Offering RSA-CERT public key: user.keydebug1: Server accepts key: pkalg ssh-rsa-cert-v01@openssh.com blen 1094debug1: ssh_rsa_verify: signature correct

↓ こんな表示が出るはず

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

ハマったこと

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

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

ssh-keygen コマンド

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

CentOS6 の ssh-keygen の man ページ

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

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

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

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

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

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

• 詰む

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

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

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

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

• man には書かれていない

• 知らんがな・・・

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

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

まとめ

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

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

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

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

Recommended