0

リモート軸 Web サービスを使用するアプリケーションを使用しています。http プロトコルを使用してサービスに接続する場合は問題ありませんが、ssl を使用する場合、サービス操作を呼び出すことができず、NULL を返すだけです。
これは、クライアント アプリケーションの axis2.xml の一部です。

 <transportReceiver name="http" class="axis2_http_receiver">
        <parameter name="port" locked="false">6060</parameter>
        <parameter name="exposeHeaders" locked="true">false</parameter>
    </transportReceiver>

    <transportReceiver name="https" class="axis2_http_receiver">
        <parameter name="port" locked="false">6060</parameter>
        <parameter name="exposeHeaders" locked="true">false</parameter>
    </transportReceiver>


<transportSender name="http" class="axis2_http_sender">
        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
        <parameter name="xml-declaration" insert="false"/>
        <!--parameter name="Transfer-Encoding">chunked</parameter-->
        <!--parameter name="HTTP-Authentication" username="" password="" locked="true"/-->
        <!--parameter name="PROXY" proxy_host="127.0.0.1" proxy_port="8080" proxy_username="" proxy_password="" locked="true"/-->
    </transportSender>

<transportSender name="https" class="axis2_http_sender">
        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
        <parameter name="xml-declaration" insert="false"/>
</transportSender>

この構成で何かエラーはありますか? もっと何か必要ですか?
私のサーバーは自己署名証明書を使用していますが、それが問題を引き起こす可能性はありますか?
もう 1 つの質問は、クライアント認証を有効にしたい場合、必要なパラメーター (SERVER_CERT、KEY_FILE、SSL_PASSPHRASE) を自分のコード (および axis2.xml ではなく) でプログラムで渡すにはどうすればよいかということです。

編集:
通常の SSL (クライアント認証なし) を介してサービスに接続することに成功しましたが、クライアント認証を使用したい場合、クライアントは次のログで失敗します:

[Sun Mar 16 12:49:10 2014] [info]  Starting addressing out handler
[Sun Mar 16 12:49:10 2014] [debug] ..\..\src\modules\mod_addr\addr_out_handler.c(133) No action present. Stop processing addressing
[Sun Mar 16 12:49:10 2014] [debug] ..\..\src\core\transport\http\sender\http_transport_sender.c(246) ctx_epr:https://mysite.com/axis2/services/myService
[Sun Mar 16 12:49:10 2014] [debug] ..\..\src\core\transport\http\sender\http_transport_sender.c(805) using axis2 native http sender.
[Sun Mar 16 12:49:10 2014] [debug] ..\..\src\core\transport\http\sender\http_sender.c(416) msg_ctx_id:urn:uuid:fe18bf10-6611-4af9-85f6-b062bd7eb231
[Sun Mar 16 12:49:14 2014] [debug] ..\..\src\core\transport\http\sender\http_client.c(571) http client , response timed out
[Sun Mar 16 12:49:14 2014] [error] ..\..\src\core\transport\http\sender\http_client.c(574) Response timed out
[Sun Mar 16 12:49:14 2014] [error] ..\..\src\core\transport\http\sender\http_sender.c(1381) status_code < 0
[Sun Mar 16 12:49:14 2014] [error] ..\..\src\core\engine\engine.c(179) Transport sender invoke failed
4

2 に答える 2

0

問題を診断するには、ログ ファイルを調べることができます。デフォルトではaxis2c/logsdir にあり、関数に渡すと名前が付けられますaxutil_env_create_all

同じポートに "http" と "https" の両方のトランスポートを設定することはできません。では、「http」または「https」トランスポートのいずれかを使用することをお勧めしますaxis2.xml

SSL パラメータをプログラムで設定するには (SERVER_CERTたとえば):

axutil_property_t* ca_prop = axis2_property_create(env);
axutil_property_set_value(ca_prop, env, axis2_strdup("/path/to/ca.pem", env));
axis2_options_set_property(options, env, "SERVER_CERT", ca_prop);

これは、SSL 用に Axis2/C を構成する方法に関する素晴らしい記事です: http://people.apache.org/~dumindu/docs/HowToConfigureSSL.html

于 2014-03-13T07:06:58.030 に答える
0

実は、Apache SSL エンジンで発生したのはサーバー側の問題でした。Apache のエラー ログを見たところ、次のエラーが表示されました。

[Sun Mar 16 13:33:43 2014] [error] SSL Library Error: 336068931 error:14080143:SSL routines:SSL3_ACCEPT:unsafe legacy renegotiation disabled

mod_ssl のドキュメントによると、この問題は、私の軸ライブラリが古いバージョンの openssl でビルドされていたためです。

mod_ssl が OpenSSL バージョン 0.9.8m 以降にリンクされている場合、デフォルトでは、再ネゴシエーションは新しいプロトコル拡張をサポートするクライアントでのみサポートされます。このディレクティブが有効になっている場合、安全ではありませんが、古い (パッチが適用されていない) クライアントとの再ネゴシエーションが許可されます。

そのため、新しいバージョンの OpenSSL を使用して軸ライブラリを再コンパイルしたところ、すべて問題ありません!
もちろん、Apache 構成ファイルの仮想ホスト セクションに次の行を追加する別の危険なソリューションがあります。

SSLInsecureRenegotiation ON

SSLInsecureRenegotiationを有効にすると、中間者攻撃が発生する可能性があるため、安全なソリューションではありません。

于 2014-03-16T10:14:19.203 に答える