【PowerShell】証明書を使用して暗号化したパスワードを復号する

※ この投稿は PowerShell Advent Calendar 2011 に参加しています。 前回以下の投稿をしました。 【PowerShell】証明書を使用してパスワードを暗号化する 前回の投稿では、自己署名証明書を作成し、その証明書を使ってパスワードを暗号化しました。 今回は、前回暗号化したパスワードを証明書を使用して復号してみます。 前回は、makecert コマンドで作成した証明書の公開キーによってパスワードを暗号化しました。 今回は復号化する必要があるので、相手側には秘密キーを保持しておいてもらう必要があります。 ※なんか順番が逆ですが、今回はひとまず気にせず… 秘密キーを含んだ証明書をエクスポートする方法はおなじみですね。画面遷移を以下に示します。 せっかくなので、PowerShell を使用して秘密キー付証明書(.pfx)をエクスポートする方法も紹介しておきましょう。赤字の部分にはパスワードを入力してください。 $thumbprint = "13B97E99532151A1FC2617636CB04FE07C43C6C2" $Cert = get-item cert:\CurrentUser\MY\$thumbprint $bytes = $Cert.Export("Pfx","P@ssw0rd") [System.IO.File]::WriteAllBytes("c:\tmp\EncPassword.pfx", $bytes) 上記では Thumbprint を使用して証明書を取得していますが、以下のように証明書のファイル名を指定することも可能です。 $Cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("c:\tmp\EncPassword.cer") $bytes = $Cert.Export("Pfx","P@ssw0rd") [System.IO.File]::WriteAllBytes("c:\tmp\EncPassword.pfx", $bytes) 作成された証明書(.pfx)は、相手方(復号する側)の PC にインストールされていなければなりません。 証明書で暗号化した文字列を復号するには、以下のようなスクリプトを使用します。 ## 暗号化や復号化に必要な System.Security アセンブリを読み込む Add-type –AssemblyName System.Security ##暗号化したパスワードのBase64文字列 $Password…

0

【WP for ITPro】Windows Phone から直接 Active Directory 認証を行うには ~その4(完結編)

※この投稿は Windows Phone Advent Calender 2011 に参加しています ※こちらもお勧め Windows Phone Advent Calendar "ひとり" 2011 : ATND Windows Phone + Active Directory の 4 回目です。過去の投稿は以下より。 2011年11月28日 Tech Fielders セミナー 「Windows Phone に認証機能を実装する」で使用した資料、ソースコードは以下からどうぞ。当日の収録動画もあります。 2011/11/28 セミナー資料 Windows Phone アプリケーションに認証機能を実装する 前回までの作業で準備が整いました(かなり時間が空いてしまいましたが)。ここからは、実際に Active Directory Federation Service からセキュリティトークンを受け取ってみましょう。 極力シンプルなコードにするために、各パラメタはハードコーディングしますのでご容赦ください。 はじめに新しい Windows Phone のプロジェクトを作成します。選択するテンプレートは「Windows Phone アプリケーション」でよいでしょう。 プロジェクトが開いたら、前回作成したライブラリ(IdentityModel.WP7.dll)を「参照設定」に追加します。 MainPage.xaml ファイルをダブルクリックして開いてください。ここに、ボタンを2つ追加しておきます。1つは SSL 証明書をインストールするためのボタン、もう1つはログオンしてセキュリティトークンを受け取るためのボタンです。今回は極力シンプルにするためにユーザー名やパスワードなどは、すべてハードコーディングしてしまいます。なのでテキストボックスは使いません。 はじめに、AD…

0

【WP/Azure for ITPro】Windows Phone から Windows Azure AppFabric ACS を使用する

※この投稿は Windows Azure Advent Calender に参加しています Windows Phone で Windows Azure AppFabric Access Control Service からセキュリティトークンを受け取るにはためには、面倒なコードを書く必要があります。でも安心してください。うってつけのライブラリがあります。 必要なソフトウェアは以下の2つです。 Windows Phone SDK 7.1 Windows Auzre Platform Trainig Kit 2011 Novenver Update(英語版) Windows Phone SDK は Windows Phone アプリの開発環境なので、ここでの説明はよいでしょう。 ■Windows Phone 用 ACS コントロールの準備 重要なのは、Windows Azure Platform Training Kit(WAPTK) です。WAPTK を解凍すると、C:\WAPTK 配下に自習用のラボファイルが作成されます。この中に、Windows Phone 用のライブラリが用意されてます。 以下のフォルダが、Windows Phone 用の ACS用ライブラリです。…

0

【IDM】テキストファイルを AD FS のカスタム属性ストアとして登録してみる その1

