[ 
https://issues.apache.org/jira/browse/QPID-7130?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Justin Ross updated QPID-7130:
------------------------------
    Component/s: C++ Client

> qpid C++ with SSL authentication returning dummy string from 
> Connection::getAuthenticatedUsername()
> ---------------------------------------------------------------------------------------------------
>
>                 Key: QPID-7130
>                 URL: https://issues.apache.org/jira/browse/QPID-7130
>             Project: Qpid
>          Issue Type: Improvement
>          Components: C++ Client
>    Affects Versions: qpid-cpp-0.34
>         Environment: Fedora 21 Linux
>            Reporter: Domen Vrankar
>            Assignee: Gordon Sim
>            Priority: Minor
>              Labels: features, patch
>             Fix For: qpid-cpp-1.35.0
>
>         Attachments: 
> 0001-qpid-messaging-Connection-getAuthenticatedUsername.patch, 
> 0002-Added-getLocalAuthId-to-all-socket-classes.patch, 
> 0003-Added-virtual-keyword-to-functions-BSDSocket-getKeyL.patch, 
> 0004-Added-getPeerAuthId-as-an-alias-for-getClientAuthId-.patch, 
> 0005-Deleted-old-getClientAuthId-function-that-was-replac.patch
>
>
> When using Qpid C++ without SASL or with authentication disabled you can do:
> qpid_message.setUserId(qpid_connection_.getAuthenticatedUsername());
> and message can be received on remote location.
> Without SASL "ANONYMOUS" string is returned.
> With SASL but without authentication "anonymous" string is returned.
> In both cases message isn't rejected by broker.
> With SASL and SLL authentication "dummy" is returned. This string is rejected 
> by broker and also doesn't help with identifying who sent the message.
> First patch fixes this by reading local certificate authentication id the 
> same way as SslSocket::getClientAuthId does but for local instead of peer 
> certificate.
> Second patch adds getLocalAuthId to all other classes derived from Socket 
> (not certain if this is necessary that's why it's in a separate patch).
> Third patch adds virtual keyword to BSDSocket getKeyLen, getClientAuthId and 
> ~BSDSocket() functions since this class is parent class of SslSocket. (Since 
> with C++11 and later compilers final and override keywords can be used to 
> find such errors perhaps two macros should be defined and used throughout the 
> code e.g.:
> create file qpid_cpp.hpp
> #if __cplusplus <= 199711L
>   #define QPID_CPP_OVERRIDE
>   #define QPID_CPP_FINAL
> #else
>   #define QPID_CPP_OVERRIDE override
>   #define QPID_CPP_FINAL final
> #endif
> and then used somewhere:
> #include "qpid_cpp.hpp"
> struct A {
>     virtual void foo() QPID_CPP_FINAL; // A::foo is final
>     virtual void bar();
>     virtual void bas();
> };
>  
> struct B QPID_CPP_FINAL : A { // struct B is final
>     void foo(); // Error: foo cannot be overridden as it's final in A
>     void bar() QPID_CPP_OVERRIDE;
>     int bas() QPID_CPP_OVERRIDE; // Error: wrong bar signature used
>     void baf() QPID_CPP_OVERRIDE; // Error: function doesn't override 
> anything 
> };
>  
> struct C : B { // Error: B is final
> };
> )
> Fourth patch adds getPeerAuthId as alias for getClientAuthId since current 
> name is meaningful only on broker side (on client side it returns broker 
> authentication id).
> Fifth patch removes getClientAuthId altogether (split into a separate patch 
> as I am not certain if this function can be accessed from outside Qpid 
> internal implementation and should remain as is).
> How to test:
> Build qpid with SASL and SSL.
> Create ssl certificate store.
> Run qpid with:
> qpidd --ssl-cert-db ${CERT_DB_DIR} --ssl-cert-password-file /tmp/password.txt 
> --ssl-cert-name 127.0.0.1 --ssl-require-client-authentication --acl-file 
> ${ACL_DIR}/acl_file.acl --auth yes
> ACL file should contain:
> acl allow send@QPID all # sender cert
> acl allow receive@QPID all # receiver cert
> acl deny all all
> On sending client use:
> qpid_message.setUserId(qpid_connection_.getAuthenticatedUsername());
> On receiving client use:
> qpid_message.getUserId();
> Message should be delivered and Id's should be the same and matching sender 
> certificate nickname.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to