Git Product home page Git Product logo

openssl.cr's People

Contributors

datanoise avatar plukevdh avatar technorama avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

openssl.cr's Issues

Add an options for SSL::Context.default

That can be really nice for developer who do not know much about SSL\TLS
Using TLS_method as the default should be considered responsible.

See here: https://www.openssl.org/docs/ssl/SSL_CTX_new.html

SSLv23_method(void), SSLv23_server_method(void), SSLv23_client_method(void)

    Use of these functions is deprecated. They have been replaced with TLS_Method(), TLS_server_method() and TLS_client_method() respectively. New code should use those functions instead.

Running crystal spec fails.

When I run crystal spec in the project directory, I get this error.

Error in ./spec/cipher_spec.cr:4: instantiating 'describe(OpenSSL::Cipher:Class)'

describe OpenSSL::Cipher do
^~~~~~~~

in /usr/local/Cellar/crystal-lang/0.7.7/src/spec/dsl.cr:3: instantiating 'Spec::RootContext:Class#describe(String, String, Int32)'

    Spec::RootContext.describe(description.to_s, file, line) do |context|
                      ^~~~~~~~

in /usr/local/Cellar/crystal-lang/0.7.7/src/spec/dsl.cr:3: instantiating 'Spec::RootContext:Class#describe(String, String, Int32)'

    Spec::RootContext.describe(description.to_s, file, line) do |context|
                      ^~~~~~~~

in ./spec/cipher_spec.cr:4: instantiating 'describe(OpenSSL::Cipher:Class)'

describe OpenSSL::Cipher do
^~~~~~~~

in ./spec/cipher_spec.cr:5: instantiating 'it(String)'

  it "encrypts/decrypts" do
  ^~

in ./spec/cipher_spec.cr:5: instantiating 'it(String)'

  it "encrypts/decrypts" do
  ^~

in ./spec/cipher_spec.cr:24: instantiating 'OpenSSL::Cipher#update(String)'

    s1 = c1.update("DATA")
            ^~~~~~

instantiating 'update(String, Nil)'

in ./src/cipher/cipher.cr:98: variable 'outl' is already defined, `out` must be used to define a variable, use another name

    if LibCrypto.evp_cipherupdate(@ctx, outa, out outl, ina, ina.length) != 1

Is there something I'm missing which is causing this error?

OpenSSL version: OpenSSL 1.0.2d 9 Jul 2015
Crystal version: Crystal 0.7.7 [170f859](Sat Sep 5 02:46:31 UTC 2015)

stdlib conflicts

Posted an issue here and raising here as well, as it likely has to do with how this lib is being implemented.

crystal-lang/crystal#2168

For reference, you can see the issue here: https://github.com/plukevdh/crystal-lib-conflicts

Several constants defined in lib_crypto.cr conflict with constants required by the stdlib implementation. This generally wouldn't be a problem, but several other libs within stdlib (like HTTP::Request) cause the runtime to explode. Curious on thoughts as how this might be resolved either by mechanisms existing within Crystal (I'm new to the language) or by changing implementations here. Or better yet, get these fantastic updates merge over to Crystal stdlib proper.

ssl.accpet

@datanoise @asterite

What do you guys think about instead of doing

tcp_server = TCPServer.new(443)
client = tcp_server.accept
OpenSSL::SSL::Socket.new_server(client, context) do |ssl_server|

To do it like Ruby

tcp_server = TCPServer.open(443)
ssl_server = OpenSSL::SSL::SSLServer.new(server, sslContext)
ssl_server.accept do |client|
...
...

where the accept is bundled into the ssl socket, but the accept is for the io (I think)
?

Roadmap for integration

@datanoise

When would you feel the repo is at a good enough stage to be integrated back to crystal ?

Right now most of my tests shows everything is working as it should

Unable to complete the handshake

I'm using the following code:

require "../src/openssl"
require "socket"

begin
  tcp_server = TCPServer.new(55555)
rescue e : Exception
  puts "Error in socket: #{e}"
end