やっとこの話題に触れることができます。なぜ触れなかったかというと、全くテストしていなかったから…すんません。 TechNet に以下の記事が用意されています。この記事では、独自の属性ストア(テキストファイル)を作成して実装する手順が紹介されています。 AD FS 2.0 Attribute Store Overview(英語) 英語ということもあり読むのも面倒ですし、せっかくなのでここでご紹介します。 AD FS の既定の属性ストアは以下の通りです。 Active Directory Domain Service Active Directory Lightwaight Directory Service SQL Server SQL Server を属性ストアとして使用する場合には、以下に示す手順に従って登録する必要があります。 【IDM】AD FS 2.0 で属性ストアとしてSQL Server を使用する では、これ以外の属性ストア(例えばテキストファイルとか Facebook とか)を使用したい場合にはどうしたらよいかといえば、独自のクラスライブラリを作成して、AD FS にカスタム属性ストアとして登録する必要があります。 クラスライブラリの仕事は何かというと、AD FS からクエリーを受け取り、指定された属性ストアからデータを検索して AD FSに返してあげる…とうことです。理屈は単純ですね。 そうすると、実装すべきものは見えてきます。 AD FS のお作法にのっとって、クエリーや結果の受け渡し部分をコーディング カスタム属性ストアにアクセスしてクエリーに合致したデータを検索する クエリーや属性ストアに不備があればエラーとしてAD FSに返してあげる といった感じです。単純ですね。 今回はテキストファイルをカスタム属性ストアとして使用しますが、作りさえすれば ORACLE だろうが OpenLDAPだろうが…

0

【PowerShell】Windows PowerShell を使用してメールに返信する

※この投稿は PowerShell Advent Calender に参加しています。 前回、以下の投稿をしました。 【Management】Windows PowerShell を使用して GMail や Office 365 からメールを送信する では、もう半歩だけ踏みこんで、PowerShell を使用してメールに返信するにはどうしたらよいか? なんで「返信」したいかというと、スレッド表示にしたいからです。多くのメーラーにはスレッド表示機能が実装されています。Outlook も例外ではありません。スレッド表示はとても便利です。ちなみに、Windows Phone に実装されている OUTLOOK Mobile もスレッド表示ができます。 スレッド表示をするには、返信されてきたメールに所定のヘッダーが埋め込まれている必要があります。それが、In-Reply-To ヘッダーと References ヘッダーです。正直、RFC を読み込んでいないのでアレなのですが(すんません…orz)、OUTLOOKの場合、In-Reply-To に埋め込まれている Message-ID を使用してスレッドを構成しているようです。ただ、In-Reply-To が無い場合には、References を参照しているみたいですね。 ここで、元のメールの Message-ID の値が xxxxxxxxxxx@mail.gmail.com だとしましょう。さらに、xxxxxxxxxxx@mail.gmail.com の親メールが yyyyyyyyyyy@mail.gmail.com だとしましょう。 このメールに返信するには、以下のようなスクリプトを書きます。以下の例では、gmail を使用して、user9999@gmail.com というユーザーがメールを送信しています。 ##SMTP認証するためのユーザーIDとパスワード $Cred_UserID = "user9999@gmail.com" $Cred_Password = "password" ##In-Reply-To にセットする Message-ID と…

0

【PowerShell】Windows PowerShell を使用して GMail や Office 365 からメールを送信する

超軽い話題を。 Windows PowerShell を使用してメールを送信するには Send-MailMessage コマンドレットを使用します。例えば、以下のように使います。 Send-MailMessage -To junichia@ms.com -From junichia@hoge.com -SmtpServer smtp.hoge.com -Credential junichia -Subject "パスワード未変更者へ" -Body "パスワードを変更してください!" -UseSsl -Credential はSMTPサーバーに接続するための資格情報です。事前に Get-Credential で設定してもよいですし、上の例のように指定すればパスワード入力のためのポップアップが表示されます。 このように、Send-MailMessage は簡単でとても便利なのですが、SMTP のポート番号を変更できないという難点があります。 例えば、Gmail 、Office 365 、Hotmail ともに、メッセージのサブミッション時には Port 587 を使用しています。そのため、Send-MailMessage を使用してメールを送信することができません。 では、どうしたらよいかというと、.NET Framework の Net.Mail.SmtpClient を直接使用します。 例えば、gmail の場合には SMTPサーバーは smtp.gmail.com なので 以下のように書きます。 $EmailFrom = “user@gmail.com” $EmailTo =”junichia@ms.com” $Subject = "タイトル"…

0

【Management】ターミナルサーバーのコマンドプロンプトからクライアント側のドライブを参照する

ものすごい恥ずかしい話をしていいでしょうか。 実は、今知りました。 もしかして世界で3人くらい、私と同様に知らない方もいらっしゃるかもしれないので念のために書き残します。 ターミナルサービスにログオンしたときに、ターミナルサービスクライアント側のローカルリソースをリダイレクトできることは知っています。 サーバー側にファイルを転送するときなんかは結構重宝していました。 ただ、ターミナルサービスセッションにファイル転送を乗せるため、インターネット経由なんかだと少々遅いのがタマにキズなんですね。 なので、少し大量にファイルをコピーしたいときなんかはバッチが使えるとうれしいのです。 でも、ターミナルサーバー側のコマンドプロンプトから、クライアントのローカルドライブってどうやって参照できるのだろう??と10秒くらい考えて、ふと net use してみたら… なんと、クライアント側のローカルドライブは、\\TSCLIENT というコンピューター名で見えていたんですね! 知らなかったぁ。。。。あぁ恥ずかしい。 これができれば、インターネット経由でターミナルサービスセッションに入り込む際に、ログオンスクリプトを使用してクラアントからサーバーにファイル転送を行ったり、その逆を行ったり、なんてことができてしまうわけですね。 私ならば、ターミナルサービスセッションでローカルと同じショートカットが使いたい、lnkファイルをコピーするかなぁと妄想してみたりしています。 便利な世の中だなぁ。運用設計が楽しくなりますね!

