2022/07,江端さんの技術メモ

ローカルネットワークにおける「オレオレ証明書」の作り方

"http: TLS handshake error from 192.168.0.22:59914: remote error: tls: unknown certificate"のエラーを、ようやく消せました

2023年1月9日追記
他のマシンで作った鍵は、動きません。"http: TLS handshake error from 127.0.0.1:51901: remote error: tls: unknown certificate"が出てきます→ 証明書の中にPCのホスト名称が記載されているようです。ですので、面倒ですが、別のマシンで動かす鍵は、別のマシンで再度作り直す必要があるようです。

2023年1月10日追記
クライアントとサーバを同じWindowBOXで実施している場合でも、"http: TLS handshake error"がでてきますので、下記の「5.4. Windowsの場合」を参考にして、「証明書のインストール」を実施して下さい。 

1. 目的

ローカルな実験環境で、Go言語で作ったサーバを動かし、Websocket用の鍵を作成し、TLS通信(https://)を実現します

2. 狙い

最近、ブラウザの"https"縛りがきつくて、ローカルのindex.htmlを叩くだけでは、画面が出てこなくなりました。特にスマホで顕著です。セキュリティ的には良いことなのかもしれませんが、研究用の開発をする人間(私)にとっては、『正直、面倒くさいなぁ』と思っています。

あくまでインターナルな環境での動作テストで使えれば足り、インターネットに出るつもりはありません。つまりIPアドレス、直接指定で実験できれば足りるのです(e.g. https://192.168.0.8:8080)

ところが問題があります。当然、インターネットに出ないことが必要なのです(というかインターネットに出たらアウト(始末書もの))。

  • 当然、公式の認証鍵はインターネットでの使用を前提としている上に、高価です。
  • Let's encrypt (https://letsencrypt.org/ja/) は、IPアドレスは使えないようです(ドメイン名のみ)。またクローズなローカルネットでは使えません。
  • ZeroSSL (https://zenn.dev/mattn/articles/b2c4c92c9116b1) は、インターネット上でオープンされているIPアドレスには使えますが、やはりクローズなローカルネットでは使えません。

という訳で、今回は、mkcert (https://qiita.com/k_kind/items/b87777efa3d29dcc4467) を使うことにしました。

このメモでは、mkcertを使って、インターネットに繋っていないローカルネットワークで、TLS通信を実現することを目的とするものです。

3. mkcertの入手方法と鍵の作りかた

https://github.com/FiloSottile/mkcert を覗いて、バイナリがダウンロードできそうことが分かりました。

もって、ここから、Windows10で使えそうなバイナリをダウンロードして下さい。

ダウンロードしたところから、直接叩いてみたら、最初に、

# mkcert -install

しろ、と言われます。

本当はmkcertにリネームした方が良いのでしょうが、面倒なので、そのまま

# mkcert-v1.4.1-windows-amd64.exe -install

を強行しました。

その後、"localhost","127.0.0.1","192.168.0.8"の3つのアドレスを追加することにしましたので、

# mkcert-v1.4.1-windows-amd64.exe localhost 127.0.0.1 192.168.0.8

としました。

この結果は以下の通りです。

>mkcert-v1.4.1-windows-amd64.exe localhost 127.0.0.1 192.168.0.8
Using the local CA at "C:\Users\ebata\AppData\Local\mkcert" 
Created a new certificate valid for the following names 
 - "localhost"
 - "127.0.0.1"
 - "192.168.0.8"

The certificate is at "./localhost+2.pem" and the key at "./localhost+2-key.pem" 

と入力すると、鍵が、カレントディレクトリにできるようです。

で、

  • "localhost+1-key.pem"を "key.pem"とリネームして、
  • "localhost+1.pem"を"cert.pem"とリネームして、

鍵を使うプログラム(main.go, server24.go)のあるディレクトリの全部に放り込んで下さい。

4. 鍵の使い方

4.1. Goプログラム(server24.go, main.go)の修正

4.1.1. http.ListenAndServeTLS()への置き換え

さらに、main.go, server24.goのhttp.ListenAndServe()を、以下のようなhttp.ListenAndServeTLS()に置き換えて下さい

    var addr = flag.String("addr", ":8080", "http service address")

    /*
        log.Fatal(http.ListenAndServe(*addr, nil)) // localhost:8080で起動をセット
    */

    var httpErr error
    if _, err := os.Stat("./cert.pem"); err == nil {
        fmt.Println("file ", "cert.crt found switching to https")
        if httpErr = http.ListenAndServeTLS(*addr, "./cert.pem", "./key.pem", nil); httpErr != nil {
            log.Fatal("The process exited with https error: ", httpErr.Error())
        }
    } else {
        httpErr = http.ListenAndServe(*addr, nil)
        if httpErr != nil {
            log.Fatal("The process exited with http error: ", httpErr.Error())
        }
    }

4.1.2. アドレスの修正

  • "localhost"の記載を、外向きのipアドレス(192.168.0.8)に書き換えて下さい。

4.2. index.htmlの修正

  • "localhost"の記載を、外向きのipアドレス(192.168.0.8)に書き換えて下さい。

5. スマホ側への鍵の設定方法

スマホ側は、当然に、"192.168.0.8"などというあやしげなサーバを信じる訳がないので、それを信じさせる処理を行う必要があります。

これをスマホに信じさせるには、ルート証明書の作成が必要となりますが、これはすでに出来ています。

5.1. ルート証明書の場所

# mkcert-v1.4.1-windows-amd64.exe -CAROOT

で、rootCA-key.pem rootCA.pem の場所が分かります。

("key.pem"、"cert.pem"は、使わないので注意して下さい(それに気がつかずにエラい目に遭いました))

C:\Users\ebata\Downloads>mkcert-v1.4.1-windows-amd64.exe -CAROOT
C:\Users\ebata\AppData\Local\mkcert

C:\Users\ebata\Downloads>cd C:\Users\ebata\AppData\Local\mkcert

C:\Users\ebata\AppData\Local\mkcert>ls
rootCA-key.pem  rootCA.pem

5.2. iPad/iPhoneの場合

  1. スマホにrootCA.pemをメールで送り込みます。ただし、iPad/iPhoneの場合、gmailメーラからではrootCA.pemを直接インストールできないので、safariから、gmail.comにログインして、メーラーを出して、そこからrootCA.pemを叩いて取り出して下さい。
  2. 次に、「設定」をクリックすると「プロファイルがダウンロード済み」というメッセージが出てくるので、そこをクリックして、「インストール」を押して下さい(ここでしつこく「パスコードの入力」を要求されますが、くじけずに何度でも入力して下さい)
    1.ダウンロードが出来たら、[設定]→ [プロファイルがダウンロード済み]を選択して下さい。

あとは、インストールボタンを押し続けて、インストールが完了して下さい。

5.2.1. ルート証明書を信頼する

  1. [設定] → [一般] → [情報] → [証明書信頼設定] → ルート証明書を全面的に信頼するの項目で、インストールした証明書をONにして下さい。

  1. [設定] → [プロファイル]でインストールしたプロファイルを選択するとルート証明書を確認できます。

5.3. Andoroidの場合

5.3.1. ルート証明書のインストール

  1. rootCA.pem を、rootCA.cerにリネームして、スマホにrootCA.cerをメールで送り込みます。
  2. メーラからrootCA.cerをクリックすれば、インストールされます(ことがあります)。

あるいは、

  1. ルート証明書ファイルを端末の内部ストレージまたはSDカードのルートディレクトリに配置します。
  2. ストレージからのインストールまたはSDカードからのインストールを選択します。
    • ストレージからインストールする場合:
      [設定]−[ユーザー設定]−[セキュリティ]−[認証情報ストレージ]−[ストレージからのインストール]
    • SDカードからインストールする場合:
      [設定]−[ユーザー設定]−[セキュリティ]−[認証情報ストレージ]−[SDカードからのインストール]
  3. 証明書に名称を設定し、[OK]ボタンをタップして、インストールが完了します。

最後に、

  1. 証明書がインストールされたか確認します。[設定]−[ユーザー設定]−[セキュリティ]−[認証情報ストレージ]−[信頼できる認証情報]の[ユーザー]タブで確認できます(ただし、私はこのメニューは確認できませんでした)

5.4. Windowsの場合

Windowsがスマホになることはないと思いますが、リモートの端末になることはあるので、記載しておきます。

  1. rootCA.pemを、rootCA.cerにリネームして、Windowsに送り込みます。
  2. rootCA.cerを右クリックして、「証明書のインストール」を選びます。
  3. 「証明書をすべて次のストアに配置する(P)」のラジオボタンをクリックし、「参照」ボタンをクリックします。
    1.「使用する証明書ストアを選択してください(C)」の画面で、「信頼されたルート証明機関」を選択します。

  1. 先ほどの画面に戻るので「次へ」ボタンを押下し、さらに「完了」ボタンを押下して下さい。正しくインポートされました。」と表示されればインストール成功です。

6. 結果

上記の処理を行うことで、iPhone,iPad,Android,WindowsBoxからのアクセスを行っても、サーバのコンソールから、

http: TLS handshake error from 192.168.0.22:59914: remote error: tls: unknown certificate
http: TLS handshake error from 192.168.0.22:59920: remote error: tls: unknown certificate
http: TLS handshake error from 192.168.0.22:59922: remote error: tls: unknown certificate

が出てこなくなり、ローカルネットでのセキュアなWebSocket通信が実現できる目処が立ちました。

以上

2020/11,江端さんの技術メモ

Dockerを使っていて、このメッセージにどれだけ苦しめられたことか分からない。

で、世界中の人も困っているようである。

コードにトレースログを仕込んでも、どうもコードではない部分で発生しているらしくて、手がつけられなかったが、調べている内に、こんなことが分かってきた。

  1. Dockerの中にデフォルトに入っているコンテナ間名前解決に関するアドレスらしい
  2. PostgreSQLに関する接続に関するところで発生るうことが多いらしい
  3. で、試しに、docker-compose.yml の"db:"に関わるところに、3行ほど追加してみた(最近濫用している、セキュリティ無視の接続の呪文)
    db:
    image: postgis-pgrouting:latest
    build:
    context: docker/postgis-pgrouting
    expose:
    - "5432"
    ports:
    - "15432:5432"
    volumes:
    - data
    - ./:/hitachi_ride_hailing_go
    environment:
    POSTGRES_HOST_AUTH_METHOD: 'trust'
    POSTGRES_PASSWORD: 'postgres'

そうしたら、いきなり、"dial tcp: lookup db on 127.0.0.11:53: no such host exit" が出てこなくなった。

理由は不明ですし、たまたまかもしれないけど、直ったので、それで良しとします。

 

2020/09,江端さんの技術メモ

https://www.ibm.com/quantum-computing/

Ibm_xxxxxxxxではログインできなかったので、googleのアカウントでログイン

うん、多分作れているんだろう。000」と「011」が約50%で発生している(上位ビットは無視して良い思う)から。1024回くらい繰返しているみたい。ただ、(当然だけど)量子の非局所化を確認する方法って、ないんだろうなぁ

2023,江端さんの技術メモ

第3章: スコアリングの詳細
第4章: MATSimの設定について
第5章: 利用可能な機能とその使用方法
第6章: MATSimのデータコンテナ
第7章: MATSimの初期入力の生成
第8章: MATSim JOSMNetworkエディタ
第9章 シンガポールにおけるMap-to-MapMatchingエディタ
第10章 ネットワークエディターの貢献
第11章: QSim
第12章 信号と車線
第13章 駐車場
第14章:電気自動車
第15章: ロードプライシング
第16章:MATSimによる公共交通のモデル化
第17章:「ミニバス」の貢献度
第18章 バス路線図マッチングの半自動化ツール
第19章 新しい動的イベントベースの公共交通ルータ
第20章 マトリックスベースの白金ルータ
第21章 "マルチモーダル "への貢献
第22章 カーシェアリング
第23章 カーシェアリング ダイナミックトランスポートサービス
第24章 貨物輸送 貨物輸送
第25章 貨物輸送 ワゴンシム
第26章 旅日記から読み解く貨物連鎖
第27章: デスティネーション・イノベーション
第28章 共同意思決定
第29章 ソクネトゲン
第30章: 日帰りリプランニング
第31章: MATSimエージェントを賢くする信念・願望・意図
第32章: CaDyTS: 動的トラフィックシミュレーションのキャリブレーション
第33章 セノゾンビア
第34章: OTFVis: MATSimのオープンソースビジュアライザー
第35章: アクセシビリティ
第36章: 排出ガスモデリング
第37章: MATSimを用いたインタラクティブな解析と意思決定支援
第38章: 「解析」の貢献
第39章: MATSimにおけるマルチモデリング。PSim
第40章: その他の計算性能に関する経験
第41章 避難計画 統合的アプローチ
第42章 都市シミュレーション MATSim4都市シム
第43章 廃止されたモジュール
第44章:組織 開発プロセス、コード構造、そして
第45章: 自分自身の拡張機能を書き、貢献する方法
第46章 MATSimの歴史
第47章 エージェントベースのトラフィックアサインメント
第48章: モンテカルロエンジンとしてのMATSim
第49章: MATSimにおける選択モデル
第50章: 運動学的波動の待ち行列表現
第51章:MATSimによる便益・費用に関するミクロ経済学的解釈
第52章 シナリオの概要
第53章:ベルリンI: BVGシナリオ
第54章 ベルリンII CEMDAP-MATSim-Cadytsシナリオ
第55章:スイス
第56章:チューリッヒ
第57章: シンガポール
第58章: ミュンヘン
第59章 スーフォールズ
第60章:アリアガ
第61章: 保定 家庭用新型ユーティリティの実証実験ケーススタディ
第62章 バルセロナ
第63章:ベルギー 河川洪水の経済的影響を評価するための推計フレームワークにおけるMATSimの利用
第64章:ブリュッセル
第65章:カラカス
第66章 コトブス 交通信号シミュレーション
第67章 ダブリン ダブリン
第68章 ヨーロッパの航空・鉄道輸送
第69章:ハウテン州
第70章: ドイツ
第71章:ハンブルク・ヴィルヘルムスブルク
第72章: ジョインビル
第73章: ロンドン ロンドン
第74章: ネルソン・マンデラ・ベイ
第75章: ニューヨーク
第76回:パダン パダン
第77章:パダン パトナ
第78章: フィリピン フィリピンにおけるエージェントベースの交通シミュレーションモデル
第79章: ポズナン
第80章: キト首都圏
第81章:ロッテルダム ロッテルダム 公共交通機関のレベニュー・マネジメント
第82章:サマラ
第83章: サンフランシスコ・ベイエリア スマートベイ・プロジェクト-コネクテッド
第84章 サンティアゴ・デ・チリ
第85章 シアトル地域
第86章: ソウル
第87章 上海
第88章: ソチ
第89章: ストックホルム
第90章:タンパ(フロリダ州 都市内移動の高解像度シミュレーションとその結果
第91章:テルアビブ
第92章:東京 ハイパーパスを用いた車両移動のシミュレーションと移動時間の信頼性に与える影響
第93章: トロント
第94章:トロント トロンハイム
第95章:ヤラウォンガとモルワラ。オーストラリア・ビクトリア州における需要対応型交通システム
第96章:横浜 MATSimのレジリエントな都市設計への応用
第97章: 研究の方向性


Chapter 3: A Closer Look at Scoring
Chapter 4: More About Configuring MATSim
Chapter 5: Available Functionality and How to Use It
Chapter 6: MATSim Data Containers
Chapter 7: Generation of the Initial MATSim Input
Chapter 8: MATSim JOSMNetwork Editor
Chapter 9: Map-to-MapMatching Editors in Singapore
Chapter 10: The Network Editor Contribution
Chapter 11: QSim
Chapter 12: Traffic Signals and Lanes
Chapter 13: Parking
Chapter 14: Electric Vehicles
Chapter 15: Road Pricing
Chapter 16: Modeling Public Transport with MATSim
Chapter 17: The "Minibus" Contribution
Chapter 18: Semi-Automatic Tool for Bus Route Map Matching
Chapter 19: New Dynamic Events-Based Public Transport Router
Chapter 20: Matrix-Based pt router
Chapter 21: The "Multi-Modal" Contribution
Chapter 22: Car Sharing
Chapter 23: Dynamic Transport Services
Chapter 24: Freight Traffic
Chapter 25: WagonSim
Chapter 26: freight Chains From Travel Diaries
Chapter 27: Destination Innovation
Chapter 28: Joint Decisions
Chapter 29: Socnetgen
Chapter 30: Within-Day Replanning
Chapter 31: Making MATSim Agents Smarter with the Belief-Desire-Intention
Chapter 32: CaDyTS: Calibration of Dynamic Traffic Simulations
Chapter 33: Senozon Via
Chapter 34: OTFVis: MATSim's Open-Source Visualizer
Chapter 35: Accessibility
Chapter 36: Emission Modeling
Chapter 37: Interactive Analysis and Decision Support with MATSim
Chapter 38: The "Analysis" Contribution
Chapter 39: Multi-Modeling in MATSim: PSim
Chapter 40: Other Experiences with Computational Performance
Chapter 41: Evacuation Planning: An Integrated Approach
Chapter 42: MATSim4 Urban Sim
Chapter 43: DiscontinuedModules
Chapter 44: Organization: Development Process, Code Structure and
Chapter 45: How toWrite Your Own Extensions and Possibly Contribute
Chapter 46: Some History of MATSim
Chapter 47: Agent-Based Traffic Assignment
Chapter 48: MATSim as aMonte-Carlo Engine
Chapter 49: Choice Models in MATSim
Chapter 50: Queueing Representation of Kinematic Waves
Chapter 51: Microeconomic Interpretation of MATSim for Benefit-Cost
Chapter 52: Scenarios Overview
Chapter 53: Berlin I: BVG Scenario
Chapter 54: Berlin II: CEMDAP-MATSim-Cadyts Scenario
Chapter 55: Switzerland
Chapter 56: Zuurich
Chapter 57: Singapore
Chapter 58: Munich
Chapter 59: Sioux Falls
Chapter 60: Aliaga
Chapter 61: Baoding: A Case Study for Testing a New Household Utility
Chapter 62: Barcelona
Chapter 63: Belgium: The Use of MATSim within an Estimation Framework for Assessing Economic Impacts of River Floods
Chapter 64: Brussels
Chapter 65: Caracas
Chapter 66: Cottbus: Traffic Signal Simulation
Chapter 67: Dublin
Chapter 68: European Air - and Rail-Transport
Chapter 69: Gauteng
Chapter 70: Germany
Chapter 71: HamburgWilhelmsburg
Chapter 72: Joinville
Chapter 73: London
Chapter 74: NelsonMandela Bay
Chapter 75: New York City
Chapter 76: Padang
Chapter 77: Patna
Chapter 78: The Philippines: Agent-Based Transport SimulationModel for
Chapter 79: Poznan
Chapter 80: QuitoMetropolitan District
Chapter 81: Rotterdam: Revenue Management in Public Transportation with
Chapter 82: Samara
Chapter 83: San Francisco Bay Area: The SmartBay Project - Connected
Chapter 84: Santiago de Chile
Chapter 85: Seattle Region
Chapter 86: Seoul
Chapter 87: Shanghai
Chapter 88: Sochi
Chapter 89: Stockholm
Chapter 90: Tampa, Florida: High-Resolution Simulation of Urban Travel and
Chapter 91: Tel Aviv
Chapter 92: Tokyo: Simulating Hyperpath-Based Vehicle Navigations and its Impact on Travel Time Reliability
Chapter 93: Toronto
Chapter 94: Trondheim
Chapter 95: Yarrawonga andMulwala: Demand-Responsive Transportation in Regional Victoria, Australia
Chapter 96: Yokohama: MATSim Application for Resilient Urban Design
Chapter 97: Research Avenues

2023,江端さんの技術メモ

MATSimに関する情報が、これほどまでに少ないとは知りませんでした ―― 特に、日本語の情報が絶無に近いです。

このドタバタ(失敗メモ)については、こちらに記載しています。

MATSimの調査(継続中)

本来なら、大晦日の日に完了しているはずのメモのリリースが今日(2023年1月3日)になってしまいました。

「MATSimのシミュレーションが動いているところまで確認する」のメモ


多くの交通システムの研究に携わる人が、MATSimを最初に触って動かすときの一助になれば、幸いです。

江端

 

 

2023,江端さんの技術メモ

http://www.kobore.net/diary_techno/?date=20190119

に、

  • Windowsの環境変数を引き継ぐのであれば、"msys2_shell.cmd"の中にある、"rem set MSYS2_PATH_TYPE=inherit"のremを外す

と書きましたが、上手く動きませんでした。

MSYS2 で PATH が引き継がれない

の、引き継ぎたいときは Windows の環境変数で MSYS2_PATH_TYPE に inherit を設定するとよい。

を頼りにして、設定してみました。

システム環境変数の設定では動きませんでしたが、ユーザ環境変数に設定したら動くようになったようです。

以上

2023,江端さんの技術メモ

Windowsのバージョンを上げる度に、メニューインターフェースを変えてくるMicrosoft社に、今さら腹を立てても仕方がない、と諦めています。

慣れなくてはならないのです。『ついていけない』と思った瞬間、「ジジイ」が確定します ―― シュレーディンガーのジジイです。

それはさておき。

Windows10→11のインターフェースの変化は大き過ぎて、ストレスが多いので、残念ですが、変更ツールに手を出してしまいました。

【決定版】使いにくい Wndows11 を Windows10風に戻す【Explorer Patcher for Windows11

を拝見して、力付くで直しました。

私の場合、OS(Windows11)は、https://github.com/valinet/ExplorerPatcher のインストールを邪魔されましたが、そこは、力づくで落しました(説明面倒なので省略)

で、

の画面から、以下の設定をしました(面倒なので全部コピペ)

以上

2022/12,江端さんの技術メモ

現在の江端家には、DVDドライブがない(AVケーブル用はある)ので、PCからDVDをmp4に変換して、それをノートPCで移したものを、HDMIケーブルで上映するしかありません。

加えて、Windows7→Window10への移行で、既存のソフトも消えてしまったので、今、環境を再構築しています。

これからは、DVD Decrypterでisoファイルで読みとって、それを、HandBrakeでmp4変換する、という方式にしました(当初、Handbrakeだけでやれないかと思ったのですが、DVDのプロテクトが外せませんでした)。また、今後はDVDの複製を作るニーズはないだろうと考え、DVD Shrink のインストール行なっていません。

# なお、リビングのWindows10の入った32bitPCにインストールする為に、目的のダウンロードファイルを探すのに、少々てこずりました

 

カンタン!DVD DecrypterでDVDをMP4に変換する方法

のクリップをコピペさせて頂き、自分用の覚え書きとさせて頂いております。

これで、isoファイルができたら、HandBrakeでmp4ファイルにします。

 

以上

2022/12,江端さんの忘備録

Amazonで、演劇集団キャラメルボックスのDVD(中古)を買ってしまいました。

I bought a DVD (used) of the theater group Caramel Box on Amazon.

で、今日、DVDが届いたのですが ―― 我が家にDVDプレーヤがないことに気がつきました。

So, the DVD arrived today -- and I realized that I do not have a DVD player in my house.

正確に言えば「ある」のですが、今年購入したテレビにVCRインターフェースがないので接続できない。

To be precise, it "is" there, but I can't connect it because the TV I bought this year does not have a VCR interface.

さらに言えば、HDMI->AVの変換器もあるのだけど、逆方向(AV->DMI)がないし、経験的にアナログ->デジタル変換は画像の品質が悪いことを知っています。

More to the point, there are HDMI->AV converters, but I don't have the reverse direction (AV->DMI), and I know from experience that analog->digital conversion has poor image quality.

面倒ですが、DVDからリッピングして、ノートPCで上映するしかないなぁ、と思っています。

It's a hassle, but I think I'll have to rip it from the DVD and show it on my laptop.

Amazon Primeや、NetFlixの弊害ですね。

This is the downside of Amazon Prime and NetFlix.