Translate

2017年12月18日月曜日

GPOを使ったWindows10の管理について

 グループポリシーを使ってWindows 10を管理する際に注意する点について、現在わかっている範囲の注意点を記録します。

 Windows 7までのクライアントPCをGPOで管理していて、そのままWindows 10の管理に移行すると問題が発生することがあります。
 それらの項目とその影響について簡単にまとめています。同じく悩んでいる人の参考になれば幸いです。

影響のあるGPOの項目

  • 一時記憶された移動プロファイルのコピーを削除する
  • インターネット上のWindows Updateに接続しない
  • イントラネットのMicrosoft更新サービスの保存場所にある署名済み更新を許可する

■一時記憶された移動プロファイルのコピーを削除する

 移動プロファイルを使っているコンピュータでユーザーがログオフした際に、ローカルPCからプロファイルの情報を削除します。
 セキュリティのことを考えてクライアントPCに個人情報を残さないように、この項目を設定しているとはまることが多いです。

場所

コンピュータの構成 > ポリシー > 管理用テンプレート > Windowsコンポーネント > Windows Update

英語表記

Delete cached copies of roaming profiles

影響

  • Windowsストアが使えない
  • ストアアプリが使えない
  • ログインするたびにスタートメニューが初期化され、インストールしたアプリケーションのショートカットが消える

■インターネット上のWindows Updateに接続しない

 WSUSを使っていると下手にWindows Update上から更新プログラムをダウンロードされないように制限をかけることが多い項目と思われます。
 WSUSの製品と分類の説明を見ていると"Windows 10 Feature On Demand"が「オプション機能」に該当するというように説明されていますが、英文の別の記事内の説明ではWSUSはこの項目をサポートしていないと説明されています。

場所

コンピュータの構成 > ポリシー > 管理用テンプレート > システム > ユーザー プロファイル

英語表記

Do not connect to any Windows Update Internet locations

影響

  • アプリと機能内のオプション機能の管理で機能の追加できない
  • 開発者モードに変更できない

■イントラネットのMicrosoft更新サービスの保存場所にある署名済み更新を許可する

 WSUSを使っているとクライアントPCはイントラネット上のサーバから更新プログラムをダウンロードするため、この設定が必要かと思っていたら大間違いでした。
 この項目を有効にしていると署名が一致しないためダウンロードしたファイルが破棄されWindows Updateが失敗します。
 ちなみにWindows7までは問題なく成功するため原因がわかりにくいです。

場所

コンピュータの構成 > ポリシー > 管理用テンプレート > Windowsコンポーネント > Windows Update

英語表記

Allow signed updates from an intranet Microsoft update service location

影響

  • Windows Updateの更新プログラムのダウンロードに失敗する

2017年11月2日木曜日

Windows10でWSUSを使ったWindowsUpdateに失敗する

 WSUSを使って社内のクライアントのWindows Updateを管理していると、Windows7以前のコンピュータでは問題ないのに、Windows10(おそらくWindows8以降、未確認)では更新プログラムのダウンロードに失敗することがあります。

■原因

ダウンロードしたファイルの署名に問題がある。
Windows Updateのログを確認していると、上記のようなログが記録されています。(実際のログは記録をとっていないため失念しました)
通常、WSUSを使ってWindows Updateを管理する場合、GPOを使ってクライアントの設定を一括で変更していると思いますが、次の項目を有効にしている場合に問題が発生するようです。

■改善方法

GPOの次の項目を「無効」または「未構成」にする。
コンピュータの構成
  ポリシー
    管理テンプレート
      Windows コンポーネント
        Windows Update
          イントラネットのMicrosoft更新サービスの保存場所にある署名済み更新を許可する

■備考

 説明を読んでいるといかにも必要そうに見えるんですけど、有効にすると署名の判定で拒否されてダウンロードに失敗するようです。
 しかもWindows7では同じ設定でも問題なくダウンロードされるため有効にしていると原因を突き止めるのが難しくなっています。
 うまくいかない原因の一つと思われますので一度確認してみてください。

■その他

その他にも既存のGPO設定を使っていると、Windows 10で発生する問題について次の記事でまとめています。

2017年8月8日火曜日

Windows Updateが失敗する問題の対処法

 Windowsの機能拡張やセキュリティ更新などシステム管理には必須のWindows Updateですが、ごくまれに更新中に失敗すると何度やっても更新できなくなることがあります。
 これまでのMSP(個別の更新プログラム)なら、Microsoftカタログから更新プログラムをダウンロードしてきて手動で更新したり、DISMを使ってクリーンナップすることで大体問題が解決するのですが、最近良くWindows Updateで見かける「品質ロールアップ」は若干事情が違うようです。

