You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ka...@apache.org on 2007/02/15 12:07:06 UTC

svn commit: r507889 - in /webservices/axis2/trunk/c: include/ modules/core/transport/http/sender/ modules/core/transport/http/sender/ssl/ test/core/transport/http/

Author: kaushalye
Date: Thu Feb 15 03:07:05 2007
New Revision: 507889

URL: http://svn.apache.org/viewvc?view=rev&rev=507889
Log:
Applying patch for ssl client authentication. JIRA AXIS2C-529.


Modified:
    webservices/axis2/trunk/c/include/axis2_http_client.h
    webservices/axis2/trunk/c/include/axis2_http_transport.h
    webservices/axis2/trunk/c/modules/core/transport/http/sender/http_client.c
    webservices/axis2/trunk/c/modules/core/transport/http/sender/rest_sender.c
    webservices/axis2/trunk/c/modules/core/transport/http/sender/soap_over_http_sender.c
    webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_stream.c
    webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_stream.h
    webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_utils.c
    webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_utils.h
    webservices/axis2/trunk/c/test/core/transport/http/test_http_transport.c

Modified: webservices/axis2/trunk/c/include/axis2_http_client.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/include/axis2_http_client.h?view=diff&rev=507889&r1=507888&r2=507889
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_http_client.h (original)
+++ webservices/axis2/trunk/c/include/axis2_http_client.h Thu Feb 15 03:07:05 2007
@@ -64,7 +64,9 @@
                 send)(
                     axis2_http_client_t *client,
                     const axis2_env_t *env,
-                    axis2_http_simple_request_t *request);
+                    axis2_http_simple_request_t *request,
+                    axis2_char_t *ssl_pp
+                    );
 
         /**
          * @param client pointer to client
@@ -176,6 +178,27 @@
                     const axis2_http_client_t *client,
                     const axis2_env_t *env);
 
+        /**
+         * @param client pointer to client
+         * @param env pointer to environment struct
+         * @param key_file chain file containing 
+         * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+         */
+        axis2_status_t (AXIS2_CALL *
+                set_key_file)(
+                    axis2_http_client_t *client,
+                    const axis2_env_t *env,
+                    axis2_char_t *key_file);
+
+        /**
+         * @param client pointer to client
+         * @param env pointer to environment struct
+         */
+        axis2_char_t *(AXIS2_CALL *
+                get_key_file)(
+                    const axis2_http_client_t *client,
+                    const axis2_env_t *env);
+
 
         /**
          * @param client pointer to client
@@ -222,8 +245,9 @@
 
 /** Send.
     @sa axis2_http_client_ops#send */
-#define AXIS2_HTTP_CLIENT_SEND(client, env, request) \
-                                ((client)->ops->send(client, env, request))
+#define AXIS2_HTTP_CLIENT_SEND(client, env, request, ssl_passphrase) \
+                                ((client)->ops->send(client, env, request, \
+                                ssl_passphrase))
 
 /** Receive header.
     @sa axis2_http_client_ops#receive_header */
@@ -272,16 +296,27 @@
 #define AXIS2_HTTP_CLIENT_SET_DUMP_INPUT_MSG(client, env, dump_input_msg) \
         ((client)->ops->set_dump_input_msg(client, env, dump_input_msg))
 
-/** Sets the proxy.
+/** Sets the server certificate.
     @sa axis2_http_client_ops#set_server_cert */
 #define AXIS2_HTTP_CLIENT_SET_SERVER_CERT(client, env, server_cert) \
                                 ((client)->ops->set_server_cert(client, env,\
                         server_cert))
 
-/** Gets the proxy.
+/** Gets the server certificate.
     @sa axis2_http_client_ops#get_server_cert */
 #define AXIS2_HTTP_CLIENT_GET_SERVER_CERT(client, env) \
                                 ((client)->ops->get_server_cert(client, env))
+
+/** Sets the client chain file containing the privat key and the public key.
+    @sa axis2_http_client_ops#set_key_file*/
+#define AXIS2_HTTP_CLIENT_SET_KEY_FILE(client, env, key_file) \
+                                ((client)->ops->set_key_file(client, env,\
+                        key_file))
+
+/** Gets the client chain file containing the privat key and the public key.
+    @sa axis2_http_client_ops#get_key_file*/
+#define AXIS2_HTTP_CLIENT_GET_KEY_FILE(client, env) \
+                                ((client)->ops->get_key_file(client, env))
 
 
 

