profile
viewpoint
Adam St. John astjohn Mississauga, Ontario, Canada http://www.astjohn.ca

astjohn/cornerstone 6

A rails engine for customer care.

astjohn/astjohn.ca 1

Personal Homepage

astjohn/chronos 1

A modern datepicker

astjohn/coffee-script-project-template 1

Build system for CoffeeScript projects compiled with Google's Closure Compiler

astjohn/Dictionaries 1

Spell check dictionaries for Sublime Text.

astjohn/has_threaded_comments 1

Add an entire threaded comment system to your Rails application with only 7 lines of code.

astjohn/jquery-pjax 1

pushState + ajax = pjax

astjohn/koala 1

A lightweight, flexible library for Facebook with support for OAuth authentication, the Graph and REST APIs, realtime updates, and test users.

astjohn/android-websockets 0

Bare minimum websockets (hybi13/RFC) client for Android

issue closedjruby/jruby-openssl

"closing inbound before receiving peer's close_notify" errors

I've been getting intermittent javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify errors for a few months now, if memory serves I believe it was only after updating to JRuby 9.2.13.0 (I could be wrong about that though)

In any case, there's actually a good way to reliably reproduce it! I connect to my MySQL 8.0 database through SSL with a config like the following:

production:
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_unicode_ci
  reconnect: false
  database: xxx
  pool: 10
  username: xxx
  password: xxx
  host: db-8-0.xxxxx.us-east-1.rds.amazonaws.com
  read_timeout: 120
  write_timeout: 120
  connect_timeout: 10
  connection_alive_timeout: 120
  properties:
    useSSL: true
    requireSSL: true
    verifyServerCertificate: true
    trustCertificateKeyStoreUrl: "file:/rds-ca/java-rds-ca"
    trustCertificateKeyStorePassword: changeit
    enabledTLSProtocols: "TLSv1.2"
    enabledSSLCipherSuites: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
    autoReconnect: false
    connectTimeout: 10000
    socketTimeout: 120000
    serverTimezone: "America/Los_Angeles"

and when I run RAILS_ENV=production bundle exec rake db:migrate, every single time I get error reports like the following (although the command does exit with status 0):

Thu Dec 31 06:57:14 PST 2020 WARN: Caught while disconnecting...

EXCEPTION STACK TRACE:



** BEGIN NESTED EXCEPTION ** 

javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify

STACKTRACE:

javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:133)
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:337)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:293)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:284)
        at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:742)
        at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:721)
        at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:2249)
        at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4232)
        at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1472)
        at arjdbc.jdbc.RubyJdbcConnection.close(RubyJdbcConnection.java:3700)
        at arjdbc.jdbc.RubyJdbcConnection.setConnection(RubyJdbcConnection.java:2890)
        at arjdbc.jdbc.RubyJdbcConnection.disconnect(RubyJdbcConnection.java:661)
        at arjdbc.jdbc.RubyJdbcConnection$INVOKER$i$0$0$disconnect.call(RubyJdbcConnection$INVOKER$i$0$0$disconnect.gen)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:121)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:108)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:192)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.doYield(IRBlockBody.java:166)
        at org.jruby.runtime.BlockBody.yield(BlockBody.java:108)
        at org.jruby.runtime.Block.yield(Block.java:184)
        at org.jruby.RubyArray.each(RubyArray.java:1809)
        at org.jruby.RubyArray$INVOKER$i$0$0$each.call(RubyArray$INVOKER$i$0$0$each.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroBlock.call(JavaMethod.java:555)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.targets.YieldSite.yieldSpecific(YieldSite.java:156)
        at home.web.$_dot_rvm.rubies.jruby_minus_9_dot_2_dot_14_dot_0.lib.ruby.stdlib.monitor.RUBY$method$mon_synchronize$0(/home/web/.rvm/rubies/jruby-9.2.14.0/lib/ruby/stdlib/monitor.rb:235)
        at home.web.$_dot_rvm.rubies.jruby_minus_9_dot_2_dot_14_dot_0.lib.ruby.stdlib.monitor.RUBY$method$mon_synchronize$0$__VARARGS__(/home/web/.rvm/rubies/jruby-9.2.14.0/lib/ruby/stdlib/monitor.rb)
        at org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:70)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:137)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:386)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:184)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:191)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:337)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:121)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:108)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:192)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:60)
        at org.jruby.runtime.Block.call(Block.java:143)
        at org.jruby.RubyProc.call(RubyProc.java:299)
        at org.jruby.RubyProc$INVOKER$i$call.call(RubyProc$INVOKER$i$call.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrOneOrTwoOrNBlock.call(JavaMethod.java:371)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:203)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:325)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.doYield(IRBlockBody.java:166)
        at org.jruby.runtime.BlockBody.yield(BlockBody.java:108)
        at org.jruby.runtime.Block.yield(Block.java:184)
        at org.jruby.RubyArray.each(RubyArray.java:1809)
        at org.jruby.RubyArray$INVOKER$i$0$0$each.call(RubyArray$INVOKER$i$0$0$each.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroBlock.call(JavaMethod.java:555)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:84)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:172)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:137)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:92)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:191)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:178)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:208)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:396)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:205)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:325)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:549)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.doYield(IRBlockBody.java:166)
        at org.jruby.runtime.BlockBody.yield(BlockBody.java:108)
        at org.jruby.runtime.Block.yield(Block.java:184)
        at org.jruby.RubyArray.each(RubyArray.java:1809)
        at org.jruby.RubyArray$INVOKER$i$0$0$each.call(RubyArray$INVOKER$i$0$0$each.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroBlock.call(JavaMethod.java:555)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:121)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:108)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:192)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:121)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:108)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:192)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_ROOT(Interpreter.java:96)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:81)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:30)
        at org.jruby.ir.IRTranslator.execute(IRTranslator.java:42)
        at org.jruby.Ruby.runInterpreter(Ruby.java:1218)
        at org.jruby.Ruby.loadFile(Ruby.java:2785)
        at org.jruby.runtime.load.LibrarySearcher$ResourceLibrary.load(LibrarySearcher.java:234)
        at org.jruby.runtime.load.LibrarySearcher$FoundLibrary.load(LibrarySearcher.java:34)
        at org.jruby.runtime.load.LoadService.load(LoadService.java:343)
        at org.jruby.RubyKernel.loadCommon(RubyKernel.java:1039)
        at org.jruby.RubyKernel.load(RubyKernel.java:1009)
        at org.jruby.RubyKernel$INVOKER$s$load.call(RubyKernel$INVOKER$s$load.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:417)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_ROOT(Interpreter.java:96)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:81)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:30)
        at org.jruby.ir.IRTranslator.execute(IRTranslator.java:42)
        at org.jruby.Ruby.runInterpreter(Ruby.java:1218)
        at org.jruby.Ruby.loadFile(Ruby.java:2785)
        at org.jruby.runtime.load.LibrarySearcher$ResourceLibrary.load(LibrarySearcher.java:234)
        at org.jruby.runtime.load.LibrarySearcher$FoundLibrary.load(LibrarySearcher.java:34)
        at org.jruby.runtime.load.LoadService.load(LoadService.java:343)
        at org.jruby.RubyKernel.loadCommon(RubyKernel.java:1039)
        at org.jruby.RubyKernel.load(RubyKernel.java:1009)
        at org.jruby.RubyKernel$INVOKER$s$load.call(RubyKernel$INVOKER$s$load.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:417)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:549)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:121)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:108)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:192)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.RubyClass.finvokeWithRefinements(RubyClass.java:514)
        at org.jruby.RubyBasicObject.send(RubyBasicObject.java:1755)
        at org.jruby.RubyBasicObject$INVOKER$i$send.call(RubyBasicObject$INVOKER$i$send.gen)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:549)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:549)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:92)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:191)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:178)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:208)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:396)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:205)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:325)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.ir.runtime.IRRuntimeHelpers.unresolvedSuper(IRRuntimeHelpers.java:1206)
        at org.jruby.ir.instructions.ClassSuperInstr.interpret(ClassSuperInstr.java:86)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:549)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.ir.runtime.IRRuntimeHelpers.unresolvedSuper(IRRuntimeHelpers.java:1206)
        at org.jruby.ir.instructions.ClassSuperInstr.interpret(ClassSuperInstr.java:86)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:92)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:191)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:178)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:208)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:396)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:205)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:325)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_ROOT(Interpreter.java:96)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:81)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:30)
        at org.jruby.ir.IRTranslator.execute(IRTranslator.java:42)
        at org.jruby.Ruby.runInterpreter(Ruby.java:1218)
        at org.jruby.Ruby.loadFile(Ruby.java:2785)
        at org.jruby.runtime.load.LibrarySearcher$ResourceLibrary.load(LibrarySearcher.java:234)
        at org.jruby.runtime.load.LibrarySearcher$FoundLibrary.load(LibrarySearcher.java:34)
        at org.jruby.runtime.load.LoadService.load(LoadService.java:343)
        at org.jruby.RubyKernel.loadCommon(RubyKernel.java:1039)
        at org.jruby.RubyKernel.load(RubyKernel.java:1009)
        at org.jruby.RubyKernel$INVOKER$s$load.call(RubyKernel$INVOKER$s$load.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:417)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at home.web.$_dot_rvm.rubies.jruby_minus_9_dot_2_dot_14_dot_0.bin.bundle.invokeOther8:load(/home/web/.rvm/rubies/jruby-9.2.14.0/bin/bundle:23)
        at home.web.$_dot_rvm.rubies.jruby_minus_9_dot_2_dot_14_dot_0.bin.bundle.RUBY$script(/home/web/.rvm/rubies/jruby-9.2.14.0/bin/bundle:23)
        at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:710)
        at org.jruby.ir.Compiler$1.load(Compiler.java:89)
        at org.jruby.Ruby.runScript(Ruby.java:1205)
        at org.jruby.Ruby.runNormally(Ruby.java:1128)
        at org.jruby.Ruby.runNormally(Ruby.java:1146)
        at org.jruby.Ruby.runFromMain(Ruby.java:958)
        at org.jruby.Main.doRunFromMain(Main.java:400)
        at org.jruby.Main.internalRun(Main.java:292)
        at org.jruby.Main.run(Main.java:234)
        at org.jruby.Main.main(Main.java:206)


** END NESTED EXCEPTION **

Just to be clear, I am also seeing them a bunch in a background process that makes tons of SSL connections, although they aren't frequent enough to be a huge concern or anything.

The exception above is from my Ubuntu 18.04 machine running JRuby 9.2.14.0

closed time in 14 days

mohamedhafez

issue commentjruby/jruby-openssl

"closing inbound before receiving peer's close_notify" errors

Taking a closer look at all my stack traces, I don't think this actually has anything to do with jruby-openssl, I think it's a mysql connector issue. Closing and moving to ar-jdbc

mohamedhafez

comment created time in 14 days

issue commentjruby/jruby-openssl

ECDSA key cannot be loaded / is not sent to server

I have found error OpenSSL::PKey::ECError: Neither PUB key nor PRIV key: PKeyEC.java:326 to be correlated with https://github.com/jruby/jruby-openssl/issues/189

p-mongo

comment created time in 18 days

issue openedjruby/jruby-openssl

Add OpenSSL::PKey::EC::Point to_octet_string

to_octet_string was added to ruby/openssl on Dec 14, 2017 and released in ruby/openssl 2.1.0.

It is only mentioned in jruby-openssl here.

created time in 19 days

issue openedjruby/jruby-openssl

"closing inbound before receiving peer's close_notify" errors

I've been getting intermittent javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify errors for a few months now, if memory serves I believe it was only after updating to JRuby 9.2.13.0 (I could be wrong about that though)

