SSL_connect gab zurück=1 errno=0 peeraddr=162.243.189.2:443 state=error: Zertifikatsüberprüfung fehlgeschlagen (Hostname-Übereinstimmung nicht gefunden)

OK, ich habe ein binding.pry am Anfang von ssl_socket_connect hinzugefügt und was ich sehe, wenn ich versuche, diese Einstellungen zu verwenden, ist:

→ DISCOURSE_USE_S3=true DISCOURSE_S3_REGION=ap-singapore-1 DISCOURSE_S3_ENDPOINT=https://axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com DISCOURSE_S3_ACCESS_KEY_ID=foo DISCOURSE_S3_SECRET_ACCESS_KEY=bar DISCOURSE_S3_BUCKET=bucketname bin/rails c
Loading development environment (Rails 7.0.7)
[1] pry(main)> s3 = S3Helper.build_from_config; s3.list

From: /home/michael/.rvm/gems/ruby-3.2.2@discourse/gems/net-protocol-0.2.2/lib/net/protocol.rb:42 Net::Protocol#ssl_socket_connect:

    40: def ssl_socket_connect(s, timeout)
    41:   binding.pry
 => 42:   if timeout
    43:     while true
    44:       raise Net::OpenTimeout if timeout <= 0
    45:       start = Process.clock_gettime Process::CLOCK_MONOTONIC
    46:       # to_io is required because SSLSocket doesn't have wait_readable yet
    47:       case s.connect_nonblock(exception: false)
    48:       when :wait_readable; s.to_io.wait_readable(timeout)
    49:       when :wait_writable; s.to_io.wait_writable(timeout)
    50:       else; break
    51:       end
    52:       timeout -= Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
    53:     end
    54:   else
    55:     s.connect
    56:   end
    57: end

[1] pry(#<Net::HTTP>)>> s.hostname
=> "bucketname.axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com"

Der tatsächliche Hostname, zu dem verbunden wird, ist also bucketname.axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com, was nicht mit *.compat.objectstorage.ap-singapore-1.oraclecloud.com übereinstimmt, sodass der Fehler korrekt ist.

Leider unterstützt OCI diesen Zugriffsstil nicht:

Verwenden Sie den pfadbasierten Zugriff in Ihrer Anwendung. Der Zugriff im virtuellen Host-Stil (Zugriff auf einen Bucket als {bucketnamespace}.compat.objectstorage.{region}.oraclecloud.com [sic]) wird nicht unterstützt.

Umgekehrt unterstützt Discourse nur den Zugriff im virtuellen Host-Stil ({bucketname}.{namespace}.compat.objectstorage.{region}.oraclecloud.com.).

Wir haben die Einstellung, die dies möglicherweise vor einiger Zeit zum Laufen gebracht hätte, entfernt, da sie nicht gut unterstützt wurde (siehe Commit-Nachricht).

Dies zum Laufen zu bringen, wird nicht einfach sein und erfordert komplexe Entwicklung und Tests, um diese Unterstützung hinzuzufügen.

Hier sind Drachen.

(xref: S3 Path Style Access)

4 „Gefällt mir“