Modified: webservices/axis2/trunk/c/include/axis2_http_transport.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/include/axis2_http_transport.h?view=diff&rev=507889&r1=507888&r2=507889
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_http_transport.h (original)
+++ webservices/axis2/trunk/c/include/axis2_http_transport.h Thu Feb 15 03:07:05 2007
@@ -420,10 +420,19 @@
 #define AXIS2_HTTP_METHOD "HTTP_METHOD"
 
 /**
- *Constant for SSL Server Certificate
+ * Constant for SSL Server Certificate
  */
 #define AXIS2_SSL_SERVER_CERT "SERVER_CERT"
 
+/**
+ * Constant for SSL Key File
+ */
+#define AXIS2_SSL_KEY_FILE "KEY_FILE"
+
+/**
+ * Constant for SSL Passphrase
+ */
+#define AXIS2_SSL_PASSPHRASE "SSL_PASSPHRASE"
 
 /**
  *Constant for HTTP headers that user specify, Those headers will

Modified: webservices/axis2/trunk/c/modules/core/transport/http/sender/http_client.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/sender/http_client.c?view=diff&rev=507889&r1=507888&r2=507889
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/sender/http_client.c (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/sender/http_client.c Thu Feb 15 03:07:05 2007
@@ -51,6 +51,7 @@
     axis2_char_t *proxy_host_port;
     axis2_bool_t dump_input_msg;
 	axis2_char_t *server_cert;
+    axis2_char_t *key_file;
 }
 axis2_http_client_impl_t;
 
@@ -63,7 +64,9 @@
 axis2_http_client_send(
     axis2_http_client_t *client,
     const axis2_env_t *env,
-    axis2_http_simple_request_t *request);
+    axis2_http_simple_request_t *request,
+    axis2_char_t *ssl_pp
+    );
 
 int AXIS2_CALL
 axis2_http_client_recieve_header(
@@ -110,6 +113,12 @@
     const axis2_env_t *env,
     axis2_char_t *server_cert);
 
+axis2_status_t AXIS2_CALL
+axis2_http_client_set_key_file(
+    axis2_http_client_t *client,
+    const axis2_env_t *env,
+    axis2_char_t *key_file);
+
 
 axis2_char_t *AXIS2_CALL
 axis2_http_client_get_proxy(
@@ -121,6 +130,11 @@
     const axis2_http_client_t *client,
     const axis2_env_t *env);
 
+axis2_char_t *AXIS2_CALL
+axis2_http_client_get_key_file(
+    const axis2_http_client_t *client,
+    const axis2_env_t *env);
+
 axis2_status_t AXIS2_CALL
 axis2_http_client_connect_ssl_host(
     axis2_http_client_t *client,
@@ -175,7 +189,7 @@
     http_client_impl->proxy_host_port = NULL;
     http_client_impl->dump_input_msg = AXIS2_FALSE;
     http_client_impl->server_cert = NULL;
-
+    http_client_impl->key_file = NULL;
 
     http_client_impl->http_client.ops = AXIS2_MALLOC(env->allocator,
             sizeof(axis2_http_client_ops_t));
@@ -205,6 +219,10 @@
         axis2_http_client_set_server_cert;
     http_client_impl->http_client.ops->get_server_cert =
         axis2_http_client_get_server_cert;
+    http_client_impl->http_client.ops->set_key_file =
+        axis2_http_client_set_key_file;
+    http_client_impl->http_client.ops->get_key_file =
+        axis2_http_client_get_key_file;
     http_client_impl->http_client.ops->set_dump_input_msg = 
         axis2_http_client_set_dump_input_msg;
     http_client_impl->http_client.ops->free = axis2_http_client_free;
@@ -261,7 +279,9 @@
 axis2_http_client_send(
     axis2_http_client_t *client,
     const axis2_env_t *env,
-    axis2_http_simple_request_t *request)
+    axis2_http_simple_request_t *request,
+    axis2_char_t *ssl_pp
+    )
 {
     axis2_http_client_impl_t *client_impl = NULL;
     char *wire_format = NULL;
@@ -340,7 +360,10 @@
             }
         }
         client_impl->data_stream = axis2_stream_create_ssl(env,
-                client_impl->sockfd, AXIS2_HTTP_CLIENT_GET_SERVER_CERT(client, env));
+                client_impl->sockfd, 
+                AXIS2_HTTP_CLIENT_GET_SERVER_CERT(client, env),
+                AXIS2_HTTP_CLIENT_GET_KEY_FILE(client, env),
+                ssl_pp);
 #else
         AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_TRANSPORT_PROTOCOL,
                 AXIS2_FAILURE);
@@ -873,4 +896,28 @@
 {
    AXIS2_ENV_CHECK(env, NULL);
    return AXIS2_INTF_TO_IMPL(client)->server_cert;
+}
+
+axis2_status_t AXIS2_CALL
+axis2_http_client_set_key_file(
+    axis2_http_client_t *client,
+    const axis2_env_t *env,
+    axis2_char_t *key_file)
+{
+   axis2_http_client_impl_t *client_impl = NULL;
+    
+   client_impl = AXIS2_INTF_TO_IMPL(client);
+
+   client_impl->key_file = key_file;
+
+   return AXIS2_SUCCESS;
+}
+
+axis2_char_t *AXIS2_CALL
+axis2_http_client_get_key_file(
+    const axis2_http_client_t *client,
+    const axis2_env_t *env)
+{
+   AXIS2_ENV_CHECK(env, NULL);
+   return AXIS2_INTF_TO_IMPL(client)->key_file;
 }

Modified: webservices/axis2/trunk/c/modules/core/transport/http/sender/rest_sender.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/sender/rest_sender.c?view=diff&rev=507889&r1=507888&r2=507889
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/sender/rest_sender.c (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/sender/rest_sender.c Thu Feb 15 03:07:05 2007
@@ -419,7 +419,7 @@
 	}
 
 	axis2_rest_sender_configure_server_cert (sender, env, msg_ctx);
-    status_code = AXIS2_HTTP_CLIENT_SEND(sender_impl->client, env, request);
+    status_code = AXIS2_HTTP_CLIENT_SEND(sender_impl->client, env, request, NULL);
 
     AXIS2_HTTP_SIMPLE_REQUEST_FREE(request, env);
     request = NULL;

Modified: webservices/axis2/trunk/c/modules/core/transport/http/sender/soap_over_http_sender.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/sender/soap_over_http_sender.c?view=diff&rev=507889&r1=507888&r2=507889
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/sender/soap_over_http_sender.c (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/sender/soap_over_http_sender.c Thu Feb 15 03:07:05 2007
@@ -26,6 +26,7 @@
 #include <axis2_http_client.h>
 #include <axiom_xml_writer.h>
 #include <axis2_property.h>
+#include <axis2_param.h>
 #include <axis2_types.h>
 #include <axis2_generic_obj.h>
 
@@ -110,6 +111,12 @@
     axis2_msg_ctx_t *msg_ctx);
 
 axis2_status_t AXIS2_CALL
+axis2_soap_over_http_sender_configure_key_file(
+    axis2_soap_over_http_sender_t *sender,
+    const axis2_env_t *env,
+    axis2_msg_ctx_t *msg_ctx);
+
+axis2_status_t AXIS2_CALL
 axis2_soap_over_http_sender_free(
     axis2_soap_over_http_sender_t *sender,
     const axis2_env_t *env);
@@ -218,6 +225,9 @@
     int output_stream_size = 0;
     axis2_bool_t doing_mtom = AXIS2_FALSE;
     axis2_property_t *dump_property = NULL;
+    axis2_param_t *ssl_pp_param = NULL; /* ssl passphrase */
+    axis2_property_t *ssl_pp_property = NULL;
+    axis2_char_t *ssl_pp = NULL;
 
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE);
@@ -462,12 +472,24 @@
     }
 
 	axis2_soap_over_http_sender_configure_server_cert(sender, env, msg_ctx);
