2010年9月6日月曜日

Windows 2008 R2で無線LAN認証

証明書の期限が近付いたら自動更新するような証明書を作りましたが、1点問題がありました。無線LAN(EAP-TLS)で認証する際にクライアントで、「該当する証明書が見つかりません」というようなエラーが表示され、無線LANにつながらないのです。
解決方法を調べてみましたがなかなか見つかりませんでしたが、ついにわかりました。
原因はユーザーテンプレートを複製する際に「Windows Server 2008 Enterprise」を選択していたことだと思われます。
というのも、「Foundation Network Companion Guide: Deploying Computer and User Certificates」に沿って作業したところ、あっさりつながったのです。
以下に、無線LANにつながる自動更新可能な証明書テンプレートを作成する際の注意点をまとめておきます。

  •  証明書テンプレートコンソールで複製する証明書は「ユーザー」とする。
  •  テンプレートは「Windows Server 2003 Enterprise」を選択する。
  •  「セキュリティ」タブでは「Domain Users」に「読み取り」、「登録」および「自動登録」をチェックする。

これでドメインユーザーに対して自動配布かつ自動更新可能な証明書を展開することができます。

2010年9月3日金曜日

Windows 2008 R2での証明書自動更新 その3

最終的にはグループポリシーで自動的に証明書を展開したいところですが、先ずは手動で証明書をインストールします。

  1. クライアント側でmmcを起動し、証明書スナップインを追加します。

  2. 次に、「証明書-現在のユーザー」→「個人」→「証明書」のコンテキストメニューから「すべてのタスク」→「新しい証明書の要求」をクリックします。

  3. 「証明書の登録」の「証明書の登録ポリシーの選択」で「Active Directory登録ポリシー」を選択します。

  4. 以前作成した自動更新可能な証明書テンプレートを選択し、「登録」ボタンをクリックしローカルに証明書をインストールします。
無事クライアントへ証明書がインストールできました。

Windows 2008 R2での証明書自動更新 その2

引き続いて証明書の自動更新について調査です。

Windows Server 2008 R2 Standard(以下Win2008R2とします)にて自動更新が可能なVersion 2以降の証明書テンプレートが利用できることが分かったところで、実際に証明書の自動更新が可能な環境を作ってみます。
尚、前提条件として
  • Active DirectoryスキーマがWin2008となっている
  • Active Directory証明書サービス(エンタープライズのルート)がインストール済み
であることとします。

AD証明書サービスのベストプラクティスアナライザーでスキャン

最初にWin2008R2のサーバーマネージャーで「役割」→「Active Directory証明書サービス」をクリックし、「ベストプラクティスアナライザー」で「この役割をスキャン」をクリックします。
その結果、

  • 「ユーザー自動登録のグループポリシーが有効になっていません」
  • 「コンピューター自動登録のグループポリシーが有効になっていません」
と表示されました。ので、先ずはユーザー証明書の自動更新から対処します。
対応方法としては、「AD CS: User autoenrollment should be enabled when an enterprise CA is installed」に記載されています。
その手順の概要は、
  1. デフォルトドメインポリシーで公開鍵の自動更新を有効にする
    (「ユーザーの構成」→「ポリシー」→「Windowsの設定」→「セキュリティの設定」→「公開キーのポリシー」の「証明書サービス クライアント - 自動登録」で「構成モデル」を有効にする)

  2. 自動更新用に証明書テンプレートを設定
    (「ユーザー」テンプレートの複製を適当な名前で複製します。その際、「セキュリティー」タブで「Domain Users」に「読み取り」と「自動更新」、「登録」の権限を設定しておきます。)

  3. エンタープライズCAに証明書テンプレートをアサインする
    (certserv.mscを起動し「証明書テンプレート」のコンテキストメニューで「新規作成」→「発行する証明書テンプレート」→2で作成したテンプレートを選択す・・・???)
2で作成したテンプレートを選択しようとしたところ、なぜか表示されず。ググってみたところ、追い打ちをかけるように「Troubleshoot Active Directory Certificate Services」で、
I cannot add a new version 2 or version 3 certificate template to my CA.
  • Cause: The CA is installed on a server running Windows Server 2008 R2 Standard or Windows Server 2008 Standard. Version 2 and version 3 certificate templates and certificate autoenrollment can only be used with CAs installed on Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Datacenter, Windows Server 2008 Enterprise, or Windows Server 2008 Datacenter.

  • Solution: Upgrade to Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Datacenter, Windows Server 2008 Enterprise, or Windows Server 2008 Datacenter.
と(赤はこちらでいれたものです)。マイクロソフト内でも認識が統一されていないのか、相変わらず「R2 StandardではV2、V3の証明書テンプレートはCAに追加できないよ」と記載されています。

で、さらに調べたところ「You cannot add V2 or V3 templates after an inplace upgrade was performed using Windows Server 2008 enterprise CA」では、

-Symptom

