Dear Sirs,

I am writing an https client using Open SSL. I am having problems with 
connecting to secured webservers through Netscape proxy. If I use CacheFlow 
proxy it works fine. The tunnel on the proxy server is created successfully 
Proxy responds with connection established but SSL_connect fails with an 
error (Connecting to address: 10.190.68.10
ocsp.preprod.identrus.abnamro.com:443
SSL Connect failed with error code: error:00000005:lib(0):func(0):bad asn1 
object header
SSL_ERROR_SYSCALL).
Code which I execute is bellow. THis code fails only with Netscape proxy.

Thank you for cooperation,
Vlad.

        if(proxy){
                char uriBuf[100];
                sprintf(uriBuf, "%s:%d", url->GetServer(), url->GetPort());
                printf(uriBuf, "%s:%d", url->GetServer(), url->GetPort());
                proxy->GetServer();
                HTTPRequestHeader request("CONNECT",uriBuf, "HTTP/1.0");
                HTTPHeader header;
                header.AddField("User-agent", "Mozilla/4.0");
                header.AddField("Host", url->GetServer());
                header.AddField("Content-Length", "0");
                header.AddField("Proxy-Connection", "Keep-Alive");
                header.AddField("Pragma", "no-cache");
                request.SetHeader(&header);
                DWORD optval = SO_KEEPALIVE;
                err = setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (const char 
*)&optval, 
sizeof(optval));

                int reqlen = 0;
                char * reqBuffer = (char *)request.Flatten(&reqlen);
                //unsignd char * connectRequest = "CONNECT 
www.si.identrus.abnamro.com:443 
HTTP/1.0\n\rUser-agent: Mozilla/4.0\n\r\n\r";
                send(sock, reqBuffer, reqlen,0);
                //DataSource tmpsrc(sock);
                unsigned char respbuff[MAX_BUFFER];
                memset(respbuff, 0, sizeof(respbuff));
                //int receivedLen = tmpsrc.Read(respbuff, sizeof(respbuff));
                int nread = 0;
                int i=0;
                for(;i<sizeof(respbuff)/sizeof(*respbuff);i+=nread){
                        fd_set l_readfds;
                        fd_set l_errfds;
                        FD_ZERO(&l_readfds);
                        FD_ZERO(&l_errfds);
                        FD_SET(sock, &l_readfds);
                        FD_SET(sock, &l_errfds);
                        int n=0;
                        do{
                                n=select( 1, &l_readfds, 0, &l_errfds, NULL );
                        }while(n==0);
                        if(FD_ISSET(sock, &l_errfds)){
                                return i;
                        }
                        if(FD_ISSET(sock, &l_readfds)){
                                nread = recv(sock, (char *)respbuff+i, 
sizeof(respbuff)/sizeof(*respbuff)-i, 0);
                                if(nread==-1||nread==0||strstr((char 
*)respbuff,"\r\n")){
                                        break;
                                }
                        }
                }

                HTTPResponse response;
                response.ParseHeader(respbuff);
                if(response.GetStatus()!=200){
                        printf("Proxy Server responded with bad Connection status.\n");
                        return -1;
                }
        }

        if(url->IsSecure()){
                SSLeay_add_ssl_algorithms();
                meth = SSLv23_client_method();
                SSL_load_error_strings();
                ctx = SSL_CTX_new (meth);
                if(!ctx){
                        printf("SSSL create context failed!\n");
                        return -1;
                }
                SSL * ssl = SSL_new (ctx);
                dataSource = new DataSource(ssl);
                if(!ssl){
                        printf("Data source created!\n");
                        return -1;
                }
                SSL_set_fd (ssl, sock);
                err = SSL_connect (ssl);
                if(err!=1){

                        SSL_load_error_strings();
                        int sslCode = SSL_get_error(ssl, err);
                        ERR_print_errors_fp(stdout);

                        printf("SSL Connect failed with error code: 
%s\n",ERR_error_string(sslCode, NULL));
                        switch(sslCode){
                                case SSL_ERROR_SSL:
                                        printf("SSL_ERROR_SSL\n");
                                break;
                                case SSL_ERROR_SYSCALL:
                                        printf("SSL_ERROR_SYSCALL\n");

                                break;
                                case SSL_ERROR_WANT_X509_LOOKUP:
                                        printf("SSL_ERROR_WANT_X509_LOOKUP\n");
                                break;
                                case SSL_ERROR_WANT_CONNECT:
                                        printf("SSL_ERROR_WANT_CONNECT\n");
                                break;
                                case SSL_ERROR_WANT_READ:
                                        printf("SSL_ERROR_WANT_READ\n");
                                break;
                                case SSL_ERROR_WANT_WRITE:
                                        printf("SSL_ERROR_WANT_WRITE\n");
                                break;
                                case SSL_ERROR_ZERO_RETURN:
                                        printf("SSL_ERROR_ZERO_RETURN\n");
                                break;
                        }

//                      return sslCode;
                }
                server_cert = SSL_get_peer_certificate (ssl);
                if(!server_cert){
                        return -1;
                }


_________________________________________________________________
Join the world�s largest e-mail service with MSN Hotmail. 
http://www.hotmail.com

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to