+	
+    axis2_soap_over_http_sender_configure_key_file(sender, env, msg_ctx);
 
     axis2_soap_over_http_sender_get_timeout_values(sender, env, msg_ctx);
     AXIS2_HTTP_CLIENT_SET_TIMEOUT(sender_impl->client, env,
             sender_impl->so_timeout);
+    
+    /* TODO: Load from property
+     * ssl_pp_property = AXIS2_MSG_CTX_GET_PROPERTY(AXIS2_SSL_PASSPHRASE);*/
 
-    status_code = AXIS2_HTTP_CLIENT_SEND(sender_impl->client, env, request);
+    ssl_pp_param = AXIS2_MSG_CTX_GET_PARAMETER(msg_ctx, env, AXIS2_SSL_PASSPHRASE);
+
+    if (ssl_pp_param)
+    {
+        ssl_pp = AXIS2_PARAM_GET_VALUE(ssl_pp_param, env);
+    }
+
+    status_code = AXIS2_HTTP_CLIENT_SEND(sender_impl->client, env, request, ssl_pp);
 
 
     /*AXIS2_FREE(env->allocator, buffer);
@@ -865,9 +887,10 @@
     const axis2_env_t *env,
     axis2_msg_ctx_t *msg_ctx)
 {
-	axis2_property_t *server_cert_property;
+	axis2_property_t *server_cert_property = NULL;
+	axis2_param_t *server_cert_param = NULL;
 	axis2_char_t *server_cert = NULL;
-	axis2_status_t status = 0;
+	axis2_status_t status = AXIS2_FAILURE;
     axis2_soap_over_http_sender_impl_t *sender_impl = NULL;
 
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
@@ -876,11 +899,71 @@
     sender_impl = AXIS2_INTF_TO_IMPL(sender);
 
     server_cert_property = AXIS2_MSG_CTX_GET_PROPERTY(msg_ctx, env, 
-													  AXIS2_SSL_SERVER_CERT, AXIS2_FALSE);
+            AXIS2_SSL_SERVER_CERT, AXIS2_FALSE);
     if(server_cert_property)
     {
-		server_cert = (axis2_char_t *) AXIS2_PROPERTY_GET_VALUE(server_cert_property, env);
-		status = AXIS2_HTTP_CLIENT_SET_SERVER_CERT(sender_impl->client, env, server_cert);
+		server_cert = (axis2_char_t *) AXIS2_PROPERTY_GET_VALUE(
+                server_cert_property, env);
+    }
+    else
+    {
+        server_cert_param = AXIS2_MSG_CTX_GET_PARAMETER(msg_ctx, env, 
+                AXIS2_SSL_SERVER_CERT);
+        if(server_cert_param)
+        {
+            server_cert = (axis2_char_t *) AXIS2_PARAM_GET_VALUE(
+                    server_cert_param, env);
+        }
     }
+    
+    if(server_cert)
+    {
+        status = AXIS2_HTTP_CLIENT_SET_SERVER_CERT(sender_impl->client, 
+                env, server_cert);
+    }
+
+    return status;
+}
+axis2_status_t AXIS2_CALL
+axis2_soap_over_http_sender_configure_key_file(
+    axis2_soap_over_http_sender_t *sender,
+    const axis2_env_t *env,
+    axis2_msg_ctx_t *msg_ctx)
+{
+	axis2_property_t *key_file_property = NULL;
+	axis2_param_t *key_file_param = NULL;
+    axis2_char_t *key_file = NULL;
+	axis2_status_t status = AXIS2_FAILURE;
+    axis2_soap_over_http_sender_impl_t *sender_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE);
+
+    sender_impl = AXIS2_INTF_TO_IMPL(sender);
+
+    key_file_property = AXIS2_MSG_CTX_GET_PROPERTY(msg_ctx, env, 
+            AXIS2_SSL_KEY_FILE, AXIS2_FALSE);
+    if(key_file_property)
+    {
+		key_file = (axis2_char_t *) AXIS2_PROPERTY_GET_VALUE(
+                key_file_property, env);
+    }
+    else
+    {
+        key_file_param = AXIS2_MSG_CTX_GET_PARAMETER(msg_ctx, env,
+                AXIS2_SSL_KEY_FILE);
+        if(key_file_param)
+        {
+            key_file = (axis2_char_t *) AXIS2_PARAM_GET_VALUE(
+                    key_file_param, env);
+        }
+    }
+
+    if (key_file)
+    {
+		status = AXIS2_HTTP_CLIENT_SET_KEY_FILE(sender_impl->client, 
+                env, key_file);
+    }
+
 	return status;
 }

Modified: webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_stream.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_stream.c?view=diff&rev=507889&r1=507888&r2=507889
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_stream.c (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_stream.c Thu Feb 15 03:07:05 2007
@@ -40,26 +40,55 @@
 
 /********************************Function headers******************************/
 axis2_status_t AXIS2_CALL