if tcp_server
  context = OpenSSL::SSL::Context.new(OpenSSL::SSL::Method::SSLv23)
  context.private_key_file = "new.key"
  context.certificate_file = "cert.pem"
  context.cipher_list = "HIGH:!aNULL:!kRSA:!PSK:!SRP!MD5:!RC4"
  #context.set_options(LibSSL::OP_NO_SSLv2 | LibSSL::OP_NO_SSLv3)
  puts context.inspect
    loop do
      begin
        client = tcp_server.accept
        puts "In loop! accepted connection: #{client.inspect}"
        OpenSSL::SSL::Socket.new_server(client, context) do |ssl_server|
          buf :: UInt8[512]
          slice = buf.to_slice
          loop do
            len = ssl_server.read(slice)
            if len > 0
              ssl_server.write(slice[0, len])
            else
              break
            end
          end
        end
    rescue e : Exception
      puts "Error in SSL socket: #{e.message}\r\nlog: #{e.backtrace}"
    end
  end
end

Using your lib, latest version (I have a key.pem and cert.pem which I know works with ruby
And I try scanning my socket using

  1. https://github.com/bararchy/ruby-SSLscanner
  2. https://github.com/rbsec/sslscan

Both show that the server dosn't support any cipher, and from the server I get those errors:

Error in SSL socket: error:140780E5:SSL routines:ssl23_read:ssl handshake failure
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 69>
Error in SSL socket: error:140780E5:SSL routines:ssl23_read:ssl handshake failure
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 70>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 71>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 72>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 73>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 74>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 75>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 78>
Error in SSL socket: error:140780E5:SSL routines:ssl23_read:ssl handshake failure
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 80>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 7>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 8>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 9>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 10>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 11>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 12>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 13>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 14>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 15>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 16>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]
In loop! accepted connection: #<TCPSocket:fd 17>
Error in SSL socket: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher
log: ["*Exception@Exception#initialize<OpenSSL::SSL::SSLError, String?>:Array(String) +46 [0]", "*OpenSSL::SSL::SSLError@OpenSSL::OpenSSLError#initialize<OpenSSL::SSL::SSLError, Nil>:Array(String) +98 [0]", "*OpenSSL::SSL::SSLError::new<Nil>:OpenSSL::SSL::SSLError +114 [0]", "*OpenSSL::SSL::SSLError::new:OpenSSL::SSL::SSLError +8 [0]", "*OpenSSL::SSL::Socket#check_error<OpenSSL::SSL::Socket, Int32>:Nil +18 [0]", "*OpenSSL::SSL::Socket#read<OpenSSL::SSL::Socket, Slice(UInt8), Int32>:Int32 +87 [0]", "*OpenSSL::SSL::Socket@IO#read<OpenSSL::SSL::Socket, Slice(UInt8)>:Int32 +60 [0]", "__crystal_main +3121 [0]", "main +32 [0]", "__libc_start_main +240 [0]", "_start +41 [0]", " +41 [0]"]

Please send pull requests to Crystal :-)

Hi!

The code you are writing in Crystal is quite amazing! Mongo, AMQP, and now correct and complete bindings for OpenSSL.

The OpenSSL bindings in Crystal are poor/incomplete because we didn't have time to finish them, and we also lack a total understanding of its API (which is, again, just lack of time). If you can, please submit pull requests with your additions/changes, we would be more than happy to merge them :-)

I also really like that you wrote specs for this.

Our idea of Crystal's standard library is that it has support for most of the standard libraries and protocols out there. OpenSSL is very common so it would be nice to have excellent support for it out of the box.

Adding "ssl_ctx_set_options"

This should be added to "lib_ssl.cr"

code:

fun ssl_ctx_set_options = SSL_CTX_ctrl(context : SSLContext, command : Int32, long_arg : Int32, pointer_arg : Void*) : Int32

And for context.cr

code:

def set_options(ctx_options)
  LibSSL.ssl_ctx_set_options(@handle, LibSSL::SSL_CTRL_OPTIONS, ctx_options, nil)
end

This can allow us to set

context.set_options(LibSSL::OP_NO_SSLv2 | LibSSL::OP_NO_SSLv3)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.