ÕâÆª½Ì³ÌC++ BIO_new_socketº¯Êý´úÂëʾÀýдµÃºÜʵÓã¬Ï£ÍûÄܰﵽÄú¡£
±¾ÎÄÕûÀí»ã×ÜÁËC++ÖÐBIO_new_socketº¯ÊýµÄµäÐÍÓ÷¨´úÂëʾÀý¡£Èç¹ûÄúÕý¿àÓÚÒÔÏÂÎÊÌ⣺C++ BIO_new_socketº¯ÊýµÄ¾ßÌåÓ÷¨£¿C++ BIO_new_socketÔõôÓã¿C++ BIO_new_socketʹÓõÄÀý×Ó£¿ÄÇô¹§Ï²Äú, ÕâÀᆱѡµÄº¯Êý´úÂëʾÀý»òÐí¿ÉÒÔΪÄúÌṩ°ïÖú¡£ ÔÚÏÂÎÄÖÐÒ»¹²Õ¹Ê¾ÁËBIO_new_socketº¯ÊýµÄ28¸ö´úÂëʾÀý£¬ÕâЩÀý×ÓĬÈϸù¾ÝÊÜ»¶Ó³Ì¶ÈÅÅÐò¡£Äú¿ÉÒÔΪϲ»¶»òÕ߸оõÓÐÓõĴúÂëµãÔÞ£¬ÄúµÄÆÀ¼Û½«ÓÐÖúÓÚÎÒÃǵÄÏµÍ³ÍÆ¼ö³ö¸ü°ôµÄC++´úÂëʾÀý¡£ ʾÀý1: ssl_setup_socket/** Associate an SSL object with a socket and return it. * /param sock socket descriptor to associate with an SSL object. * /return pointer to SSL object. */SSL *ssl_setup_socket(int sock){ SSL *ssl; BIO *bio; ssl = SSL_new(ctx); bio = BIO_new_socket(sock, BIO_NOCLOSE); BIO_set_nbio(bio, 1); SSL_set_bio(ssl, bio, bio); return ssl;}
¿ª·¢ÕßID:tkrajcar£¬ÏîÄ¿Ãû³Æ:pypenn£¬´úÂëÐÐÊý:16£¬
ʾÀý2: ssl_setup_socket/** Associate an SSL object with a socket and return it. * /param sock socket descriptor to associate with an SSL object. * /return pointer to SSL object. */SSL *ssl_setup_socket(int sock){ SSL *ssl; BIO *bio; ssl = ssl_alloc_struct(); bio = BIO_new_socket(sock, BIO_NOCLOSE); BIO_set_nbio(bio, 1); SSL_set_bio(ssl, bio, bio); return ssl;}
¿ª·¢ÕßID:zetafunction£¬ÏîÄ¿Ãû³Æ:pennmush-mirror£¬´úÂëÐÐÊý:16£¬
ʾÀý3: SSL_newSSL *ssl_new(SSL_CTX *ctx,int s){ BIO *sbio; SSL *ssl; ssl = SSL_new(ctx); if (!ssl) return 0; sbio = BIO_new_socket(s,BIO_NOCLOSE); if (!sbio) return 0; SSL_set_bio(ssl,sbio,sbio); return ssl;}
¿ª·¢ÕßID:Safari77£¬ÏîÄ¿Ãû³Æ:ucspi-ssl-fehcom£¬´úÂëÐÐÊý:12£¬
ʾÀý4: protocol_ssl_acceptstatic protocol_t *protocol_ssl_accept(protocol_t * p, void *options){ protocol_t *newp; struct sockaddr_in remote; socklen_t addrlen; int ret; ssl_private_t *ssl_p = (ssl_private_t *) p->_protocol_p; ssl_private_t *new_ssl_p; struct sockaddr name; char hostname[128]; flowop_options_t *flowop_options = (flowop_options_t *) options; BIO *sbio; newp = protocol_ssl_new(); new_ssl_p = (ssl_private_t *) newp->_protocol_p; addrlen = (socklen_t) sizeof (remote); uperf_debug("ssl - ssl obj waiting for accept/n"); newp->fd = accept(p->fd, (struct sockaddr *) &remote, &addrlen); if (newp->fd < 0) { uperf_log_msg(UPERF_LOG_ERROR, errno, "accept"); return (NULL); } if (getnameinfo((const struct sockaddr *) & remote, addrlen, hostname, sizeof (hostname), NULL, 0, 0) == 0) { uperf_debug("ssl - Connection from %s:%d/n", hostname, SOCK_PORT(remote)); strlcpy(newp->host, hostname, sizeof (newp->host)); newp->port = SOCK_PORT(remote); } if (flowop_options) { if ((load_engine(flowop_options->engine)) == -1) { uperf_info("ssl - Engine %s does NOT exist! Using the default OpenSSL softtoken", flowop_options->engine); } } sbio = BIO_new_socket(newp->fd, BIO_NOCLOSE); if (!(new_ssl_p->ssl = SSL_new(ctx))) { uperf_log_msg(UPERF_LOG_ERROR, 0, "SSL_new error"); return (NULL); } SSL_set_bio(new_ssl_p->ssl, sbio, sbio); ret = SSL_accept(new_ssl_p->ssl); if (my_ssl_error(new_ssl_p->ssl, ret) == 0) { return (newp); } else { return (0); }}
¿ª·¢ÕßID:FPiriz£¬ÏîÄ¿Ãû³Æ:uperf£¬´úÂëÐÐÊý:52£¬
ʾÀý5: main/* Main Entry */int main(int argc, char **argv){ // init connection object Connection conn; memset(&conn, 0, sizeof(conn)); conn.port = PORT; // assign default port conn.host = HOST; // Parse arguments parseArguments(argc, argv, &conn); // init SSL library conn.sslContext = initSSLContext(CLIENT_CERTIFICATE, CA_CERTIFICATE); SSL_CTX_set_options(conn.sslContext, SSL_OP_NO_SSLv2); SSL_CTX_set_cipher_list(conn.sslContext, "SHA1"); // Connect if (tcpConnect(&conn) < 0){ tcpDisconnect(&conn); exit(0); } SSL * ssl = SSL_new(conn.sslContext); BIO * sbio = BIO_new_socket(conn.socket, BIO_NOCLOSE); SSL_set_bio(ssl, sbio, sbio); int ret; ret = SSL_connect(ssl); if (ret <= 0){ printf(FMT_CONNECT_ERR); handleError(ssl, ret); } else{ // Process Message if (checkServerCertification(ssl) == OK){ processMessage(ssl); } } // close ssl connection if (!SSL_shutdown(ssl)){ tcpDisconnect(&conn); SSL_shutdown(ssl); } SSL_free(ssl); // Disconnect tcpDisconnect(&conn); destroySSLContext(conn.sslContext); return 1;}
¿ª·¢ÕßID:zd2100£¬ÏîÄ¿Ãû³Æ:ECE568£¬´úÂëÐÐÊý:52£¬
ʾÀý6: SSL_newvoid sslsocket::complete_secure_connect(){ // create SSL and BIO objects and then initialize ssl client mode. // setup SSL session now that we have TCP connection. SSL_CTX* ctx = context_.ssl(); ssl_ = SSL_new(ctx); if (!ssl_) throw std::runtime_error("SSL_new failed"); // create new IO object bio_ = BIO_new_socket(socket_, BIO_NOCLOSE); if (!bio_) throw std::runtime_error("BIO_new_socket failed"); // connect the IO object with SSL, this takes the ownership // of the BIO object. SSL_set_bio(ssl_, bio_, bio_); ERR_clear_error(); // go into client mode. while (true) { const int ret = SSL_connect(ssl_); if (ret == 1) break; const int err = SSL_get_error(ssl_, ret); switch (err) { case SSL_ERROR_WANT_READ: ssl_wait_read(); break; case SSL_ERROR_WANT_WRITE: ssl_wait_write(); break; case SSL_ERROR_SYSCALL: if (ret == -1) throw std::system_error(get_last_socket_error(), "SSL socket I/O error"); // fallthrough intended default: throw std::runtime_error("SSL_connect failed"); } }}
¿ª·¢ÕßID:ensisoft£¬ÏîÄ¿Ãû³Æ:newsflash-plus£¬´úÂëÐÐÊý:50£¬
ʾÀý7: hssl_server_sslherror_thssl_server_ssl(hsocket_t * sock){ SSL *ssl; int ret; BIO *sbio; if (!enabled) return H_OK; log_verbose2("Starting SSL initialization for socket %d", sock->sock); if (!(ssl = SSL_new(context))) { log_warn1("SSL_new failed"); return herror_new("hssl_server_ssl", HSSL_ERROR_SERVER, "Cannot create SSL object"); } /* SSL_set_fd(ssl, sock->sock); */ sbio = BIO_new_socket(sock->sock, BIO_NOCLOSE); if (sbio == NULL) { log_error1("BIO_new_socket failed"); return NULL; } // BIO_set_callback(sbio, hssl_bio_cb); sbio->method->bread = _hssl_bio_read; SSL_set_bio(ssl, sbio, sbio); if ((ret = SSL_accept(ssl)) <= 0) { herror_t err; log_error2("SSL_accept failed (%s)", _hssl_get_error(ssl, ret)); err = herror_new("hssl_server_ssl", HSSL_ERROR_SERVER, "SSL_accept failed (%s)", _hssl_get_error(ssl, ret)); SSL_free(ssl); return err; } sock->ssl = ssl; return H_OK;}
¿ª·¢ÕßID:GENI-GEMINI£¬ÏîÄ¿Ãû³Æ:LAMP£¬´úÂëÐÐÊý:50£¬
ʾÀý8: PetscSSLInitializeContext/*@C PetscHTTPSConnect - connect to a HTTPS server Input Parameters:+ host - the name of the machine hosting the HTTPS server. port - the port number where the server is hosting, usually 443- ctx - value obtained with PetscSSLInitializeContext() Output Parameters:+ sock - socket to connect- ssl - the argument passed to PetscHTTPSRequest() Level: advanced.seealso: PetscOpenSocket(), PetscHTTPSRequest(), PetscSSLInitializeContext()@*/PetscErrorCode PetscHTTPSConnect(const char host[],int port,SSL_CTX *ctx,int *sock,SSL **ssl){ BIO *sbio; PetscErrorCode ierr; PetscFunctionBegin; /* Connect the TCP socket*/ ierr = PetscOpenSocket(host,port,sock);CHKERRQ(ierr); /* Connect the SSL socket */ *ssl = SSL_new(ctx); sbio = BIO_new_socket(*sock,BIO_NOCLOSE); SSL_set_bio(*ssl,sbio,sbio); if (SSL_connect(*ssl) <= 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_LIB,"SSL connect error"); PetscFunctionReturn(0);}
¿ª·¢ÕßID:firedrakeproject£¬ÏîÄ¿Ãû³Æ:petsc£¬´úÂëÐÐÊý:32£¬
|