-axis2_ssl_stream_free(axis2_stream_t *stream, const axis2_env_t *env);
+axis2_ssl_stream_free(
+    axis2_stream_t *stream, 
+    const axis2_env_t *env
+    );
 
 axis2_stream_type_t AXIS2_CALL
-axis2_ssl_stream_get_type(axis2_stream_t *stream, const axis2_env_t *env);
-
-int AXIS2_CALL
-axis2_ssl_stream_write(axis2_stream_t *stream, const axis2_env_t *env,
-        const void *buffer, size_t count);
-int AXIS2_CALL
-axis2_ssl_stream_read(axis2_stream_t *stream, const axis2_env_t *env,
-        void *buffer, size_t count);
-int AXIS2_CALL
-axis2_ssl_stream_skip(axis2_stream_t *stream, const axis2_env_t *env, int count);
-
-int AXIS2_CALL
-axis2_ssl_stream_get_char(axis2_stream_t *stream, const axis2_env_t *env);
+axis2_ssl_stream_get_type(
+    axis2_stream_t *stream, 
+    const axis2_env_t *env
+    );
+
+int AXIS2_CALL
+axis2_ssl_stream_write(
+    axis2_stream_t *stream,
+    const axis2_env_t *env,
+    const void *buffer,
+    size_t count
+    );
+
+int AXIS2_CALL
+axis2_ssl_stream_read(
+    axis2_stream_t *stream, 
+    const axis2_env_t *env,
+    void *buffer,
+    size_t count
+    );
+
+int AXIS2_CALL
+axis2_ssl_stream_skip(
+    axis2_stream_t *stream,
+    const axis2_env_t *env,
+    int count
+    );
+
+int AXIS2_CALL
+axis2_ssl_stream_get_char(
+    axis2_stream_t *stream,
+    const axis2_env_t *env
+    );
 
 
 AXIS2_EXTERN axis2_stream_t * AXIS2_CALL