V2 and V3 templates are not available if an inplace upgrade was performed from a Windows Server 2003 or 2008 Certification Authority (CA) to a Windows Server 2008 enterprise CA.

-Cause

The enterprise features are missing because the underlying SKU is standard.

-Solution

To fix the problem, follow these steps:





1. Close the Certificate Services MMC snap-in.

2. Run the following commands from an elevated command-line on the CA computer:



certutil -setreg ca\setupstatus +512

net stop certsvc

net start certsvc

When you re-open the Certificate Services MMC snap-in, you will be able to assign V1, V2 and V3 certificate templates to the certification authority.


まさに、今現象に今ぶち当たっているわけで、該当するサーバーはWin2008StandardからR2へアップグレードしたものでした。
というわけで、記載の通り対処したところ、めでたく2で作成した証明書テンプレートが一覧に表示されるようになりました。

Windows 2008 R2での証明書自動更新 その1

社内でWindows 2008 R2 StandardサーバーをドメインコントローラーとしたActive Directory環境を運用していますが、先日あるユーザーの証明書が期限切れになってしまい、証明書の自動更新について調査してみました。


証明書テンプレートの種類について

証明書はそのテンプレートに沿って発行されますが、証明書テンプレートにはいくつかの種類があります(参照)。

  • Version 1
    一般的な証明書要件をサポート。
    変更できるプロパティはアクセス許可のみ。

  • Version 2
    Windows Server 2003から導入。
    証明書の要求、発行、使用方法を管理者が管理できる。
    証明書の自動登録がサポートされる。

  • Version 3
    Version 2の機能+Suite B暗号化アルゴリズム
Windows Server 2008 R2に関しては全てのエディションがVersion 1~3をサポートします(「Active Directory Certificate Services Features by SKU」)。

となると、
 「Windows Server 2008 (R2) からでもはじめたい Windows PKI」
に書いてある、
 

- 補足情報 (エディション情報)

Windows Server OS には以下のエディションがあります。

「Standard」「Enterprise」「Datacenter」

ちなみに、以下の機能は、「Enterprise」 と 「Datacenter」 エディションのみがサポートしており、Standard エディションはサポートしていない機能となります。

  • テンプレートの複製や編集
  • 証明書自動発行
  • キーのアーカイブ

は、間違った情報なのかしら。

2008年5月8日木曜日

muninでWindowsを監視 -muninのインストール-

muninで複数のホストを集中監視したいので、WindowsのSNMPを取得してグラフ化できるようにしました。
ここでは
  • OS: CentOS-5
  • munin: 1.3.4
  • 監視対象: Windows 2003サーバー
とします。

まずはmuninのインストール。途中で抜けているかもしれませんがご容赦を。基本的にはmunin-1.3.4/INSTALLにすべて書いてあります。
インストールの前にまずはグループ:munin、ユーザー:muninを作成しておきます。次にmunin-1.3.4ディレクトリ配下で、

# make install-main
.......... munin自体のインストール
# make intstall-node && make install-mode-plugins
.......... munin-nodeとプラグインのインストール

を行います。インストールされるディレクトリ等の調整はMakefile.configで行ってください。
SNMPを利用した監視を行いたいので、net-snmpがインストールされていなければyum等でインストールしてください。
次にperlモジュールNet::SNMPをインストールします。

# perl -MCPAN -e shell
cpan[1] > install Net::SNMP
.......... Net::SNMPモジュールと依存モジュールがインストールされる
これで準備完了。

VMware仮想ディスク容量の拡張

VMware Infrastructure上で動作しているWindows 2003サーバー(WSUSとして動作)のディスク容量がひっ迫してきたので、仮想ディスクを拡張してみました。
仮想ディスクの拡張方法を調べようとググってみたところ、vmware-vmvdiskmanagerを利用する方法がヒットしたけど、VI3.0にはそんなものないしと思ってVMware Infrastructure ClientのVirtual Machine PropertiesでHard Diskを見るとどうやら容量を変更できることが判明。
というわけでその方法です。

  1. 念のため容量を変更するVMのバックアップを取得する。
  2. VMをシャットダウンし、VMware Infrastructure Clientで容量を変更するVMのプロパティでHard Diskを選択。
  3. Capacityで適当な容量を指定して、VMを起動する。
  4. VM(Windows 2003)が起動したら、あとは@ITの記事のようにコマンドを実行するだけ。
というわけで思ったより簡単に済みました。

2008年4月17日木曜日

Symantec Endpoint Protection 11.0 MR1の適用

Symantec Endpoint Protection 11.0を社内で導入しておりMR1の適用を考えて不具合の検索をしたところ・・・

 【不具合】Symantec Endpoint Protectionの手動スキャンでウィルスチェックが実行されない場合がある (Windowsな日々, 2008.03.17)

が引っ掛かりアップデートを躊躇。どうやらMR2にてこの問題は解消するらしいが、MR2 + Windows Server 2008/Vistaでは、

 You receive a "Stop 0x000000E3" error message when Symantec Endpoint Protection MR2 quarantines a file in Windows Vista or in Windows Server 2008

