🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Q&A

解決済

1回答

1440閲覧

Ruby ocraでexe化したプログラムにおけるSSL通信のエラーについて

qiyuren

総合スコア29

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2021/02/18 14:44

編集2021/02/18 16:51

前提・実現したいこと

TkのGUIで操作するスクレイピングソフトをocraでexe化して配布したいと考えております。

ツールにはログイン認証機能を設けており、herokuにデプロイしたsinatraで動くAPIで認証するような仕組みです。

ocraでのexe化は成功しましたが、以下のように、GETリクエストを送ると、OpenSSL::SSL::SSLErrorエラーが発生しました。
いろいろ調べてみると、証明書関連の話なのかと思い、ocra実行時にcert.pemを同梱し、common.rbでパスを書き加えましたが、このエラーが出てしまいました。
cert.pemのパスは間違っていないようなので、原因が何かわからず、困っております。

原因と解決策をご教授いただけますと、幸いでございます。
何卒宜しくお願いいたします。

発生している問題・エラーメッセージ

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate in certificate chain) ---< backtrace of Ruby side >----- C:/Users/xxxx/AppData/Local/Temp/ocr591B.tmp/lib/ruby/2.6.0/net/protocol.rb:44:in `connect_nonblock' C:/Users/xxxx/AppData/Local/Temp/ocr591B.tmp/lib/ruby/2.6.0/net/protocol.rb:44:in `ssl_socket_connect' C:/Users/xxxx/AppData/Local/Temp/ocr591B.tmp/lib/ruby/2.6.0/net/http.rb:996:in `connect' C:/Users/xxxx/AppData/Local/Temp/ocr591B.tmp/lib/ruby/2.6.0/net/http.rb:930:in `do_start' C:/Users/xxxx/AppData/Local/Temp/ocr591B.tmp/lib/ruby/2.6.0/net/http.rb:919:in `start' C:/Users/xxxx/AppData/Local/Temp/ocr591B.tmp/lib/ruby/2.6.0/net/http.rb:605:in `start' C:/Users/xxxx/AppData/Local/Temp/ocr591B.tmp/src/tk.rb:11:in `get' C:/Users/xxxx/AppData/Local/Temp/ocr591B.tmp/src/tk.rb:134:in `login' C:/Users/xxxx/AppData/Local/Temp/ocr591B.tmp/src/tk.rb:128:in `block in top_page' ~~略~~

該当のソースコード

ruby

1# common.rb 2require 'selenium-webdriver' 3require 'active_support/all' 4require 'net/http' 5require 'nokogiri' 6require 'open-uri' 7require 'fileutils' 8require 'json' 9require 'csv' 10require 'pry' 11require 'uri' 12require 'tk' 13 14ENV["SSL_CERT_FILE"] = File.expand_path("../ssl/cert.pem", __FILE__) 15 16#tk.rb 17 18require_relative "common" 19 20def get(route, params) 21 uri = URI.parse("https://<host>.herokuapp.com/#{route}#{params}") 22 request = Net::HTTP::Get.new(uri) 23 req_options = { 24 use_ssl: uri.scheme == "https", 25 } 26 response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http| 27 http.request(request) 28 end 29 response 30end 31 32def login(id, password) #idとpasswordはtkで入力し渡されます 33 response = get("login", "?id=#{id}&password=#{password}") 34 ~~~~ 35end 36

ocraを実行したときのコード

ocra tk.rb C:/Ruby26-x64/msys64/usr/bin/msys-2.0.dll C:/Ruby26-x64/msys64/mingw64/lib/tcl8.6 C:/Ruby26-x64/msys64/mingw64/lib/tk8.6 C:/Ruby26-x64/ssl/cert.pem --no-autoload --add-all-core --windows

補足情報(FW/ツールのバージョンなど)

windows 7 64bit
ruby 2.6.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kojix2

2021/02/23 06:08

すみません。この方面に詳しくないですが、non-ocraでは正常に実行できるが、ocraでexeにするとダメ、という話でいいんですよね。ファイアウォールやセキュリティソフト等によってブロックされていないかどうかはちょっと気になります。OcraはRuby処理系全体を圧縮するので、解凍されたRuby処理系がWindowsのセキュリティソフトによってブロックされている可能性がちらっと頭に浮かびました。
kojix2

2021/02/23 08:46

その次に考えるのはmsys2のmingw-w64-x86_64-opensslとか何かそれに類するsslのパッケージの指定が足りないということでしょうね。 C:/Ruby26-x64/msys64/usr/bin/libssl-1_1-x64.dll みたいな指定を足したりとか。
qiyuren

2021/02/24 03:45

ありがとうございます。ocra実行時にC:/Ruby26-x64/msys64/usr/bin/libssl-1_1-x64.dllを同梱したら、解決しました。大変助かりました。
guest

回答1

0

自己解決

以下でocra実行し、
ocra tk.rb C:/Ruby26-x64/msys64/usr/bin/msys-2.0.dll C:/Ruby26-x64/msys64/mingw64/lib/tcl8.6 C:/Ruby26-x64/msys64/mingw64/lib/tk8.6 C:/Ruby26-x64/ssl/cert.pem C:/Ruby26-x64/msys64/usr/bin/libssl-1_1-x64.dll --no-autoload --add-all-core --windows

request_optionにverify_mode: OpenSSL::SSL::VERIFY_PEERca_file: File.expand_path("../ssl/cert.pem", __FILE__)を加えたら動きました

投稿2021/02/24 05:39

qiyuren

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問