In any case, there's actually a good way to reliably reproduce it! I connect to my MySQL db through SSL with a config like the following:

production:
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_unicode_ci
  reconnect: false
  database: xxx
  pool: 10
  username: xxx
  password: xxx
  host: db-8-0.xxxxx.us-east-1.rds.amazonaws.com
  read_timeout: 120
  write_timeout: 120
  connect_timeout: 10
  connection_alive_timeout: 120
  properties:
    useSSL: true
    requireSSL: true
    verifyServerCertificate: true
    trustCertificateKeyStoreUrl: "file:/rds-ca/java-rds-ca"
    trustCertificateKeyStorePassword: changeit
    enabledTLSProtocols: "TLSv1.2"
    enabledSSLCipherSuites: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
    autoReconnect: false
    connectTimeout: 10000
    socketTimeout: 120000
    serverTimezone: "America/Los_Angeles"

and when I run RAILS_ENV=production bundle exec rake db:migrate, every single time I get error reports like the following (although the command does exit with status 0):

Thu Dec 31 06:57:14 PST 2020 WARN: Caught while disconnecting...

EXCEPTION STACK TRACE:



** BEGIN NESTED EXCEPTION ** 

javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify

STACKTRACE:

javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:133)
        at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:337)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:293)
        at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:284)
        at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:742)
        at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:721)
        at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:2249)
        at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4232)
        at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1472)
        at arjdbc.jdbc.RubyJdbcConnection.close(RubyJdbcConnection.java:3700)
        at arjdbc.jdbc.RubyJdbcConnection.setConnection(RubyJdbcConnection.java:2890)
        at arjdbc.jdbc.RubyJdbcConnection.disconnect(RubyJdbcConnection.java:661)
        at arjdbc.jdbc.RubyJdbcConnection$INVOKER$i$0$0$disconnect.call(RubyJdbcConnection$INVOKER$i$0$0$disconnect.gen)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:121)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:108)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:192)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.doYield(IRBlockBody.java:166)
        at org.jruby.runtime.BlockBody.yield(BlockBody.java:108)
        at org.jruby.runtime.Block.yield(Block.java:184)
        at org.jruby.RubyArray.each(RubyArray.java:1809)
        at org.jruby.RubyArray$INVOKER$i$0$0$each.call(RubyArray$INVOKER$i$0$0$each.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroBlock.call(JavaMethod.java:555)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.targets.YieldSite.yieldSpecific(YieldSite.java:156)
        at home.web.$_dot_rvm.rubies.jruby_minus_9_dot_2_dot_14_dot_0.lib.ruby.stdlib.monitor.RUBY$method$mon_synchronize$0(/home/web/.rvm/rubies/jruby-9.2.14.0/lib/ruby/stdlib/monitor.rb:235)
        at home.web.$_dot_rvm.rubies.jruby_minus_9_dot_2_dot_14_dot_0.lib.ruby.stdlib.monitor.RUBY$method$mon_synchronize$0$__VARARGS__(/home/web/.rvm/rubies/jruby-9.2.14.0/lib/ruby/stdlib/monitor.rb)
        at org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:70)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:137)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:386)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:184)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:191)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:337)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:121)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:108)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:192)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:60)
        at org.jruby.runtime.Block.call(Block.java:143)
        at org.jruby.RubyProc.call(RubyProc.java:299)
        at org.jruby.RubyProc$INVOKER$i$call.call(RubyProc$INVOKER$i$call.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrOneOrTwoOrNBlock.call(JavaMethod.java:371)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:203)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:325)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.doYield(IRBlockBody.java:166)
        at org.jruby.runtime.BlockBody.yield(BlockBody.java:108)
        at org.jruby.runtime.Block.yield(Block.java:184)
        at org.jruby.RubyArray.each(RubyArray.java:1809)
        at org.jruby.RubyArray$INVOKER$i$0$0$each.call(RubyArray$INVOKER$i$0$0$each.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroBlock.call(JavaMethod.java:555)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:84)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:172)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.internal.runtime.methods.AliasMethod.call(AliasMethod.java:137)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:92)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:191)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:178)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:208)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:396)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:205)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:325)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:549)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:156)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:143)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.doYield(IRBlockBody.java:166)
        at org.jruby.runtime.BlockBody.yield(BlockBody.java:108)
        at org.jruby.runtime.Block.yield(Block.java:184)
        at org.jruby.RubyArray.each(RubyArray.java:1809)
        at org.jruby.RubyArray$INVOKER$i$0$0$each.call(RubyArray$INVOKER$i$0$0$each.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroBlock.call(JavaMethod.java:555)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:121)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:108)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:192)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:121)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:108)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:192)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_ROOT(Interpreter.java:96)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:81)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:30)
        at org.jruby.ir.IRTranslator.execute(IRTranslator.java:42)
        at org.jruby.Ruby.runInterpreter(Ruby.java:1218)
        at org.jruby.Ruby.loadFile(Ruby.java:2785)
        at org.jruby.runtime.load.LibrarySearcher$ResourceLibrary.load(LibrarySearcher.java:234)
        at org.jruby.runtime.load.LibrarySearcher$FoundLibrary.load(LibrarySearcher.java:34)
        at org.jruby.runtime.load.LoadService.load(LoadService.java:343)
        at org.jruby.RubyKernel.loadCommon(RubyKernel.java:1039)
        at org.jruby.RubyKernel.load(RubyKernel.java:1009)
        at org.jruby.RubyKernel$INVOKER$s$load.call(RubyKernel$INVOKER$s$load.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:417)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_ROOT(Interpreter.java:96)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:81)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:30)
        at org.jruby.ir.IRTranslator.execute(IRTranslator.java:42)
        at org.jruby.Ruby.runInterpreter(Ruby.java:1218)
        at org.jruby.Ruby.loadFile(Ruby.java:2785)
        at org.jruby.runtime.load.LibrarySearcher$ResourceLibrary.load(LibrarySearcher.java:234)
        at org.jruby.runtime.load.LibrarySearcher$FoundLibrary.load(LibrarySearcher.java:34)
        at org.jruby.runtime.load.LoadService.load(LoadService.java:343)
        at org.jruby.RubyKernel.loadCommon(RubyKernel.java:1039)
        at org.jruby.RubyKernel.load(RubyKernel.java:1009)
        at org.jruby.RubyKernel$INVOKER$s$load.call(RubyKernel$INVOKER$s$load.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:417)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:316)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:549)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:80)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:121)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:108)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:192)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:354)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:143)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:345)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.RubyClass.finvokeWithRefinements(RubyClass.java:514)
        at org.jruby.RubyBasicObject.send(RubyBasicObject.java:1755)
        at org.jruby.RubyBasicObject$INVOKER$i$send.call(RubyBasicObject$INVOKER$i$send.gen)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:549)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:549)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:92)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:191)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:178)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:208)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:396)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:205)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:325)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.ir.runtime.IRRuntimeHelpers.unresolvedSuper(IRRuntimeHelpers.java:1206)
        at org.jruby.ir.instructions.ClassSuperInstr.interpret(ClassSuperInstr.java:86)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:549)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.ir.runtime.IRRuntimeHelpers.unresolvedSuper(IRRuntimeHelpers.java:1206)
        at org.jruby.ir.instructions.ClassSuperInstr.interpret(ClassSuperInstr.java:86)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.InterpreterEngine.interpret(InterpreterEngine.java:92)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:191)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:178)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:208)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:396)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:205)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:325)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:137)
        at org.jruby.runtime.IRBlockBody.yieldSpecific(IRBlockBody.java:70)
        at org.jruby.runtime.Block.yieldSpecific(Block.java:153)
        at org.jruby.ir.runtime.IRRuntimeHelpers.yieldSpecific(IRRuntimeHelpers.java:503)
        at org.jruby.ir.instructions.YieldInstr.interpret(YieldInstr.java:76)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.processOtherOp(StartupInterpreterEngine.java:178)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:104)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:86)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:73)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:332)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:86)
        at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:93)
        at org.jruby.ir.instructions.CallBase.interpret(CallBase.java:546)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_ROOT(Interpreter.java:96)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:81)
        at org.jruby.ir.interpreter.Interpreter.execute(Interpreter.java:30)
        at org.jruby.ir.IRTranslator.execute(IRTranslator.java:42)
        at org.jruby.Ruby.runInterpreter(Ruby.java:1218)
        at org.jruby.Ruby.loadFile(Ruby.java:2785)
        at org.jruby.runtime.load.LibrarySearcher$ResourceLibrary.load(LibrarySearcher.java:234)
        at org.jruby.runtime.load.LibrarySearcher$FoundLibrary.load(LibrarySearcher.java:34)
        at org.jruby.runtime.load.LoadService.load(LoadService.java:343)
        at org.jruby.RubyKernel.loadCommon(RubyKernel.java:1039)
        at org.jruby.RubyKernel.load(RubyKernel.java:1009)
        at org.jruby.RubyKernel$INVOKER$s$load.call(RubyKernel$INVOKER$s$load.gen)
        at org.jruby.internal.runtime.methods.JavaMethod$JavaMethodOneOrNBlock.call(JavaMethod.java:417)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        at home.web.$_dot_rvm.rubies.jruby_minus_9_dot_2_dot_14_dot_0.bin.bundle.invokeOther8:load(/home/web/.rvm/rubies/jruby-9.2.14.0/bin/bundle:23)
        at home.web.$_dot_rvm.rubies.jruby_minus_9_dot_2_dot_14_dot_0.bin.bundle.RUBY$script(/home/web/.rvm/rubies/jruby-9.2.14.0/bin/bundle:23)
        at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:710)
        at org.jruby.ir.Compiler$1.load(Compiler.java:89)
        at org.jruby.Ruby.runScript(Ruby.java:1205)
        at org.jruby.Ruby.runNormally(Ruby.java:1128)
        at org.jruby.Ruby.runNormally(Ruby.java:1146)
        at org.jruby.Ruby.runFromMain(Ruby.java:958)
        at org.jruby.Main.doRunFromMain(Main.java:400)
        at org.jruby.Main.internalRun(Main.java:292)
        at org.jruby.Main.run(Main.java:234)
        at org.jruby.Main.main(Main.java:206)