-axis2_stream_create_ssl(const axis2_env_t *env, axis2_socket_t socket, axis2_char_t *server_cert)
+axis2_stream_create_ssl(
+    const axis2_env_t *env,
+    axis2_socket_t socket,
+    axis2_char_t *server_cert,
+    axis2_char_t *key_file,
+    axis2_char_t *ssl_pp
+    )
 {
     ssl_stream_impl_t *stream_impl = NULL;
     AXIS2_ENV_CHECK(env, NULL);
@@ -77,7 +106,8 @@
     stream_impl->ctx = NULL;
     stream_impl->ssl = NULL;
 
-    stream_impl->ctx = axis2_ssl_utils_initialize_ctx(env, server_cert);
+    stream_impl->ctx = axis2_ssl_utils_initialize_ctx(env, server_cert,
+            key_file, ssl_pp);
     if (NULL == stream_impl->ctx)
     {
         axis2_ssl_stream_free((axis2_stream_t*)stream_impl, env);
@@ -111,7 +141,10 @@
 
 
 axis2_status_t AXIS2_CALL
-axis2_ssl_stream_free(axis2_stream_t *stream, const axis2_env_t *env)
+axis2_ssl_stream_free(
+    axis2_stream_t *stream,
+    const axis2_env_t *env
+    )
 {
     ssl_stream_impl_t *stream_impl = NULL;
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
@@ -128,8 +161,12 @@
 }
 
 int AXIS2_CALL
-axis2_ssl_stream_read(axis2_stream_t *stream, const axis2_env_t *env,
-        void *buffer, size_t count)
+axis2_ssl_stream_read(
+    axis2_stream_t *stream,
+    const axis2_env_t *env,
+    void *buffer,
+    size_t count
+    )
 {
     ssl_stream_impl_t *stream_impl = NULL;
     int read = -1;
@@ -161,8 +198,12 @@
 }
 
 int AXIS2_CALL
-axis2_ssl_stream_write(axis2_stream_t *stream, const axis2_env_t *env,
-        const void *buf, size_t count)
+axis2_ssl_stream_write(
+    axis2_stream_t *stream,
+    const axis2_env_t *env,
+    const void *buf,
+    size_t count
+    )
 {
     ssl_stream_impl_t *stream_impl = NULL;
     int write = -1;
@@ -186,7 +227,11 @@
 
 
 int AXIS2_CALL
-axis2_ssl_stream_skip(axis2_stream_t *stream, const axis2_env_t *env, int count)
+axis2_ssl_stream_skip(
+    axis2_stream_t *stream, 
+    const axis2_env_t *env, 
+    int count
+    )
 {
     ssl_stream_impl_t *stream_impl = NULL;
     axis2_char_t *tmp_buffer = NULL;
@@ -208,7 +253,10 @@
 }
 
 int AXIS2_CALL
-axis2_ssl_stream_get_char(axis2_stream_t *stream, const axis2_env_t *env)
+axis2_ssl_stream_get_char(
+    axis2_stream_t *stream, 
+    const axis2_env_t *env
+    )
 {
     int ret = -1;
     AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
@@ -218,7 +266,10 @@
 }
 
 axis2_stream_type_t AXIS2_CALL
-axis2_ssl_stream_get_type(axis2_stream_t *stream, const axis2_env_t *env)
+axis2_ssl_stream_get_type(
+    axis2_stream_t *stream,
+    const axis2_env_t *env
+    )
 {
     AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
     return AXIS2_INTF_TO_IMPL(stream)->stream_type;

Modified: webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_stream.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_stream.h?view=diff&rev=507889&r1=507888&r2=507889
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_stream.h (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_stream.h Thu Feb 15 03:07:05 2007
@@ -34,7 +34,13 @@
   * @return axis2_stream (ssl)
   */
 AXIS2_EXTERN axis2_stream_t * AXIS2_CALL 
-axis2_stream_create_ssl(const axis2_env_t *env, axis2_socket_t socket, axis2_char_t *server_cert);
+axis2_stream_create_ssl(
+    const axis2_env_t *env,
+    axis2_socket_t socket,
+    axis2_char_t *server_cert,
+    axis2_char_t *key_file,
+    axis2_char_t *ssl_pp
+    );
 
 /** @} */
     

Modified: webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_utils.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_utils.c?view=diff&rev=507889&r1=507888&r2=507889
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_utils.c (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_utils.c Thu Feb 15 03:07:05 2007
@@ -17,27 +17,53 @@
 #include "ssl_utils.h"
 BIO *bio_err = 0;
 
+static int password_cb(
+    char *buf,
+    int size, 
+    int rwflag, 
+    void *passwd
+    )
+{
+    strncpy(buf, (char *)passwd, size);
+    buf[size-1] = '\0';
+    /*printf("ssl_passphrase:%s", buf);*/
+    return(strlen(buf));
+}
+
 AXIS2_EXTERN SSL_CTX* AXIS2_CALL
-axis2_ssl_utils_initialize_ctx(const axis2_env_t *env, axis2_char_t *server_cert)
+axis2_ssl_utils_initialize_ctx(
+    const axis2_env_t *env,
+    axis2_char_t *server_cert,
+    axis2_char_t *key_file,
+    axis2_char_t *ssl_pp
+)
 {
     SSL_METHOD *meth = NULL;
-    axis2_char_t *ca_file = NULL;
     SSL_CTX *ctx = NULL;
+    axis2_char_t *ca_file = server_cert; /*TODO: remove ca_file*/
+    /*axis2_char_t *key_file = NULL;*/
 
     AXIS2_ENV_CHECK(env, NULL);
 
     /*TODO getenv */
-	if (server_cert)
+	/*if (server_cert)
 		ca_file = server_cert;
 	else
 		ca_file = AXIS2_GETENV("AXIS2_SSL_CA_FILE");
 
+    key_file = AXIS2_GETENV("AXIS2_SSL_KEY_FILE");
+    */
+
+    /*printf("key_file: %s\n", key_file);
+    printf("ca_file: %s\n", server_cert);*/
+
     if (NULL == ca_file)
     {
         AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SSL_NO_CA_FILE,
                 AXIS2_FAILURE);
         return NULL;
     }
+
     if (!bio_err)
     {
         /* Global system initialization*/
@@ -54,15 +80,32 @@
 
     /* Load our keys and certificates
      * If we need client certificates it has to be done here
+     * TODO 
      */
-    /*if(!(SSL_CTX_use_certificate_chain_file(ctx, keyfile)))
+    if (key_file) /*can we check if the server needs client auth?*/
     {
-        SSL_CTX_free(ctx);
-        return NULL;
-    }*/
+        SSL_CTX_set_default_passwd_cb_userdata(ctx, (void *)ssl_pp);
+        SSL_CTX_set_default_passwd_cb(ctx, password_cb);
+
+        if(!(SSL_CTX_use_certificate_chain_file(ctx, key_file)))
+        {
+            printf("Loading client certificate failed!\n");
+            SSL_CTX_free(ctx);
+            return NULL;
+        }
+
+        if(!(SSL_CTX_use_PrivateKey_file(ctx, key_file, SSL_FILETYPE_PEM)))
+        {
+            printf("Loading client key failed!\n");
+            SSL_CTX_free(ctx);
+            return NULL;
+        }
+    }
+
     /* Load the CAs we trust*/
     if (!(SSL_CTX_load_verify_locations(ctx, ca_file, 0)))
     {
+        printf("Loading CA certifiate failed!\n");
         SSL_CTX_free(ctx);
         return NULL;
     }
@@ -75,8 +118,11 @@
 }
 
 AXIS2_EXTERN SSL* AXIS2_CALL
-axis2_ssl_utils_initialize_ssl(const axis2_env_t *env, SSL_CTX *ctx,
-        axis2_socket_t socket)
+axis2_ssl_utils_initialize_ssl(
+    const axis2_env_t *env, 
+    SSL_CTX *ctx,
+    axis2_socket_t socket
+    )
 {
     SSL *ssl = NULL;
     BIO *sbio = NULL;
@@ -105,7 +151,11 @@
 }
 
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_ssl_utils_cleanup_ssl(const axis2_env_t *env, SSL_CTX *ctx, SSL *ssl)
+axis2_ssl_utils_cleanup_ssl(
+    const axis2_env_t *env,
+    SSL_CTX *ctx,
+    SSL *ssl
+    )
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
 

Modified: webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_utils.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_utils.h?view=diff&rev=507889&r1=507888&r2=507889
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_utils.h (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/sender/ssl/ssl_utils.h Thu Feb 15 03:07:05 2007
@@ -31,14 +31,26 @@
 
 
 AXIS2_EXTERN SSL_CTX* AXIS2_CALL
-axis2_ssl_utils_initialize_ctx(const axis2_env_t *env, axis2_char_t *server_cert);
+axis2_ssl_utils_initialize_ctx(
+    const axis2_env_t *env,
+    axis2_char_t *server_cert,
+    axis2_char_t *key_file,
+    axis2_char_t *ssl_pp
+    );
 
 AXIS2_EXTERN SSL* AXIS2_CALL
-axis2_ssl_utils_initialize_ssl(const axis2_env_t *env, SSL_CTX *ctx, 
-                        axis2_socket_t socket);
+axis2_ssl_utils_initialize_ssl(
+    const axis2_env_t *env,
+    SSL_CTX *ctx,
+    axis2_socket_t socket
+    );
                         
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_ssl_utils_cleanup_ssl(const axis2_env_t *env, SSL_CTX *ctx, SSL *ssl);
+axis2_ssl_utils_cleanup_ssl(
+    const axis2_env_t *env,
+    SSL_CTX *ctx,
+    SSL *ssl
+    );
 
 #ifdef __cplusplus
 }

Modified: webservices/axis2/trunk/c/test/core/transport/http/test_http_transport.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/test/core/transport/http/test_http_transport.c?view=diff&rev=507889&r1=507888&r2=507889
==============================================================================
--- webservices/axis2/trunk/c/test/core/transport/http/test_http_transport.c (original)
+++ webservices/axis2/trunk/c/test/core/transport/http/test_http_transport.c Thu Feb 15 03:07:05 2007
@@ -189,10 +189,10 @@
     request_body = axis2_stream_create_basic(env);
     request = axis2_http_simple_request_create(env, request_line,
             NULL, 0, NULL);
-    url = axis2_url_create(env, "https", "localhost", 443,
+    url = axis2_url_create(env, "https", "localhost", 9090,
             NULL);
     /* Add an ssl certificate variable */
-    setenv("AXIS2_SSL_CA_FILE", "cert.pem", 1);
+    /*setenv("AXIS2_SSL_CA_FILE", "cert.pem", 1);*/
     header = axis2_http_header_create(env, "Host", AXIS2_URL_GET_SERVER(url, env));
     AXIS2_HTTP_SIMPLE_REQUEST_ADD_HEADER(request, env, header);
     client = axis2_http_client_create(env, url);



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org