SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)

OK, ssl_socket_connect의 시작 부분에 binding.pry를 추가했는데, 이 설정을 사용하려고 할 때 다음을 확인했습니다:

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

따라서 실제로 연결되는 호스트명은 bucketname.axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com이며, 이는 *.compat.objectstorage.ap-singapore-1.oraclecloud.com과 일치하지 않으므로 오류는 정확한 것입니다.

불행히도 OCI는 이러한 스타일의 접근을 지원하지 않습니다:

애플리케이션에서 경로 기반(path-based) 접근을 사용하십시오. 버추얼 호스트 스타일 접근(버킷을 {bucketnamespace}.compat.objectstorage.{region}.oraclecloud.com으로 접근하는 방식 [원문 그대로])은 지원되지 않습니다.

반대로 Discourse는 버추얼 호스트 스타일 접근({bucketname}.{namespace}.compat.objectstorage.{region}.oraclecloud.com.)만 지원합니다.

우리는 얼마 전 이 접근 방식을 작동하게 만들 수 있었을 설정을 제거했는데, 이는 잘 지원되지 않았기 때문이었습니다(커밋 메시지를 참고하십시오).

이를 작동시키는 것은 간단하지 않을 것이며, 이 지원을 추가하려면 복잡한 개발과 테스트가 필요합니다.

여기에는 용(드래곤)이 있습니다.(복잡하고 위험한 부분이 있다는 뜻)

(xref: S3 Path Style Access)