pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

Linuxのデバイス名が変わってしまった時は、、、

メモ

SAN接続したサーバで、カーネルアップデート後に、デバイス名が変わってしまった。
/dev/sda(ローカル)→/dev/sdb
/dev/sdb(SAN)→/dev/sda

気持ち悪いので、戻そうとしたが、ググっても情報がない。。。
偶然、上記URLを見付けたのでメモ。

※他参考デバイス関連調査コマンド
lspci -n -nn -v
lsusb -v
lsscsi -lll -v
lshw -numeric

※昔書いたページ(今回参考にした)
カーネルモジュールとデバイス管理 - 知らざるを知らずと為す是知るなり

NextSet SSO検証 & SAML2.0勉強メモ

NextSet SSOとNextCloudで検証してみた!
NextSet SSOは日本語が充実してて、使いやすかった!
動画も公開されてて、セットアップが短時間でできた!

環境

NextSet SSO(評価アカウント)
NextCloud Ver18.0.4

検証結果 & SAML2.0自分なりの理解メモ(かなり勘違いありかも!ただ動作確認はした!)

SAML2.0の主流なやりかたでは、SPとIdP間で直接通信しない
ブラウザ経由で認証結果をやりとりする(SAML Request & Response)
IdPで鍵ペア & SSO証明書を発行、SSO証明書をSPに設定
ブラウザがSPにアクセスするとIdPにリダイレクト (SAML Request付与)
IdPにログインするとSPにリダイレクトする(SAML Response付与)

※認証失敗時はリダイレクトせず

SAML Response、RequestともにXML形式
SAML Responseには以下が含まれる。


SSO証明書(SPに設定したもの、公開鍵含む)
署名対象(Assertion or Response)をハッシュ化した文字列(デジタル署名)
デジタル署名をIdPの秘密鍵で暗号化した文字列(シグネチャ)

SPはSAML Responseから以下点をチェックしログイン許可するかを判定してるのだろう(勝手な推測)

SSO証明書が同じか(?)
シグネチャをSSO証明書の公開鍵で復号したデータがデジタル署名と同じか
発行済みRequestに対するResponseか(どこ見てるのだろう?)

SAML ResponseのAssertion or Responseどちらを署名対象とするか設定できる

署名アルゴリズムも設定可能(sha1 or sha256)

SSO連携で、デジタル署名が使われる機能は以下。(★重要★)


1) IdP⇔SP間のHTTPS通信のSSL証明書のデジタル署名
2) IdP⇔SP間のSSO証明書のデジタル署名
3) IdP⇔SP間のSAML Responseのデジタル署名

3)で、
Assertion or Responseどちらを署名対象とするか?
またSHA-1 or SHA-256どちらを署名アルゴリズムとするか?
を設定する必要あり。

SSO証明書やSAML Responseのデジタル署名の設定変更しても、変更前にSPにログイン済みのセッションには影響なし

SPへのログインセッションはCookieで管理されてるからだろう。
FireFox SAML Tracerを見てても、ログイン後はSAML関連やりとりはなかった!

SAML2.0のDigest対象

メモ

f:id:pikesaku:20200518023753p:plain

XMLを署名では、AssertionとResponseどちらにあってもよいとなってる。
※以下がSAMPレスポンスのフォーマット。samlp:Response、saml:Assertionどちらのタグにds:Signatureをつけても良いという事だろう。

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="identifier_2" InResponseTo="identifier_1" Version="2.0" IssueInstant="2004-12-05T09:22:05Z" Destination="https://sp.example.com/SAML2/SSO/POST">
  <saml:Issuer>https://idp.example.org/SAML2</saml:Issuer>
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
  </samlp:Status>
  <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="identifier_3" Version="2.0" IssueInstant="2004-12-05T09:22:05Z">
    <saml:Issuer>https://idp.example.org/SAML2</saml:Issuer>
    <!-- a POSTed assertion MUST be signed -->
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
    <saml:Subject>
      <saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">3f7b3dcf-1674-4ecd-92c8-1544f346baf8</saml:NameID>
      <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
        <saml:SubjectConfirmationData InResponseTo="identifier_1" Recipient="https://sp.example.com/SAML2/SSO/POST" NotOnOrAfter="2004-12-05T09:27:05Z"/>
      </saml:SubjectConfirmation>
    </saml:Subject>
    <saml:Conditions NotBefore="2004-12-05T09:17:05Z" NotOnOrAfter="2004-12-05T09:27:05Z">
      <saml:AudienceRestriction>
          <saml:Audience>https://sp.example.com/SAML2</saml:Audience>
        </saml:AudienceRestriction>
    </saml:Conditions>
    <saml:AuthnStatement AuthnInstant="2004-12-05T09:22:00Z" SessionIndex="identifier_3">
        <saml:AuthnContext>
          <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
        </saml:AuthnContext>
    </saml:AuthnStatement>
  </saml:Assertion>
