3

私は非常に役立つオンライン チュートリアルに従って、mysql を使用してストアド プロシージャを呼び出す SOAP サーバーを作成していました。これは非常にうまく機能し、SoapUI のようなプログラムを使用して正しく応答するコードを取得しました。コードは次のとおりです。

@WebService
public class test {

@WebMethod
public String login(String username, String password) throws SQLException {
    String url = "jdbc:mysql://localhost:3306/test";
    String DBusername = "test";
    String DBpassword = "test";
    Connection con = DriverManager.getConnection(url, DBusername, DBpassword);

    Statement stmt = null;
    String query = " CALL authorize_user('" + username + "','" + password + "')";

    try {
        stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery(query);
        while (rs.next()) {
            String login = rs.getString("au_result");

            if (login != null)
                return login;
            else {
                return "Login Failed";
            }
        }
    } catch (SQLException e) {
        System.out.println("Error: " + e);
    } finally {
        if (stmt != null) {
            stmt.close();
        }
    }
    return "Login Failed";
}

public static void main(String[] args) {
    test test = new test();
    @SuppressWarnings("unused")
    Endpoint endpoint = Endpoint.publish("http://localhost/testing", test);
}

}

したがって、DB にあるユーザー名とパスワードを入力すると、これは機能し、肯定的な結果が返されます。これは、現在の設定方法でコードに挿入される可能性があるため、テスト コードにすぎませんが、まもなく変更されます。

しかし、私はこのサーバーで SSL を使用する方法を見つけようとしていますが、見つけることができる唯一の情報は、ラッパー プログラムまたはサーブレット ラッパーを使用して SOAP サーバーを作成するときに SSL を使用する方法です。新しいコードの学習に時間を浪費する十分な理由が見つからない限り、現時点ではこの方法には進みたくありません。サードパーティのコードを使用せずに、このコードに SSL 接続を使用するにはどうすればよいですか? 通常の Web サイトのサーバーで実行されている評判の良い会社からの証明書が既にあります。

4

3 に答える 3

3

プログラミング以外のソリューションを検討しましたか?

Web サーバーの前にリバース プロキシとして SSL を使用する Apache を配置するだけです。

  • コードを 1 行も書く必要はありません (セキュリティ バグの可能性が低くなります)。
  • SSLを取得します
  • バランサーを入手します(必要な場合)
  • キャッシング(必要な場合)などを取得します
于 2013-04-28T01:36:37.913 に答える
1

データベースに接続してユーザー ID とパスワードを検証するコードが含まれています (以下の例の最後のステップ)。最初にアーキテクチャを理解させてください (これが、ユーザー ID ストアを保護するためのデータ アーキテクチャの設計を開始する方法であることを願っています)。

web-app -> user authentication client
   ---->{SOAP CALL}--->
       SSL-proxy-of-some-sort -> SOAP server -> User Authentication Service -> user ID database.

これは正しい表現ですか?はいの場合、ファイアウォールの背後に埋め込まれた別のデータストアにユーザーパスワードストアを保持し、SOAP を使用してのみアクセスできるようにして、「生きている社会」の状況 (ハッカーによって 5000 万のユーザー ID とパスワードが盗まれる) を回避したいと考えています。ハッカーが SQL インジェクションのソフトやその他の脆弱性を介してデータ ストアにアクセスできる可能性があります。この正しい理解なら?

ここで、ほとんどの場合、SSL を備えた Apache サーバーを使用して「soap サーバー」の前面に配置することを検討する必要があるという上記の Victor Ronin の回答に同意します。ただし、その SSL でラップされた SOAP サーバーにアクセスする場合でも (方法は関係ありません)、この SSL 通信を処理できる Java コードを記述する必要があります。この投稿(私のものではありません)を調べて、それが役立つかどうかを確認することをお勧めします.

http://juliusdavies.ca/commons-ssl/ssl.html

ところで、この認証のために WAN を経由しない限り、SSL 暗号化が必要になるとは想像できません。

于 2013-04-30T14:37:51.670 に答える
0

ハンドラー チェーンを使用するようにしてください。この方法では、ハンドラー チェーンが SOAP 呼び出しの前に実行され、やりたいことには適合しないメッセージを破棄できます。

方法の詳細はこちら: http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.wsfep.multiplatform.doc%2Finfo%2Fae%2Fae%2Ftwbs_jaxwshandler .html

于 2013-04-30T13:15:41.990 に答える