** END NESTED EXCEPTION **

Just to be clear, I am also seeing them a bunch in a background process that makes tons of SSL connections, although they aren't frequent enough to be a huge concern or anything

created time in 25 days

issue openedjruby/jruby-openssl

Regression: Setting SSL_CERT_FILE removes default store

jruby-openssl (default: 0.10.4 java)

This regression happened recently (last month).

I set SSL_CERT_FILE in the test suite of the http library I maintain. Recently, gem install stopped working: https://gitlab.com/honeyryderchuck/httpx/-/jobs/906764346#L421 .

If I remove the env var, I am able to install gems.

created time in a month

issue commentjruby/jruby-openssl

NullPointerException in PKeyEC.java when calling Net::SSH.start

I assume the newer net-ssh is just doing additional calls that are not properly supported. This is still an issue, but not sure when we can get someone to work on it...

marshalium

comment created time in 2 months

push eventjruby/jruby-openssl

Mariusz Ćwikła

commit sha 6b4f7564f4e4f5eb04a478d3606d279649f5288e

Fix SSLContext#ciphers=

view details

Charles Oliver Nutter

commit sha 2047f4df6dcc2118c33a064da5c67645da455986

Merge branch 'master' into issue_221_SSLContext_set_ciphers

view details

Charles Oliver Nutter

commit sha 4f3894d088f330f50f28fad60c0ba244691b5fbc

Merge pull request #222 from MariuszCwikla/issue_221_SSLContext_set_ciphers Fix SSLContext#ciphers=

view details

push time in 2 months