</samlp:Response>

IdP-Initiated SSOについて

メモ

・IdP-InitiatedとSP-Initiatedの2つのタイプのSSOがある
・違いはログイン時に最初にどっちにアクセスするか?
・IdP-InitiatedはIdPログイン後、SPにリダイレクトされSSOする。
・IdP-Initiatedの時は、IdPがSAMLリクエストを生成してる。
 ※SAMLリクエストには、ACS、SP URLの情報が含まれるべき。
 ※IdPに上記を設定する必要あり。

SAML2.0について

メモ

連携に必要な情報

注: このプロセスが開始される前に、パートナーは GoogleSSO サービスの URL とともに Google SAML レスポンスを確認するのに使う公開鍵を提供しなければなりません。

図(引用)

f:id:pikesaku:20200518003602p:plain


★認証リクエスト・結果はブラウザ経由でSP、IdPへ送られる★
★SPはブラウザが提供するIdP認証結果をデジタル署名で検証する→SPにIdPの公開鍵の事前登録が要★
★SPに設定する情報は以下★
 IdPの公開鍵
 IdPのURL
★IdPに設定する情報は以下★
 ACS(SAMLレスポンスを認証するSPのURL)
 鍵ペア、デジタル署名設定
★Assertionは、認証情報等をXMLで表現したもので、SAMLレスポンスに含まれる。

図説明(引用 & コメント追加)

2. GoogleSAML 認証リクエストを生成します。SAML リクエストはエンコードされ、パートナーの SSO サービスの URL に埋め込まれます。SSO URL には RelayState パラメータも埋め込まれます。このパラメータは、ユーザーがアクセスしようとしている Google アプリケーションのエンコードされた URLを含み、変更や検査なしで送り返される不透明な識別子です。

IdPへのリダイレクトURLに以下情報が含まれる。(エンコードはされる)
SAML認証リクエス
・SPのURL

4. パートナーは SAML リクエストをデコードし、GoogleACS(Assertion Consumer Service)とユーザーの宛先 URL(RelayState パラメータ)のために URL を抽出してから、ユーザーを認証します。パートナーは、有効なログイン認証情報を要求するか、有効なセッション クッキーを確認してユーザーを認証します。

ACSとは?SAMLレスポンスの送信先
セッションクッキー?どんな使い方?→IdPにログイン済みか判断

5. パートナーは、認証されたユーザーのユーザー名が含まれる SAML レスポンスを生成します。このレスポンスは、SAML 2.0 の仕様に従ってパートナーの DSA または RSA の公開鍵と秘密鍵でデジタル署名されます。

SAMLレスポンスがIdPの秘密鍵でデジタル署名される。

6. パートナーは SAML レスポンスと RelayState パラメータをエンコードして、その情報をユーザーのブラウザに返します。パートナーが提供するメカニズによって、ブラウザはその情報を GoogleACS に転送できます。たとえば、パートナーは SAML レスポンスと宛先 URL をフォームに埋め込み、クリックすると Google にフォームが送信されるボタンを表示することができます。また、自動的にフォームを Google に送信する JavaScript をページに含めることも可能です。

ブラウザに以下情報が渡される(エンコードはされる)
SAMLレスポンス
 ※ACSは通常SAMLレスポンスに含まれる。
・SPのURL

7. GoogleACS は、パートナーの公開鍵を使用して SAML レスポンスを確認します。レスポンスが正常に確認されると、ACS は宛先 URL にユーザーをリダイレクトします。

ACSが"SPのURL"に最終的にリダイレクトさせる。

DHとRSAについて(作成中)

ポイント

RSA・DHともに公開鍵暗号による鍵交換を実現する
RSAの鍵交換はPFSでないので非推奨、DHはPFSで推奨
RSAはDHと異なり認証機能もあり(デジタル署名で利用)
TLSではRSA+DHのハイブリッドが推奨???(RSAの鍵交換部分だけDH)

おまけ

以下のスノーデン事件の映画を見ました!面白かったです!
www.youtube.com
PFSはスノーデン事件と絡みあるみたい。勉強のやる気アップしたw