示例#1
0
        public int InternalClientCertificateSelectionCallback(Ssl ssl, out X509Certificate x509_cert, out CryptoKey key)
        {
            int nRet = 0;

            x509_cert = null;
            key       = null;

            Core.Stack <X509Name> name_stack = ssl.CAList;
            string[] strIssuers = new string[name_stack.Count];
            int      count      = 0;

            foreach (X509Name name in name_stack)
            {
                strIssuers[count++] = name.OneLine;
            }

            if (localCertificateSelectionCallback != null)
            {
                X509Certificate cert = localCertificateSelectionCallback(this, targetHost, clientCertificates, ssl.GetPeerCertificate(), strIssuers);
                if (cert != null && cert.HasPrivateKey)
                {
                    x509_cert = cert;
                    key       = cert.PrivateKey;
                    // Addref the cert and private key
                    x509_cert.AddRef();
                    key.AddRef();
                    // return success
                    nRet = 1;
                }
            }

            return(nRet);
        }
        private int OnClientCertificate(Ssl ssl, out X509Certificate x509_cert, out CryptoKey key)
        {
            x509_cert = null;
            key       = null;

            var name_stack = ssl.CAList;
            var strIssuers = new string[name_stack.Count];
            var count      = 0;

            foreach (var name in name_stack)
            {
                strIssuers[count++] = name.OneLine;
            }

            if (OnLocalCertificate != null)
            {
                var cert = OnLocalCertificate(
                    this,
                    targetHost,
                    clientCertificates,
                    ssl.GetPeerCertificate(),
                    strIssuers
                    );
                if (cert != null && cert.HasPrivateKey)
                {
                    x509_cert = cert;
                    key       = cert.PrivateKey;
                    // Addref the cert and private key
                    x509_cert.AddRef();
                    key.AddRef();
                    // return success
                    return(1);
                }
            }

            return(0);
        }