■対処法

 Windowsの更新プログラムは通常MSPファイルが使用されますが、品質ロールアップではMSUファイルが使用されます。
 MSPファイルによる更新の場合は「DISM」を使ってから、再度Windows Updateを実行したり手動で更新プログラムをインストールすることで大体の問題が解決します。
 MSUファイルによる更新の場合は「システム更新準備ツール」を使って解決させます。

■DISMを使う

 更新プログラムがMSPファイルだった場合、DISMを使ってクリーンナップをした後にWindows Updateを再実行します。もしくは、手動で更新プログラムをインストールする方法もあります。
  1. コマンドプロンプトを起動する
  2. 管理者権限を使ってコマンドプロンプトを起動します。
  3. DISMを実行する
  4. DISM.exe /Online /Cleanup-image /Restorehealth
    
  5. SFCを実行する
  6. sfc /scannow
    
  7. 再度Windows Updateを実行
  8. 再度Windows Updateを実行します。もしくは、Microsoft Update カタログから更新プログラムをダウンロードして手動でインストールします。

■システム更新準備ツールを使う

 更新プログラムがMSUファイルだった場合、システム更新準備ツールを使って問題を解決します。
  1. システム更新準備ツールをインストール
  2. システム更新準備ツールをダウンロードしてインストールします。
  3. 更新プログラムのダウンロード
  4. Microsoft Update カタログから問題のある更新プログラム(*.msu)をダウンロードする。
  5. ファイルをコピーする
  6. 「%SYSTEMROOT%\CheckSUR\packages」ディレクトリを作成し、そこに更新プログラムをコピーします。
  7. システム更新準備ツールを実行する
  8. システム更新準備ツールを実行します。

※注意

 ここでの説明はかなり省略している部分があります。例えば、システム更新準備ツールを使った出順の場合、作業1の前に問題のある更新プログラムを特定する作業があります。
 上手くいかない場合は下記の参考資料をご覧ください。

■参考資料


MSPファイルとは

 MSI(Windows Installer)でインストールされたプログラムの一部もしくは全ての設定やファイルを、修正または更新されたものに書き換えるためのパッケージです。通常「修正プログラム」や「更新プログラム」などと呼ばれています。

MSUファイルとは

 簡単に説明すると複数の更新プログラムをひとつのファイルにまとめたもので、Windows Updateスタンドアロン インストーラーというプログラムに関連付けられています。
 詳しくはこちらをご覧ください。

Microsoft Update カタログ

Microsoft Update カタログを使うと、Windows Updateの更新プログラムをダウンロードして手動でインストールする事ができます。更新プログラムには通常「KB○○」という番号が振られていますので、これを使って検索することが出来ます。ちなみにKBは「Knowledge Base」の略です。

2017年8月1日火曜日

PowerShellを使って特定のプログラムがインストールされているPCを調べる

 多数のPCを管理しているとどのPCにどのプログラムがインストールされているか把握しきれなくなってきます。記録を残して管理をしていても、記入漏れが発生したり、ユーザー自身がインストールしていることも・・・。
 そこで今回はPowerShellを使って、特定のプログラムがインストールされているPCからメールを送信する方法について説明します。
 FlashPlayerなんて勝手にインストールされるくせに、アップデートされずセキュリティホールだらけの古いバージョンが放置されるなんて日常茶飯事なので・・・。

PowerShellのスクリプトファイルを作る

 適当なファイル名、例えば「CheckProgram.ps1」などでスクリプトファイルを作成します。

CheckProgram.ps1の内容

Param(
[string]$program
)

$value = (Get-WmiObject -Class Win32_Product | Select-Object Name, Version | Select-String $program)

if ($value -ne $null) {
    $subject = $program + "が検出されました。"
    $computer = $env:COMPUTERNAME
    $encoding = [System.Text.Encoding]::UTF8
    $body = "Computer: " + $computer + "`r`n" + $value

    Send-MailMessage -to "to@example.com" -from "from@example.com" -subject $subject -body $body -encoding $encoding -SmtpServer "mail.example.com"
}
 プログラムの名称に引数「-program」で指定した文字列を含む場合、そのコンピュータ名とプログラム名、バージョンが「to@example.com」にメールが送られるようになります。
 Send-MailMessageの引数「-to」「-from」「-SmtpServer」は適所変更してください。

GPOでタスクスケジュールに登録する

 上で作成したスクリプトをタスクスケジュールで実行させます。トリガーの設定は適当に設定してください。
 新しく操作を追加し、操作には「プログラムの開始」、「プログラム/スクリプト」「引数の追加(オプション)」には下記の内容を設定します。

プログラム/スクリプト

powershell

引数の追加(オプション)

