0

我有一个使用远程轴 Web 服务的 ac 应用程序,当我使用 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>

这个配置有什么错误吗?我需要更多的东西吗?
我的服务器使用自签名证书,会导致问题吗?
另一个问题是,如果我想启用客户端身份验证,如何在我的代码中以编程方式传递所需的参数(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

要诊断问题,您可以查看日志文件。默认情况下,它在dir 中,并且在您传入函数axis2c/logs时具有名称。axutil_env_create_all

您不能在同一个端口上同时传输“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 回答