⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sslcontext.h

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 H
字号:
//%2003//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002  BMC Software, Hewlett-Packard Development// Company, L. P., IBM Corp., The Open Group, Tivoli Systems.// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;// IBM Corp.; EMC Corporation, The Open Group.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions:// // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================//// Author: Markus Mueller (sedgewick_de@yahoo.de)//// Modified By: Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)//              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)//              Heather Sterling, IBM (hsterl@us.ibm.com)////%/////////////////////////////////////////////////////////////////////////////#ifndef Pegasus_SSLContext_h#define Pegasus_SSLContext_h#include <Pegasus/Common/CIMDateTime.h>#include <Pegasus/Common/Config.h>#include <Pegasus/Common/String.h>#include <Pegasus/Common/Exception.h>#include <Pegasus/Common/Linkage.h>typedef struct x509_store_ctx_st X509_STORE_CTX;PEGASUS_NAMESPACE_BEGINclass SSLCertificateInfoRep;class SSLContextRep;class SSLContext;class SSLSocket;class CIMServer;class CIMxmlIndicationHandler;/** This class provides the interface that a client gets as argument    to certificate verification call back function.*/class PEGASUS_COMMON_LINKAGE SSLCertificateInfo{public:    //    // Certificate validation result codes.    //    static const int    V_OK;    static const int    V_ERR_UNABLE_TO_GET_ISSUER_CERT;    static const int    V_ERR_UNABLE_TO_GET_CRL;    static const int    V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE;    static const int    V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE;    static const int    V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY;    static const int    V_ERR_CERT_SIGNATURE_FAILURE;    static const int    V_ERR_CRL_SIGNATURE_FAILURE;    static const int    V_ERR_CERT_NOT_YET_VALID;    static const int    V_ERR_CERT_HAS_EXPIRED;    static const int    V_ERR_CRL_NOT_YET_VALID;    static const int    V_ERR_CRL_HAS_EXPIRED;    static const int    V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD;    static const int    V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD;    static const int    V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD;    static const int    V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD;    static const int    V_ERR_OUT_OF_MEM;    static const int    V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT;    static const int    V_ERR_SELF_SIGNED_CERT_IN_CHAIN;    static const int    V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY;    static const int    V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE;    static const int    V_ERR_CERT_CHAIN_TOO_LONG;    static const int    V_ERR_CERT_REVOKED;    static const int    V_ERR_INVALID_CA;    static const int    V_ERR_PATH_LENGTH_EXCEEDED;    static const int    V_ERR_INVALID_PURPOSE;    static const int    V_ERR_CERT_UNTRUSTED;    static const int    V_ERR_CERT_REJECTED;    static const int    V_ERR_SUBJECT_ISSUER_MISMATCH;    static const int    V_ERR_AKID_SKID_MISMATCH;    static const int    V_ERR_AKID_ISSUER_SERIAL_MISMATCH;    static const int    V_ERR_KEYUSAGE_NO_CERTSIGN;    static const int    V_ERR_APPLICATION_VERIFICATION;    /** Constructor for a SSLCertificateInfo object.    Note: Do not use this constructor, instead use the private constructor.    The constructor is not for client applications use, it is intended to be    used only by the CIMServer.    @param subjectName subject name of the certificate.    @param issuerName  issuer name of the certificate.    @param errorDepth  depth of the certificate chain.    @param errorCode   error code from the default verification of the    certificate by the OpenSSL library.    @param respCode   result code from the default verification of the    certificate by the OpenSSL library.    */    SSLCertificateInfo(        const String subjectName,        const String issuerName,        const int errorDepth,        const int errorCode,        const int respCode);    /** Copy constructor for a SSLCertificateInfo object.    @param certificateInfo SSLCertificateInfo object to copy    */    SSLCertificateInfo(const SSLCertificateInfo& certificateInfo);    ~SSLCertificateInfo();    /** Gets the subject name of the certificate.    @return a string containing the subject name.    */    String getSubjectName() const;    /** Gets the issuer name of the certificate.    @return a string containing the issuer name.    */    String getIssuerName() const;    /** Gets the notAfter date from the validity period of     the certificate.    @return a CIMDateTime containing the notAfter date.    */    CIMDateTime getNotAfter() const;    /** Gets the notBefore date from the validity period of     the certificate.    @return a CIMDateTime containing the notBefore date.    */    CIMDateTime getNotBefore() const;    /** Gets the version (version number) from the certificate.    @return a int containing the version.    */    Uint32 getVersionNumber() const;    /** Gets the serialNumber value from the certificate.    @return a long integer containing the serial number.    */    long getSerialNumber() const;    /** Gets the depth of the certificate chain.    @return an int containing the depth of the certificate chain    */    Uint32 getErrorDepth() const;    /** Gets the pre-verify error code.    @return an int containing the pre-verify error code     */    Uint32 getErrorCode() const;    /** Sets the error code.    @param errorCode error code to be set    */    void setErrorCode(const int errorCode);    /** Gets the pre-verify error string.    @return a string containing the pre-verify error string    */    String getErrorString() const;    /** Gets the pre-verify response code.    @return an int containing the pre-verify response code     */    Uint32 getResponseCode() const;    /** Sets the response code.    Note: Do not use this function, the value set using this function     is ignored.    @param respCode response code to be set.    */    void setResponseCode(const int respCode);private:    /** Constructor for a SSLCertificateInfo object.    @param subjectName subject name of the certificate.    @param issuerName  issuer name of the certificate.    @param version version number value from the certificate.    @param serailNumber serial number value from the certificate.    @param notAfter notAfter date from the validity period of the certificate.    @param notBefore notBefore date from the validity period of the certificate.    @param depth  depth of the certificate chain.    @param errorCode   error code from the default verification of the    certificate by the OpenSSL library.    @param errorString error message from the default verification of the    certificate by the Open SSL library.    @param respCode   result code from the default verification of the    certificate by the OpenSSL library.    */    SSLCertificateInfo(        const String subjectName,        const String issuerName,        const Uint32 versionNumber,        const long   serialNumber,        const CIMDateTime notBefore,        const CIMDateTime notAfter,        const Uint32 depth,        const Uint32 errorCode,        const String errorString,        const Uint32 respCode);    SSLCertificateInfo();    SSLCertificateInfoRep* _rep;#if defined(PEGASUS_USE_232_CLIENT_VERIFICATION) && defined(PEGASUS_USE_EXPERIMENTAL_INTERFACES)    // SSLSocket needs to use the private constructor to create    // a certificate object to pass to the AuthenticationInfo and    // OperationContext classes    friend class SSLSocket;#endif    friend int prepareForCallback(int, X509_STORE_CTX*);};typedef Boolean (SSLCertificateVerifyFunction) (SSLCertificateInfo &certInfo);/** This class provides the interface that a client uses to create    SSL context.    For the OSs that don't have /dev/random device file,    must enable PEGASUS_SSL_RANDOMFILE flag and pass    random file name to constructor.*/class PEGASUS_COMMON_LINKAGE SSLContext{public:    /** Constructor for a SSLContext object.    @param trustStore file path of the trust store    @param verifyCert  function pointer to a certificate verification    call back function.  A null pointer indicates that no callback is    requested for certificate verification.    @param randomFile  file path of a random file that is used as a seed     for random number generation by OpenSSL.    @exception SSLException indicates failure to create an SSL context.    */    SSLContext(        const String& trustStore,        SSLCertificateVerifyFunction* verifyCert,        const String& randomFile = String::EMPTY);#ifdef PEGASUS_USE_DEPRECATED_INTERFACES    SSLContext(        const String& certPath,        SSLCertificateVerifyFunction* verifyCert,        const String& randomFile,        Boolean isCIMClient);#endif    SSLContext(const SSLContext& sslContext);    ~SSLContext();#if defined(PEGASUS_USE_232_CLIENT_VERIFICATION) && defined(PEGASUS_USE_EXPERIMENTAL_INTERFACES)    /** Gets the truststore path of the SSLContext object.  This may be a CA file or a directory.    @return a string containing the truststore path.    */    String getTrustStore() const;        /** Gets the x509 certificate path of the SSLContext object.    @return a string containing the certificate path.    */    String getCertPath() const;    /** Gets the private key path of the SSLContext object.    @return a string containing the key path    */    String getKeyPath() const;    /** Returns whether peer verification is ON of OFF    Corresponds to what the SSL_CTX_set_verify    @return true if verification is on; false otherwise    */    Boolean isPeerVerificationEnabled() const;    /** Returns whether enableSSLTrustStoreAutoUpdate is ON or OFF    If on, untrusted certificates sent with privileged credentials will    be automatically added to the server's truststore    @return true if auto update is on; false otherwise    */    Boolean isTrustStoreAutoUpdateEnabled() const;#endif#ifndef PEGASUS_USE_232_CLIENT_VERIFICATIONprivate:#endif    /** Constructor for a SSLContext object. This constructor is intended    to be used by the CIMServer or CIMClient (with PEGASUS_USE_232_CLIENT_VERIFICATION) only.    @param trustStore file path of the trust store.    @param certPath  file path of the server certificate.    @param KeyPath  file path of the private key.     @param verifyCert  function pointer to a certificate verification    call back function.  A null pointer indicates that no callback is    requested for certificate verification.    @param randomFile  file path of a random file that is used as a seed    for random number generation by OpenSSL.    @exception SSLException indicates failure to create an SSL context.    */    SSLContext(        const String& trustStore,        const String& certPath,        const String& keyPath,        SSLCertificateVerifyFunction* verifyCert,        const String& randomFile);#ifdef PEGASUS_USE_232_CLIENT_VERIFICATIONprivate:#endif#if defined(PEGASUS_USE_232_CLIENT_VERIFICATION) && defined(PEGASUS_USE_EXPERIMENTAL_INTERFACES)    SSLContext(        const String& trustStore,        const String& certPath,        const String& keyPath,        SSLCertificateVerifyFunction* verifyCert,        Boolean trustStoreAutoUpdate,        Boolean failIfNoPeerCert,        const String& randomFile);#endif#ifdef PEGASUS_USE_DEPRECATED_INTERFACES    SSLContext(        const String& certPath,        const String& certKeyPath,        SSLCertificateVerifyFunction* verifyCert,        const String& randomFile);#endif    SSLContext();    SSLContextRep* _rep;    friend class SSLSocket;    friend class CIMServer;    friend class CIMxmlIndicationHandler;};PEGASUS_NAMESPACE_END#endif /* Pegasus_SSLContext_h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -