SQL Anywhere 11でセキュリティ保護されたSOAP/DISH Webサービスを作成する
Webサービスをセキュリティ保護する最初の一歩は、データベースエンジンを適切なやり方で起動することです。これにはいくつかのステップが必要です。通常は、まずコンソールからコマンドdbeng10 demo.db ‐xs http(port=8888)
を使用してデモデータベースを起動します。これはデータベースエンジンにhttp要求をポート8888で待ち受けさせるときの標準的なコマンドです。補助的なWebサービスは必要ありません。
ただし、セキュリティ保護されるHTTPSのTLS(Transport Layer Security)を有効にするために、何よりも最初にセキュリティ証明書が必要です。デジタル証明書によってクライアントとサーバはRSAまたはECC暗号化方式を使用して相互に認証を行うことができます。これは、私は私が本人であることを証明し、あなたはあなたが本人であることを証明する、というようなものです。証明機関によって作成された証明書だけが双方で認証されます。従って、本物の証明書をねつ造することはできません。つまり、相手の証明書を調べてそれが適正なものであると分かれば、相手を信頼してよいことになります。SQL Anywhere 10におけるデジタル証明書とその用法は、X.509標準に従います。しかし、まだ問題があります。証明書を手に入れるにはどうすればよいか、という点です。企業ユーザーであれば、民営の証明機関に問い合わせるのが順当なところですが、小規模な組織ではcreatecert
ユーティリティを利用するのがよいでしょう。
まだ自分の証明書を持っていない場合は、コンソールからコマンドcreatecert
を実行してください。このユーティリティは、テストや小規模事業所の要件を満たす自己署名ルート証明書を作成します。必ず、RSA暗号化方式を意味するRを選択してください。この証明書はTLS(Transport Layer Security)で使用することが想定されているので、RSAが必須です。これ以外のフィールドには必要な情報を適宜入力します。入力が不要なフィールドは、Enterキーを押してスキップします。ドキュメントと齟齬が生じないよう、以下の図で各フィールドに使用している値は、アイエニウェアのサンプルで使われているものに合わせてあります。
証明書はそれぞれのクライアントが各自を認証するために使用するもので、IDはWebサービスがそのサービス自体を認証するために使用するものです。秘密鍵は証明書の認証に必要な情報が格納された場所です。つまり、IDと秘密鍵のファイルを安全に保管しておきさえすれば、後は信頼するクライアントに証明書を自由に配布できます。
IDファイルの作成後、セキュリティ保護されたリスナを使用してポートに結合し、セキュリティ保護されたHTTPS要求を待ち受けることができます。コンソールからコマンドdbeng11 demo.db ‐xs https(port=8888;certificate=C:\id.pem;certificate_password=pwd)
を使用してデモデータベースを起動します。SQL Anywhereのドキュメントを読むと、FIPS承認の暗号化なるものを使うと書かれています。これは別途ライセンスを取得して使用するライブラリで、標準で設定されるシステム一式には大抵含まれていません。FIPSについては、本稿で後ほど説明します。「demo.db」の部分は、必ず実際のデータベースファイルのファイル名に置き換えてください。なお、このソリューションを現実の運用環境に展開するときは、「dbeng11」を「dbsrv11」に置き換えて他のマシンからの要求を受けつけられるようにする必要があります。
前と同じく‐xs
スイッチを使用しますが、今回はhttps
オプションが付くことに注意してください。HTTPSでは、RSA証明書とそれに対応する鍵ファイルのパスワードを使用する必要があります。
データベースエンジンが稼働しているので、SOAPサービスを作成できます。この作業は、SQL Anywhereのデータベース管理ツールであるSybase Centralから短時間で手際よく行うことができます。
Sybase Centralを起動した後、[Connections]メニューの[Connect with SQL Anywhere 11...]をクリックします。
入力が促されたら、ユーザー名として「dba」、パスワードとして「sql」を入力します。これらはSQL Anywhereに付属するデモデータベースにログインするための資格情報です。これらの値は、必ず実際のログイン資格情報と置き換えてください。[Database]タブをクリックして次の作業に進みます。
サーバ名のフィールドに「demo」と入力します。これは以前のステップで開始したデータベースエンジンの名前です。この値は、必ず実際のデータベースエンジンの名前と置き換えてください。入力後、[OK]をクリックします。実際、データベースの完全性を保つため、自分がたとえ管理者であってもセキュリティ保護された接続を確立するようにしてください。この種の保護については、後ほどデータベースレベルのセキュリティのところで説明します。
[Web Services]をダブルクリックし、左側にあるタスクの一覧から[Create a web service...]を選択します。
ウィザードが起動され、名前の入力が促されます。「MySecureSOAP」と入力し、[Next]をクリックします。Webサービスの種類を指定するよう促されたら、「SOAP」を選択し、[Next]をクリックします。
ここで実際に選択できるフォーマットにはいくつか種類があります。「RAW」を選択すると、Webブラウザでサービスをブラウズするときに未加工のテキストが出力されます。「XML」と「HTML」では、XML/HTTPリーダー用のマークアップ言語でデータが処理されます。このフォーマットについては、本稿で後ほど触れます。「DISH」サービスは、WSDLシートを使用して他のSOAPサービスを公開します。簡単に言えば、これには他のSOAPサービスから利用できるサービスを仲介し、それらがどのようなデータを取り込み、どのようなデータを出力するかを記述する機能があります。今回は汎用的なサービス指向のプロバイダを作成しようとしているので、「SOAP」を選択します。