-NoProfile -ExecutionPolicy Bypass "\\example\scripts\CheckProgram.ps1" -program "Flash Player"
"\\example\scripts\CheckProgram.ps1"はスクリプトを保存したフルパスを指定します。
引数「-program」の後ろ("Flash Player")を変えることで別のプログラムの監視も出来ます。

2017年7月14日金曜日

WSUSの「接続エラー」の対処方法について

 WSUSを運用していると管理画面に「接続エラー」が表示されることがあります。最初のうちは「サーバノードのリセット」を行えば、再度接続できるようになるのですがその状態を放置し続けるとそのうちリセットしても再接続できなるなってきます。
 これはWSUSの運用を続けることで無駄なデータが蓄積されていくことによるもので、データベースの容量制限やメモリ不足であったり、IISのメモリ不足などさまざまな要因が重なることでおきるようです。
 以前、このブログ内でも「WSUSのクリーンアップ」という題名で紹介しておりますが、今回はそれでも問題が解決しない場合の対処方法について説明します。

■原因

接続エラーの主な原因は次のようなものが在るようです。
  • DBのディスク容量不足によりDBの処理に失敗する。
  • DBのメモリ不足によりDBの処理に失敗する。
  • IISのメモリ不足によりIISがクラッシュする。

■基本的な対策

 この対策は主にDBのディスク容量不足に対するものです。MSのサポート曰く基本的な対策として定期的に行ったほうが良いようです。
 詳しい内容は「WSUSのクリーンアップ」をご覧ください。

■IISの上限メモリを増やす

IIS内のアプリケーション(WsusPool)のメモリ制限を4GBに増やす。 4GBに設定すればほぼ安定するようですが、それでも安定しない場合はより多く確保してください。
  1. IISマネージャを起動して左ペインのWSUSのサーバ内にある「アプリケーションプール」を選択します。
  2. 次に右ペインの「WsusPool」右クリックして「詳細設定」を選択して詳細設定を開きます。
  3. 詳細設定内の「プライベートメモリ制限(KB)」を4000000(4GB)に設定する。
  4. 「OK」ボタンを押して設定を反映させる。

■DBの上限メモリを増やす

SQL ServerもしくはWindows Internal Databaseの最小メモリを1GBに増やす。

SQL Serverの場合

SQL Serverの場合はSQL Server Management Studioを起動して、サーバのプロパティを開き、メモリ内の「最小サーバーメモリ(MB)」を1024MBに設定するだけです。

Windows Internal Databaseの場合

  1. 管理者権限でコマンドプロンプトを起動します。
  2. Windows Internal Databaseに接続します。

    WSUS 3.0 SP2 の場合

    sqlcmd -E -S \\.\pipe\mssql$microsoft##ssee\sql\query
    

    Windows Server 2012 / 2012 R2 WSUS の場合

    sqlcmd -E -S \\.\pipe\MICROSOFT##WID\tsql\query
    
  3. 次のSQLを実行します。
    EXEC sp_configure 'show advanced options',1
    GO
    Reconfigure
    GO
    EXEC sp_configure 'min server memory',1024
    GO
    Reconfigure
    GO
    
  4. 次のSQLを実行しrun_value(最小メモリ)が1GBに設定されたことを確認します。
    EXEC sp_configure 'min server memory'
    GO
    
    出力例)
    name                                minimum     maximum     config_value run_value
    ----------------------------------- ----------- ----------- ------------ -----------
    min server memory (MB)                        0  2147483647         1024        1024
    

参考資料

より詳しい資料はMSのサポートページをご覧ください。詳しく説明されています。

2017年4月20日木曜日

OpenSSLの証明書をTomcatのkeystoreに変換する

OpenSSLで作成したX509形式の証明書を、Tomcatの.keystoreに変換する方法について説明します。

変換は一旦OpenSSLを使ってPKCS12形式に変換してからkeyToolを使って.keystoreに変換します。

SSL証明書の変換

SSL証明書: server.crt
キーストア: server.keystore
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12
keytool -importkeystore -srckeysotre server.p12 -srcstoretype PKCS12 -destkeystore server.keystore -deststoretype JKS

中間証明書付きSSL証明書の変換

SSL証明書: server.crt
中間証明書: ca.crt
キーストア: server.keystore
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -certfile ca.crt
keytool -importkeystore -srckeysotre server.p12 -srcstoretype PKCS12 -destkeystore server.keystore -deststoretype JKS

2017年2月22日水曜日

プライベート認証局によるCA証明書つきSSL証明書の発行について

ここでは自身が管理するプライベート認証局を使ってSSL証明書にCA証明書を発行する方法について説明します。

プライベート認証局の構築方法については別記の「プライベート認証のルート証明書の作成について」を参考にしてください。

■KEYファイルの生成

秘密鍵と公開鍵のセットを生成します。
openssl genrsa -aes256 -out server.key 2048

