Qual é a diferença entre BIO read/BIO write E SSL read/SSL write quando a BIOs é BIOS de memória e não BIOS de tomada?

Estou confuso sobre a diferença entre as BIOTINAS BIO_read()/BIO_write() e SSL_read()/SSL_write() quando as BIOs são BIOS de memória e não BIOS de socket.

estou a tentar codificar um servidor WebRTC usando a libnice para a pilha de gelo e openssl para a pilha DTLS. A pilha de gelo tem a ligação do 'socket' ao cliente, por isso não posso usar a BIOS baseada no 'socket' no openssl. Em vez disso, estou a usar a BIOS de memória.

Então, o procedimento de alto nível que estou a usar é que, quando eu ... Receba as mensagens DTLS do cliente na tomada de gelo, eu escrevo essa mensagem para a pilha DTLS usando BIO_write(). Em seguida, quando a pilha DTLS tem uma mensagem para enviar para o cliente eu recebo essa mensagem usando o BIO_read() e enviá-lo para o cliente usando a tomada de gelo.

Eu vi alguns exemplos de código fonte que faz essencialmente este procedimento, mas eles também chamam a rotina SSL_read() após a chamada BIO_write (). Isto não faz sentido para mim. Por que é necessária a chamada para SSL_read () depois de ter escrito essencialmente a mensagem do cliente na pilha DTLS usando a chamada BIO_write ()? Se eu não chamar SSL_read() após o BIO_write() meu código não funciona. Mas quando eu ligo para SSL_read () após o BIO_write (), isso é realmente trocar as mensagens de aperto de mão com o cliente do navegador.

questão: usando BIOS de memória, Qual é a diferença entre BIO_read () e SSL_read (); Pergunta: usando BIOS de memória, Qual é a diferença entre BIO_write() e SSL_write()? Pergunta: é o bloqueio de memória predefinido ou o não bloqueio? Presumo que não esteja a bloquear, uma vez que é uma BIO-base de memória e não uma BIO-base de socket.

Obrigado., - Andres

Author: Andres Gonzalez, 2016-07-22

1 answers

Deparei-me com o mesmo problema de perceber como tudo funciona. Posso fornecer-lhe alguns links úteis e cites.

"A camada SSL é configurada para funcionar no modo buffer. Então fazendo SSL_write significa que estamos enviando bytes não criptografados para a biblioteca SSL, para que ele possa criptografar esses bytes e colocar os bytes criptografados resultantes em um buffer. Então nós lemos do buffer usando BIO_read. A mesma coisa em marcha atrás para ler. Nós realmente fazemos Bio_ escrever então SSL_read nisso caso."

Fonte: https://groups.google.com/forum/#! topic / grpc-io / 8Ulf_G5kpyA

OpenSSL data handling - verifique esta parte a partir da ligação abaixo. Pode dar-lhe alguma informação útil. https://famellee.wordpress.com/2013/02/20/use-openssl-with-io-completion-port-and-certificate-signing/

BIOs - verifique esta parte a partir da ligação abaixo. Pode dar-te alguma coisa útil. informacao. http://www.roxlu.com/2014/042/using-openssl-with-memory-bios

 7
Author: Bleza, 2016-08-07 12:03:33