datanoise / openssl.cr Goto Github PK
View Code? Open in Web Editor NEWOpenSSL binding for Crystal language
License: MIT License
OpenSSL binding for Crystal language
License: MIT License
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.
Is there a way we can achieve something like this: http://ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/SSL/SSLContext.html#method-i-ciphers ?
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)
Posted an issue here and raising here as well, as it likely has to do with how this lib is being implemented.
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.
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)
?
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
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
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]"]
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.
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)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.