CSRファイルの生成

KEYファイルを元にコモンネームを含んだ公開鍵を生成します。
openssl req -new -key server.key -out server.csr 

■CRTファイルの生成

CA証明書付きのSSL証明書を生成します。
openssl ca -in server.csr -out server.crt \
-keyfile /etc/pki/CA/private/cakey.pem \
-cert /etc/pki/CA/cacert.pem \
-config /etc/pki/tls/openssl-ca.cnf

■秘密鍵の復号化

最後におまけで秘密鍵の複合化についても記載します。
openssl rsa -in server.key -out server.dec.key

プライベート認証のルート証明書の作成について

今回は開発用WEBサーバや社内向けのWEBサービスなどに利用できる、プライベート認証局の構築方法について説明します。

構築環境はCentOS7で、OpenSSLは予めインストールされているものとします。

■CA用のコンフィグ作成

はじめにCA作成用にOpenSSLのコンフィグを作成します。
  1. 既存のコンフィグをコピー
  2. cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl-ca.cnf
    
  3. コピーしたコンフィグを修正する
  4. nsCertType 以外は任意ですが付けておくと便利です。
    default_days = 1095
    
    [ req ]
    default_bits = 2048
    default_md = sha256
    
    [ req_distinguished_name ]
    countryName_default = JP
    stateOrProvinceName_default = Kyoto
    localityName_default = Kyoto
    0.organizationName_default = SITZ Co.Ltd.
    emailAddress_default = system@sitz.co.jp
    
    # nsCertType
    nsCertType = sslCA, emailCA
    

■CAの生成

新たに作ったコンフィグを使ってCAを生成します。
SSLEAY_CONFIG="-config /etc/pki/tls/openssl-ca.cnf" \
/etc/pki/tls/misc/CA -newca

■インポート用ファイルに変換

WindowsなどにインポートしやすいようにDERファイルに変換します。
openssl x509 -in /etc/pki/CA/cacert.pem -inform pem \
-out /etc/pki/CA/cacert.der -outform der

2017年2月13日月曜日

JAVAでテスト用SSL証明書を許可する

 Tomcatを使ってTLS接続のサーバ間通信をしようとすると、テスト用サーバの証明書が認証局に登録されていなくってSSLExceptionが出ることがあります。
 その際に、JAVAの信頼済み証明書にテスト用のSSL証明書を登録することで回避する方法について記録します。

■症状

JAVAを使ったHTTPS通信でテストサーバに繋ぐと、SSLExceptionがでる。

■回避方法

ネットを調べていると信頼済み証明書に追加する方法と、証明書の検証をしない方法とがありましたが、後者の場合本運用にそのまま移行できないので、ここでは前者の信頼済み証明書に追加する方法について説明します。

■信頼済み証明書に登録する

  1. tomcatが使用しているjavaのパスを調査し、cacertsを探す
  2. cacertsの場所は通常以下のような場所にあります。
    • Windowsの場合
    • C:\Program Files\java\jre<バージョン番号>\lib\security
      
    • CentOSの場合
    • /etc/pki/ca-trust/extracted/java/
      
  3. keytoolを使ってcacertsに証明書(CRT)を追加する
  4. keytool -importcert -v -trustcacerts -file <証明書ファイル> -keystore <信頼済み証明書ファイル>
    
    証明書ファイル: /etc/httpd/ssl/server.crt
    信頼済み証明書ファイル: /etc/pki/ca-trust/extracted/java/cacerts
    各ファイルが上記の場所に保存されている場合
    keytool -importcert -v -trustcacerts -file /etc/httpd/ssl/server.crt -keystore /etc/pki/ca-trust/extracted/java/cacerts [Enter]
    キーストアのパスワードを入力してください:  
    所有者: CN=www.test.jp, O=Company, L=Kyoto, ST=Kyoto, C=jp
    発行者: CN=www.test.jp, O=Company, L=Kyoto, ST=Kyoto, C=jp
    シリアル番号: ****************
    有効期間の開始日: Mon Feb 13 14:17:42 JST 2017終了日: Thu Feb 11 14:17:42 JST 2027
    証明書のフィンガプリント:
             MD5:  **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**
             SHA1: **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**
             SHA256: **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**
             署名アルゴリズム名: SHA512withRSA
             バージョン: 1
    この証明書を信頼しますか。 [いいえ]:  y
    証明書がキーストアに追加されました
    [/etc/pki/ca-trust/extracted/java/cacertsを格納中]
    
    これは、CentOSの例になりますが、Windowsの場合適所修正してください。

■Eclipseの場合

Eclipseでデバッグしている場合は設定のサーバでどのフォルダのJAVAを使用しているか確認することが出来ます。