1

【WP for ITPro】Windows Phone から直接 Active Directory 認証を行うには ~その3

Windows Phone + Active Directory の3回目です。過去の投稿は以下より。 2011年11月28日 Tech Fielders セミナー 「Windows Phone に認証機能を実装する」で使用した資料、ソースコードは以下からどうぞ。当日の収録動画もあります。 2011/11/28 セミナー資料 Windows Phone アプリケーションに認証機能を実装する 前回までの投稿で AD FS を含めたテスト環境は整ったかと思います。今回はWPアプリへの認証機能の実装について振れるわけですが、その前にやらなければいけないことがあります。それは、AD FS と通信するためのライブラリの準備です。 前回までの投稿で書いたとおり、Windows Phone には System.DirectoryService が実装されていません。そのため、AD DS(Active Directory Domain Service)に対して直接認証を依頼することができません。そのために、Windows Phone と AD DS の間に AD FS を挟むわけです。 しかし、AD FS と通信するためには、WS-Trust というプロトコルを使用する必要があり、これを一からコーディングしていたのでは日が暮れてしまいます。そこで、既存のライブラリを使えないだろうか…と調べたところ、以下のようなすばらしい事例がありました。 aXelerate Blog | Using Active Directory authentication from Windows Phone…

1

【デプロイ王子】夜中に「デプロ~イ」と叫びたくなる動画

この BLOG 的には閑話…ですが、お好きな方にはたまらない動画をご紹介します。 何も言わずに、以下をご覧ください。 「WindowsAzureへの正しいデプロイとVIPスワップ」 | KAZUMI HIROSE 作者は hirose さん。2011年度 Install Maniax 5 の優勝者でもあります。 何をやっているかは一目瞭然。 Kinect を使用して Windows Azure にプロジェクトをデプロイしているわけです。VIPスワップもしちゃってますw。 動作上、「デプロイ」という掛け声が必要かどうかは??なのですが、それでもつい真似して「デプロイ!」と叫んでしまいたくなる動画です。 エンジニアのあるべき姿をしかと見せていただきました。 みなさん、Hirose さんに応援メッセージを! Facebook Twitter blog 気をよくした Hirose さんが、きっと「リブート!」とか「インスタンス インクリーズ!」とか「コマネチ!」とかも開発してくださるはずです。 合言葉は「ナイスデプロイ!」です。 2012年の流行語大賞目指してます。

0

【PowerShell】証明書を使用してパスワードを暗号化する

※ この投稿は PowerShell Advent Calendar 2011 に参加しています。 証明書というと、つい SSL で使用するサーバー証明書を思い浮かべてしまいますが、パスワードを暗号化してどこかに格納しておきたいとか、パスワードを誰かに伝えるために暗号化して渡したい..なんていうシチューエションにも証明書が使われることがあります。 パスワードを暗号化する場合、シードと呼ばれる文字列を決めておき、これを用いて暗号化するという方法が良く使われますが、この方法の場合、シード自身の漏えいを配慮する必要があります。そこで、よく使われるのが証明書を使用してパスワードの暗号化する方法です。証明書を使用する方法であれば、証明書がインストールされていなければ復号化することもできないため、文字列のシードで管理するよりは安全性が高まります。Windows Azure なんかでも、この方法を使用したパスワードの暗号化を要求されることが多く、IT Pro にとっても身に着けておきたい手法だと言えます。 証明書による暗号化は、PowerShell を使用すると簡単です。 1.証明書の準備 まずは暗号化に使用する証明書を作成しましょう。 証明書の作成は PowerShell ではなく、通常のコマンドを使用します。 ここでは自己署名証明書を使用することにします。自己署名証明書を作成する方法はいくつもありますが、代表的な方法は以下の2通りです。  IIS の管理コンソールで作成する Makecert コマンドを使用する 前者の場合、作成できる主体名は自分自身のみなので、ちょっと自由度が落ちるんですよね。ま、解凍できればよいので何でも構わないといえば構わないのですが…。 それよりも、Makecert コマンドを覚えて置いたほうが今後役に立ちます。Makecert コマンドは、Windows SDK に含まれているので、これをインストールしておく必要があることに注意してください。 Windows SDK for Windows 7 | MSDN makecert コマンドは、以下のような比較的深いパスにインストールされています。 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64 通常のコマンドプロンプトやPowerShellコンソールではパスが通っていないので、一度上記のフォルダに移動する必要があるので注意しましょう。 Makecert コマンドで証明書を作成するための書式は以下の通りです。以下の書式では、CN=Encpassword という主体名の証明書を、ハッシュアルゴリズム sha1…

1