SSL_connect retourné=1 errno=0 peeraddr=162.243.189.2:443 état=erreur : vérification du certificat échouée (Incompatibilité de nom d'hôte)

OK, j’ai ajouté un binding.pry au début de ssl_socket_connect et voici ce que je vois en essayant d’utiliser ces paramètres :

→ 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"

donc le nom d’hôte réel auquel on se connecte est bucketname.axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com, ce qui ne correspond pas à *.compat.objectstorage.ap-singapore-1.oraclecloud.com, donc l’erreur est correcte.

Malheureusement, OCI ne prend pas en charge ce style d’accès :

Utilisez l’accès basé sur les chemins dans votre application. L’accès de style hôte virtuel (accès à un compartiment en tant que {bucketnamespace}.compat.objectstorage.{region}.oraclecloud.com [sic]) n’est pas pris en charge.

Inversement, Discourse ne prend en charge que l’accès de style hôte virtuel ({bucketname}.{namespace}.compat.objectstorage.{region}.oraclecloud.com.).

Nous avons supprimé le paramètre qui aurait pu le faire fonctionner il y a quelque temps, car il n’était pas bien pris en charge (voir le message du commit).

Faire fonctionner cela ne sera pas simple et nécessitera un développement et des tests complexes pour ajouter cette prise en charge.

Ici résident les dragons.

(xref: S3 Path Style Access)

4 « J'aime »