なので、MR2の適用も見送り決定。Symantecってアップデートのリリース時にこうゆう脇の甘さが散見されるので、すぐに飛びつかないように心がけてます、ハイ。

VMware VI 3.5 Update1の適用

社内でVMWare Infrastructure 3.5を使用しており、4/10にリリースされたアップデート1を適用しようと思いその状況を検索した結果・・・・

VMware VI 3.5 Update 1の問題からパニックが発生 (20080414-1)


の中で、

最大の問題は、ビルド番号を見ると用意されたコードがUpdate 1用のものでない点だ。サイトにある最終ビルド番号は84782だが、ダウンロードしたものはビルド84767というバージョンをインストールする(この矛盾はMD5署名のミスマッチでも確認された)。

この誤ったビルドは、プラグインが無効になる、VirtualCenter Clientがクラッシュする、ゲストOSテンプレートが消える、カスタマイズできなくなるなど、アップグレードを試みた不運な初期導入者にあらゆる技術的問題を引き起こした。

という状況であることが判明。よってこの作業は2カ月程度ペンディング。

2008年3月21日金曜日

SpringFrameworkとHibernateの連係 -HibernateDaoSupport編-

HibernateDaoSupportを利用したSpringFrameworkとHibernateの連係を調べてみました。
 参考: Implementing Spring-based DAOs without callbacks

HibernateTemplateを利用してDAOを実装する代わりに、Hibernateアクセスコードをコールバック内にラップすることをせずに、データアクセスコードを従来の方法で記述することも可能です。HibernateDaoSupportを基にしたクラスは、従来のトランザクションベースのセッションや、例外の変換メソッドを備えています。これらのコードは、トランザクション内で必ず処理させるため、getSession()メソッドのallowCreateに通常falseを渡します。

public class HibernateProductDao extends HibernateDaoSupport implements ProductDao {

public Collection loadProductsByCategory(String category) throws DataAccessException, MyException {
Session session = getSession(false);
try {
Query query = session.createQuery("from test.Product product where product.category=?");
query.setString(0, category);
List result = query.list();
if (result == null) {
throw new MyException("No search results.");
}
return result;
}
catch (HibernateException ex) {
throw convertHibernateAccessException(ex);
}
}
}

この手法の長所は、データへアクセスするコードでアプリケーション独自の例外をスローできる点です(一方HibenrateTemplateクラスでは、callback内でアプリケーション独自の例外をスローすることはできません)。但し、独自のチェックルーチンや例外をcallbackの後に実装することもできるので、依然HibernateTemplateを利用できます。
一般的には、HibernateTemplateクラスの便利なメソッドはシンプルで、たいていの場合に適しています。

「つまりたいていの場合はHibernateTemplateを使ったほうがいいよ」ということでしょうか。

2008年3月19日水曜日

Hibernateの設定


Hibernateの設定をまとめてみます。

 参考: Chapter 3. Configuration (Hibernate v.3 Documentation)

SessionFactoryの取得

すべてのマッピングファイルがパースされ後、Sessionインスタンス用のファクトリを取得しなければなりません。このファクトリはアプリケーションの全スレッドで共有されます。

SessionFactory sessions = cfg.buildSessionFactory();

Hibernateでは複数のSessionFactoryをインスタンス化でき、これは複数データベースを利用する際に便利です。

JDBCコネクション

データベースへのアクセスが必要な処理を行う際にコネクションプールからJDBCコネクションを自動取得するには、JDBCコネクションを設定する必要があります。
主なプロパティは
  • hibernate.connection.driver_class
    jdbc driver class
  • hibernate.connection.url
    jdbc URL
  • hibernate.connection.username
    database user
  • hibernate.connection.password
    database user password
  • hibernate.connection.pool_size
    maximum number of pooled connections

Hibernateのコネクションプール用アルゴリズムは必要最小限なもので、製品やパフォーマンステスト向けのものではありません。その場合HibernateのlibディレクトリにあるC3P0などを利用してください。
C3P0をコネクションプールとして利用する場合は、以下のようなhibernate.c3p0.*プロパティを設定する必要があります。
hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

必須ではない設定
  • hibernate.dialect (方言)
    特定のリレーショナルデータベース向けに最適化されたSQLを発行するために、クラス名を指定する。
    (PostgreSQL: org.hibernate.dialect.PostgreSQLDialect、MySQL: org.hibernate.dialect.MySQLDialect eg...)

  • hibernate.show_sql
    コンソールにSQLを出力するか否かを指定する。(true|false)
  • hibernate.format_sql
    コンソールやログにSQLを出力する際に成型するか否か。(true|false)
  • hibernate.max_fetch_depth
    1対1や多対1関連に対してouterジョインをする際のどこまで辿るかを指定する。推奨は0(辿らない)~3。