Translate

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を使用しているか確認することが出来ます。

2015年10月30日金曜日

WSUSのクリーンアップ

 今回はWSUSのデータベースの整理についての備忘録です。

 Windows Server Update Serviceの更新情報の管理はすべてデータベースで管理されています。DBは通常SQL Server Expressを使用して運用されますがここに問題があります。
 SQL Server Expressはスキーマごとに容量が4GBまでと制限されています。WSUSを数年も運用し続けるとこのデータベースはすぐに4GBを超えてしまいます。
 4GBを超えるとWSUSがデータベースを使用するたびに容量制限のログが記録されていき、これに気付かず放置し続けると1か月もすれば数十GBというログファイルが生成されます。
 ある日気づくとサーバのシステムドライブが容量不足になっていろいろな問題が発生…ということになります。
クリーンアップで解決できない場合はこちらも参考にしてみてください。
WSUSの「接続エラー」の対処方法について

■WSUS DBのインデックス整理

 データベースのインデックスを再構成することでサイズを若干減らすことができます。
 また、次の「WSUSのクリーンアップ」を行う前にもDBのインデックスを整理しておくことをお勧めします。サーバのクリーンアップを行ったことのない環境では特に作業に時間がかかるようで、インデックスを整理しておくことである程度改善できるようです。

WSUS DB インデックスの再構成の手順について

■WSUSのクリーンアップ

 対処方法としてはWSUSのオプションから「サーバー クリーンアップ ウィザード」を実行することです。

更新プログラムのクリーンアップについて

■WSUSの再構築

 最終手段としてはWSUSの再構築を行うことです。上記リンク先の「更新プログラムのクリーンアップについて」で記載されていますが、製品とクラスを再設定してもデータベースの容量は削減されないようです。
 この場合、再構築して製品とクラスを適正に設定することで、データベースを新たに作り直すことでサイズを減らすことができるようです。

■対象

OS: Windows Server 2008R2
Version: WSUS 3.0

2015年9月7日月曜日

SyntaxHighlighterの使い方

さまざまなサイトで紹介されているのでいまさらですが、すぐに使い方を忘れてしまうのでブログの趣旨通り備忘録として記録しておきます。

準備

まずはHTMLのヘッダに次のような一文を追加します。
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeEclipse.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
<script language='javascript' type='text/javascript'>
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.all();
</script>
例の場合、bash、C++、Java、XMLのコードに対応できます。

使用方法

コード表示にしたいところを<pre>タグで囲います。あとはclass属性で”brush: ○○;"と定義するとそれぞれのコードに最適化された表示になります。

使用例

<pre class="brush: java; tab-size: 4;">
class A {
  private int a;
  public A(int a) {
    this.a = a;
  }
};
</pre>
class A {
  private int a;
  public A(int a) {
    this.a = a;
  }
};

参考資料 

ソースコード表示