Проблема
% docker run --rm --platform linux/amd64 jruby:9.1 ruby -rnet/http -e 'p Net::HTTP.get_print(URI.parse("https://geoip.maxmind.com/geoip/v2.1/city/"))'
OpenSSL::SSL::SSLError: certificate verify failed
connect_nonblock at org/jruby/ext/openssl/SSLSocket.java:228
connect at /opt/jruby/lib/ruby/stdlib/net/http.rb:938
do_start at /opt/jruby/lib/ruby/stdlib/net/http.rb:868
start at /opt/jruby/lib/ruby/stdlib/net/http.rb:857
start at /opt/jruby/lib/ruby/stdlib/net/http.rb:585
get_response at /opt/jruby/lib/ruby/stdlib/net/http.rb:480
get_print at /opt/jruby/lib/ruby/stdlib/net/http.rb:438
at -e:1
Другие выводы
geoip.maxmind.com использует сертификаты Let's Encrypt, и я пробовал различные способы добавления в хранилище ключей Java, но пока не нашел выигрышной комбинации.
9.2 подойдет
% docker run --rm --platform linux/amd64 jruby:9.2 ruby -rnet/http -e 'p Net::HTTP.get_print(URI.parse("https://geoip.maxmind.com/geoip/v2.1/city/"))'
{"code":"AUTHORIZATION_INVALID","error":"An account ID and license key are required to use this service."}nil
Что я пробовал:
- установка пакета ca-certificates в Dockerfile, чтобы попытаться обновить сертификаты , это не помогло.
- отключение проверки SSL работает, но не идеально по типичным соображениям безопасности.
- Проверка команд openssl казалась нормальной, поэтому это Я думаю, это проблема между Java и JRuby?
subject=CN=maxmind.com
issuer=C=US, O=Let's Encrypt, CN=E1
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: ECDSA
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 4447 bytes and written 405 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 256 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
Подробнее здесь: https://stackoverflow.com/questions/784 ... be-patched