Java

January 10, 2013

JBossサーバにSSL証明書をインストール

新規の場合は手前にApache HTTPサーバ等置くほうが簡単かと思いますが、稼働中の環境で更新する機会があったのでメモ。
バージョンは5。

サーバ証明書、秘密鍵、中間CA証明書は手元にあるものとします。
それぞれ
  • サーバ証明書 > server.cer
  • 秘密鍵 > private.key
  • 中間CA証明書 > intermediateCA.cer

として保存します。

opensslコマンドで、これら3つのファイルからPKCS#12(pfx)形式のファイルを作成します。

# openssl pkcs12 -export -in server.cer -inkey private.key -certfile intermediateCA.cer -out cert.p12
作成されたファイル(cert.p12)はJBossサーバのconfディレクトリに置いておきます。

次に、JBossの
deploy/jbossweb.sar/server.xml
を以下を追加し、先程生成したcert.p12ファイルを指定します。
<Connector protocol="HTTP/1.1" SSLEnabled="true"
           port="8443" address="${jboss.bind.address}"
           scheme="https" secure="true" clientAuth="false"
           keystoreFile="${jboss.server.home.dir}/conf/cert.p12"
           keystorePass="password" sslProtocol = "TLS" keystoreType="PKCS12"/>
参考にしたURL
https://crosstrust.co.jp/support/tech_support/install/openssl_pkcs12
https://www.globalsign.com/support/install/install_pfx_jboss.php


matssaku at 14:06|PermalinkComments(0)TrackBack(0)clip!

April 07, 2012

JavaでXMLをパースするとき、DTDを取得しようとしてエラーになる問題

JavaでXMLをパースするとき、標準ライブラリのDOMとかSAXとかのパーサを利用できますが、ネットワーク関連のエラーでパースに失敗することがあります。

パース対象のXMLにDOCTYPEで外部のDTDファイルが指定されていると、指定されているURLからDTDファイルを取得しようとするのが原因です。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
上記だと、「http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd」に接続しようとしてエラーになります。

この機能を無効にできないものか。

調べたところ、DocumentBuilderFactoryまたはSAXParserFactoryで以下のように指定すると、外部DTDの取得を無効にできるようです。
SAXParserFactory factory = SAXParserFactory.newInstance();
 factory.setFeature( "http://apache.org/xml/features/nonvalidating/load-external-dtd", false ) ;
ほかにも、EntityResolverを自分で実装して、ローカルファイルを読ませる方法なんかもあるようですが、こっちのが楽かと。

setFeatureで切り替えられるその他の機能は以下

http://xerces.apache.org/xerces-j/features.html


matssaku at 14:43|PermalinkComments(0)TrackBack(0)clip!