PR merged jruby/jruby-openssl

Fix SSLContext#ciphers=

Fixes #221 and jruby/jruby#3100

However, this functionality is not fully compatible with ruby openssl. I did some investigation and apparently jruby-openssl was implemented based on openssl 0.9.x. Ruby 2.7 is using openssl 1.1.1. There was a refactoring in openssl between 0.9.x and 1.1.1, e.g. following does work with ruby, but not with jruby:

c.ciphers='AES128'

but this works with both:

c.ciphers='AES'
+45 -2

3 comments

3 changed files

MariuszCwikla

pr closed time in 2 months

issue closedjruby/jruby-openssl

SSLContext#ciphers= does not appear to work for any usage

https://ruby-doc.org/stdlib-2.7.0/libdoc/openssl/rdoc/OpenSSL/SSL/SSLContext.html documents 3 usages of cipher=:

  • ciphers = "cipher1:cipher2:..."
  • ciphers = [name, ...]
  • ciphers = [[name, version, bits, alg_bits], ...]

None of these appear to work in JRuby:

irb(main):021:0> c=OpenSSL::SSL::SSLContext.new
=> #<OpenSSL::SSL::SSLContext:0x697a34af>
irb(main):022:0> c.ciphers
=> [["ECDHE-ECDSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-RSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-ECDSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-RSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-RSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-DSS-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-ECDSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-RSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-ECDSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-RSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-RSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-DSS-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-ECDSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDHE-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDH-ECDSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDH-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["DHE-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["DHE-DSS-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDHE-ECDSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDHE-RSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDH-ECDSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDH-RSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["DHE-RSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["DHE-DSS-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDHE-ECDSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDHE-RSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["AES256-SHA256", "TLSv1/SSLv3", 256, 256], ["ECDH-ECDSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDH-RSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["DHE-RSA-AES256-SHA256", "TLSv1/SSLv3", 256, 256], ["DHE-DSS-AES256-SHA256", "TLSv1/SSLv3", 256, 256], ["ECDHE-ECDSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["ECDHE-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["AES256-SHA", "TLSv1/SSLv3", 256, 256], ["ECDH-ECDSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["ECDH-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["DHE-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["DHE-DSS-AES256-SHA", "TLSv1/SSLv3", 256, 256]]

irb(main):023:0> c.ciphers.first
=> ["ECDHE-ECDSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256]

irb(main):024:0> c.ciphers = 'ECDHE-ECDSA-AES128-GCM-SHA256'
Traceback (most recent call last):
        7: from /home/w/.rbenv/versions/jruby-9.2.13/bin/irb:13:in `<main>'
        6: from org/jruby/RubyKernel.java:1189:in `catch'
        5: from org/jruby/RubyKernel.java:1189:in `catch'
        4: from org/jruby/RubyKernel.java:1442:in `loop'
        3: from org/jruby/RubyKernel.java:1048:in `eval'
        2: from (irb):24:in `evaluate'
        1: from org/jruby/ext/openssl/SSLContext.java:507:in `ciphers='
OpenSSL::SSL::SSLError (no cipher match)

irb(main):025:0> c.ciphers = ['ECDHE-ECDSA-AES128-GCM-SHA256']
Traceback (most recent call last):
        7: from /home/w/.rbenv/versions/jruby-9.2.13/bin/irb:13:in `<main>'
        6: from org/jruby/RubyKernel.java:1189:in `catch'
        5: from org/jruby/RubyKernel.java:1189:in `catch'
        4: from org/jruby/RubyKernel.java:1442:in `loop'
        3: from org/jruby/RubyKernel.java:1048:in `eval'
        2: from (irb):25:in `evaluate'
        1: from org/jruby/ext/openssl/SSLContext.java:507:in `ciphers='
OpenSSL::SSL::SSLError (no cipher match)

irb(main):026:0> c.ciphers = ["ECDHE-ECDSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256]
Traceback (most recent call last):
        7: from /home/w/.rbenv/versions/jruby-9.2.13/bin/irb:13:in `<main>'
        6: from org/jruby/RubyKernel.java:1189:in `catch'
        5: from org/jruby/RubyKernel.java:1189:in `catch'
        4: from org/jruby/RubyKernel.java:1442:in `loop'
        3: from org/jruby/RubyKernel.java:1048:in `eval'
        2: from (irb):26:in `evaluate'
        1: from org/jruby/ext/openssl/SSLContext.java:507:in `ciphers='
OpenSSL::SSL::SSLError (no cipher match)

closed time in 2 months

p-mongo

pull request commentjruby/jruby-openssl

Fix SSLContext#ciphers=

This is a good step forward! I will merge this but we need to do more verification and get a release out.

MariuszCwikla

comment created time in 2 months

push eventjruby/jruby-openssl

Mariusz Ćwikła

commit sha dae253973db482b94ca3a74155788382d0c01c6c

Fix Java::JavaLang::StringIndexOutOfBoundsException on ctx.cipher=[]

view details

Charles Oliver Nutter

commit sha 4b1ad4a5e35f38d0561bd89d1ee90433be329b87

Merge pull request #223 from MariuszCwikla/issue_220 Fix Java::JavaLang::StringIndexOutOfBoundsException on ctx.cipher=[]

view details

push time in 2 months

issue closedjruby/jruby-openssl

SSLContext#ciphers= exposes internal exceptions

If I try to assign ciphers to an empty array or an array containing nil, I get a Java::JavaLang::StringIndexOutOfBoundsException.

I expected either an OpenSSL error or a Ruby standard library error in this case.

irb(main):017:0> c=OpenSSL::SSL::SSLContext.new
=> #<OpenSSL::SSL::SSLContext:0x20d87335>
irb(main):018:0> c.ciphers=[]
Traceback (most recent call last):
       16: from org.jruby.RubyKernel.eval(RubyKernel.java:1048)
       15: from org.jruby.RubyKernel.evalCommon(RubyKernel.java:1086)
       14: from org.jruby.ir.interpreter.Interpreter.evalWithBinding(Interpreter.java:182)
       13: from org.jruby.ir.interpreter.Interpreter.evalCommon(Interpreter.java:158)
       12: from org.jruby.ir.interpreter.Interpreter.INTERPRET_EVAL(Interpreter.java:106)
       11: from org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
       10: from org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        9: from org.jruby.ir.instructions.specialized.OneArgOperandAttrAssignInstr.interpret(OneArgOperandAttrAssignInstr.java:37)
        8: from org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        7: from org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        6: from org.jruby.ext.openssl.SSLContext$INVOKER$i$1$0$set_ciphers.call(SSLContext$INVOKER$i$1$0$set_ciphers.gen)
        5: from org.jruby.ext.openssl.SSLContext.set_ciphers(SSLContext.java:506)
        4: from org.jruby.ext.openssl.SSLContext.matchedCiphers(SSLContext.java:469)
        3: from org.jruby.ext.openssl.CipherStrings.matchingCiphers(CipherStrings.java:515)
        2: from java.base/java.lang.String.charAt(String.java:693)
        1: from java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47)
Java::JavaLang::StringIndexOutOfBoundsException (String index out of range: 0)
irb(main):019:0> c.ciphers=[nil]
Traceback (most recent call last):
       16: from org.jruby.RubyKernel.eval(RubyKernel.java:1048)
       15: from org.jruby.RubyKernel.evalCommon(RubyKernel.java:1086)
       14: from org.jruby.ir.interpreter.Interpreter.evalWithBinding(Interpreter.java:182)
       13: from org.jruby.ir.interpreter.Interpreter.evalCommon(Interpreter.java:158)
       12: from org.jruby.ir.interpreter.Interpreter.INTERPRET_EVAL(Interpreter.java:106)
       11: from org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
       10: from org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        9: from org.jruby.ir.instructions.specialized.OneArgOperandAttrAssignInstr.interpret(OneArgOperandAttrAssignInstr.java:37)
        8: from org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        7: from org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        6: from org.jruby.ext.openssl.SSLContext$INVOKER$i$1$0$set_ciphers.call(SSLContext$INVOKER$i$1$0$set_ciphers.gen)
        5: from org.jruby.ext.openssl.SSLContext.set_ciphers(SSLContext.java:506)
        4: from org.jruby.ext.openssl.SSLContext.matchedCiphers(SSLContext.java:469)
        3: from org.jruby.ext.openssl.CipherStrings.matchingCiphers(CipherStrings.java:515)
        2: from java.base/java.lang.String.charAt(String.java:693)
        1: from java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47)
Java::JavaLang::StringIndexOutOfBoundsException (String index out of range: 0)

jruby 9.2.13.0 (2.5.7) 2020-08-03 9a89c94bcc OpenJDK 64-Bit Server VM 11.0.9+11-post-Debian-1 on 11.0.9+11-post-Debian-1 +jit [linux-x86_64]

closed time in 2 months

p-mongo

pull request commentjruby/jruby-openssl

Fix SSLContext#ciphers=

This looks a-ok to me but I didn't verify exact behavior against MRI.

MariuszCwikla

comment created time in 2 months

issue commentjruby/jruby-openssl

SSLContext#ciphers= exposes internal exceptions

MRI behavior:

serene% irb -ropenssl
irb(main):001:0> c=OpenSSL::SSL::SSLContext.new
=> #<OpenSSL::SSL::SSLContext:0x0000558711862638>
irb(main):002:0> c.ciphers=[]
Traceback (most recent call last):
        5: from /home/w/.rbenv/versions/2.7/bin/irb:23:in `<main>'
        4: from /home/w/.rbenv/versions/2.7/bin/irb:23:in `load'
        3: from /home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/irb-1.2.6/exe/irb:11:in `<top (required)>'
        2: from (irb):2
        1: from (irb):2:in `ciphers='
OpenSSL::SSL::SSLError (SSL_CTX_set_cipher_list: no cipher match)
p-mongo

comment created time in 2 months

pull request commentjruby/jruby-openssl

Fix SSLContext#ciphers=

Thank you for fixing this.

MariuszCwikla

comment created time in 2 months

PR opened jruby/jruby-openssl

Fix SSLContext#ciphers=

Fixes #221 and jruby/jruby#3100

However, this functionality is not fully compatible with ruby openssl. I did some investigation and apparently jruby-openssl was implemented based on openssl 0.9.x. Ruby 2.7 is using openssl 1.1.1. There was a refactoring in openssl between 0.9.x and 1.1.1, e.g. following does work with ruby, but not with jruby:

c.ciphers='AES128'

but this works with both:

c.ciphers='AES'
+45 -2

0 comment

3 changed files

pr created time in 2 months

issue commentjruby/jruby-openssl

SSLContext#ciphers= does not appear to work for any usage

jruby 9.2.13.0 (2.5.7) 2020-08-03 9a89c94bcc OpenJDK 64-Bit Server VM 11.0.9+11-post-Debian-1 on 11.0.9+11-post-Debian-1 +jit [linux-x86_64]

p-mongo

comment created time in 2 months

issue openedjruby/jruby-openssl

SSLContext#ciphers= does not appear to work for any usage

https://ruby-doc.org/stdlib-2.7.0/libdoc/openssl/rdoc/OpenSSL/SSL/SSLContext.html documents 3 usages of cipher=:

  • ciphers = "cipher1:cipher2:..."
  • ciphers = [name, ...]
  • ciphers = [[name, version, bits, alg_bits], ...]

None of these appear to work in JRuby:

irb(main):021:0> c=OpenSSL::SSL::SSLContext.new
=> #<OpenSSL::SSL::SSLContext:0x697a34af>
irb(main):022:0> c.ciphers
=> [["ECDHE-ECDSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-RSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-ECDSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-RSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-RSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-DSS-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-ECDSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-RSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-ECDSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-RSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-RSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-DSS-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-ECDSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDHE-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDH-ECDSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDH-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["DHE-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["DHE-DSS-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDHE-ECDSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDHE-RSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDH-ECDSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDH-RSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["DHE-RSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["DHE-DSS-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDHE-ECDSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDHE-RSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["AES256-SHA256", "TLSv1/SSLv3", 256, 256], ["ECDH-ECDSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDH-RSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["DHE-RSA-AES256-SHA256", "TLSv1/SSLv3", 256, 256], ["DHE-DSS-AES256-SHA256", "TLSv1/SSLv3", 256, 256], ["ECDHE-ECDSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["ECDHE-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["AES256-SHA", "TLSv1/SSLv3", 256, 256], ["ECDH-ECDSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["ECDH-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["DHE-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["DHE-DSS-AES256-SHA", "TLSv1/SSLv3", 256, 256]]

irb(main):023:0> c.ciphers.first
=> ["ECDHE-ECDSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256]

irb(main):024:0> c.ciphers = 'ECDHE-ECDSA-AES128-GCM-SHA256'
Traceback (most recent call last):
        7: from /home/w/.rbenv/versions/jruby-9.2.13/bin/irb:13:in `<main>'
        6: from org/jruby/RubyKernel.java:1189:in `catch'
        5: from org/jruby/RubyKernel.java:1189:in `catch'
        4: from org/jruby/RubyKernel.java:1442:in `loop'
        3: from org/jruby/RubyKernel.java:1048:in `eval'
        2: from (irb):24:in `evaluate'
        1: from org/jruby/ext/openssl/SSLContext.java:507:in `ciphers='
OpenSSL::SSL::SSLError (no cipher match)

irb(main):025:0> c.ciphers = ['ECDHE-ECDSA-AES128-GCM-SHA256']
Traceback (most recent call last):
        7: from /home/w/.rbenv/versions/jruby-9.2.13/bin/irb:13:in `<main>'
        6: from org/jruby/RubyKernel.java:1189:in `catch'
        5: from org/jruby/RubyKernel.java:1189:in `catch'
        4: from org/jruby/RubyKernel.java:1442:in `loop'
        3: from org/jruby/RubyKernel.java:1048:in `eval'
        2: from (irb):25:in `evaluate'
        1: from org/jruby/ext/openssl/SSLContext.java:507:in `ciphers='
OpenSSL::SSL::SSLError (no cipher match)

irb(main):026:0> c.ciphers = ["ECDHE-ECDSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256]
Traceback (most recent call last):
        7: from /home/w/.rbenv/versions/jruby-9.2.13/bin/irb:13:in `<main>'
        6: from org/jruby/RubyKernel.java:1189:in `catch'
        5: from org/jruby/RubyKernel.java:1189:in `catch'
        4: from org/jruby/RubyKernel.java:1442:in `loop'
        3: from org/jruby/RubyKernel.java:1048:in `eval'
        2: from (irb):26:in `evaluate'
        1: from org/jruby/ext/openssl/SSLContext.java:507:in `ciphers='
OpenSSL::SSL::SSLError (no cipher match)

created time in 2 months

issue openedjruby/jruby-openssl

SSLContext#ciphers= exposes internal exceptions

If I try to assign ciphers to an empty array or an array containing nil, I get a Java::JavaLang::StringIndexOutOfBoundsException.

I expected either an OpenSSL error or a Ruby standard library error in this case.

irb(main):017:0> c=OpenSSL::SSL::SSLContext.new
=> #<OpenSSL::SSL::SSLContext:0x20d87335>
irb(main):018:0> c.ciphers=[]
Traceback (most recent call last):
       16: from org.jruby.RubyKernel.eval(RubyKernel.java:1048)
       15: from org.jruby.RubyKernel.evalCommon(RubyKernel.java:1086)
       14: from org.jruby.ir.interpreter.Interpreter.evalWithBinding(Interpreter.java:182)
       13: from org.jruby.ir.interpreter.Interpreter.evalCommon(Interpreter.java:158)
       12: from org.jruby.ir.interpreter.Interpreter.INTERPRET_EVAL(Interpreter.java:106)
       11: from org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
       10: from org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        9: from org.jruby.ir.instructions.specialized.OneArgOperandAttrAssignInstr.interpret(OneArgOperandAttrAssignInstr.java:37)
        8: from org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        7: from org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        6: from org.jruby.ext.openssl.SSLContext$INVOKER$i$1$0$set_ciphers.call(SSLContext$INVOKER$i$1$0$set_ciphers.gen)
        5: from org.jruby.ext.openssl.SSLContext.set_ciphers(SSLContext.java:506)
        4: from org.jruby.ext.openssl.SSLContext.matchedCiphers(SSLContext.java:469)
        3: from org.jruby.ext.openssl.CipherStrings.matchingCiphers(CipherStrings.java:515)
        2: from java.base/java.lang.String.charAt(String.java:693)
        1: from java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47)
Java::JavaLang::StringIndexOutOfBoundsException (String index out of range: 0)
irb(main):019:0> c.ciphers=[nil]
Traceback (most recent call last):
       16: from org.jruby.RubyKernel.eval(RubyKernel.java:1048)
       15: from org.jruby.RubyKernel.evalCommon(RubyKernel.java:1086)
       14: from org.jruby.ir.interpreter.Interpreter.evalWithBinding(Interpreter.java:182)
       13: from org.jruby.ir.interpreter.Interpreter.evalCommon(Interpreter.java:158)
       12: from org.jruby.ir.interpreter.Interpreter.INTERPRET_EVAL(Interpreter.java:106)
       11: from org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:72)
       10: from org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:361)
        9: from org.jruby.ir.instructions.specialized.OneArgOperandAttrAssignInstr.interpret(OneArgOperandAttrAssignInstr.java:37)
        8: from org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:174)
        7: from org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:375)
        6: from org.jruby.ext.openssl.SSLContext$INVOKER$i$1$0$set_ciphers.call(SSLContext$INVOKER$i$1$0$set_ciphers.gen)
        5: from org.jruby.ext.openssl.SSLContext.set_ciphers(SSLContext.java:506)
        4: from org.jruby.ext.openssl.SSLContext.matchedCiphers(SSLContext.java:469)
        3: from org.jruby.ext.openssl.CipherStrings.matchingCiphers(CipherStrings.java:515)
        2: from java.base/java.lang.String.charAt(String.java:693)
        1: from java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47)
Java::JavaLang::StringIndexOutOfBoundsException (String index out of range: 0)

jruby 9.2.13.0 (2.5.7) 2020-08-03 9a89c94bcc OpenJDK 64-Bit Server VM 11.0.9+11-post-Debian-1 on 11.0.9+11-post-Debian-1 +jit [linux-x86_64]

created time in 2 months

issue openedjruby/jruby-openssl

SSLContext#ciphers= mutates the context when set fails

If I try to set the ciphers to a value which is rejected, the cipher list is still modified (set to the empty list):

irb(main):020:0> c=OpenSSL::SSL::SSLContext.new
=> #<OpenSSL::SSL::SSLContext:0x3c3820bb>
irb(main):021:0> c.ciphers
=> [["ECDHE-ECDSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-RSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-ECDSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-RSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-RSA-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-DSS-AES128-GCM-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-ECDSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-RSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-ECDSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDH-RSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-RSA-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["DHE-DSS-AES128-SHA256", "TLSv1/SSLv3", 128, 256], ["ECDHE-ECDSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDHE-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDH-ECDSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDH-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["DHE-RSA-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["DHE-DSS-AES128-SHA", "TLSv1/SSLv3", 128, 128], ["ECDHE-ECDSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDHE-RSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDH-ECDSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDH-RSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["DHE-RSA-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["DHE-DSS-AES256-GCM-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDHE-ECDSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDHE-RSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["AES256-SHA256", "TLSv1/SSLv3", 256, 256], ["ECDH-ECDSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["ECDH-RSA-AES256-SHA384", "TLSv1/SSLv3", 256, 384], ["DHE-RSA-AES256-SHA256", "TLSv1/SSLv3", 256, 256], ["DHE-DSS-AES256-SHA256", "TLSv1/SSLv3", 256, 256], ["ECDHE-ECDSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["ECDHE-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["AES256-SHA", "TLSv1/SSLv3", 256, 256], ["ECDH-ECDSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["ECDH-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["DHE-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256], ["DHE-DSS-AES256-SHA", "TLSv1/SSLv3", 256, 256]]
irb(main):022:0> c.ciphers=['AES256-SHA']
Traceback (most recent call last):
        7: from /home/w/.rbenv/versions/jruby-9.2.13/bin/irb:13:in `<main>'
        6: from org/jruby/RubyKernel.java:1189:in `catch'
        5: from org/jruby/RubyKernel.java:1189:in `catch'
        4: from org/jruby/RubyKernel.java:1442:in `loop'
        3: from org/jruby/RubyKernel.java:1048:in `eval'
        2: from (irb):22:in `evaluate'
        1: from org/jruby/ext/openssl/SSLContext.java:507:in `ciphers='
OpenSSL::SSL::SSLError (no cipher match)
irb(main):023:0> c.ciphers
=> []

I expect the context to only be modified if the assignment succeeded.

jruby 9.2.13.0 (2.5.7) 2020-08-03 9a89c94bcc OpenJDK 64-Bit Server VM 11.0.9+11-post-Debian-1 on 11.0.9+11-post-Debian-1 +jit [linux-x86_64]

created time in 2 months

pull request commentjruby/jruby-openssl

Fix integer overflow in hash_old

@headius thanks for hints but it seems that jruby-openssl is not consistent jruby repo. MRI tests even for openssl module are in jruby repo (but disabled). And there is no test/jruby under jruby-openssl, only test/ruby

MariuszCwikla

comment created time in 2 months

pull request commentjruby/jruby-openssl

Fix integer overflow in hash_old

@MariuszCwikla The PR looks fine but the test should either be added to spec/ruby or test/jruby. The tests under test/mri are copied from CRuby and we do not edit them in our repo.

Thanks for the PR!

MariuszCwikla

comment created time in 2 months

issue commentjruby/jruby-openssl

Tomcat 8/9 app deployment - NameError: cannot load (ext) (org.jruby.ext.openssl.OpenSSL)

@fun-ruby Thank you for that update! Perhaps this qualifies as a warbler bug?

@quesurifn Are you packaging an app using warbler, and able to try this config change?

fun-ruby

comment created time in 2 months

PR opened jruby/jruby-openssl

Fix integer overflow in hash_old

In #216 X509Name.hash was fixed and old implementation renamed to hash_old However I discovered that old method still wasn't working correclty due to integer overflow:

ruby -e "require 'openssl'; p OpenSSL::X509::Name.new([['CN', 'foo'], ['DC', 'bar']]).hash_old" 3294068023

jruby -e "require 'openssl'; p OpenSSL::X509::Name.new([['CN', 'foo'], ['DC', 'bar']]).hash_old" -1000899273

Ruby is using unsinged int for this calculation. In JRuby changing int to long solves the issue.

+5 -3

0 comment

3 changed files

pr created time in 2 months

issue commentjruby/jruby-openssl

Tomcat 8/9 app deployment - NameError: cannot load (ext) (org.jruby.ext.openssl.OpenSSL)

Just to clarify my original issue.

I was using JRuby 9.2.8.0 with a more newer version of jruby-openssl (0.10.2 or 0.10.3 as can be seen in my logs). So my Gemfile included a newer version of jruby-openssl.

This configuration breaks with

config/warble.rb
  ...
  config.move_jars_to_webinf_lib = true

Commenting out the above line or set its value to false fixed this issue, for me.

HTH

fun-ruby

comment created time in 2 months

more