茶葉置き場

IT関係のあれこれ(予定)

Git Bash で OpenSSL を実行する方法

pem を pfx に変換する必要があり、方法を調べていたら Git Bash で openssl コマンドを実行すればいいらしいことが分かった。

いざコマンド実行してみたらエラーすら出ずに無反応になったので解決方法等をまとめ。

■簡易版

  • 問題

    Windows で Git Bash を起動して openssl コマンドを実行しても無反応になる

  • 解決方法

    コマンドの文頭に winpty を入力して実行する


■詳細版

問題発生の流れ

  1. pem を pfx に変換するため、Git Bash で openssl コマンドを実行
  2. 「Enter Export Password」が表示される想定だが、何も表示されない
  3. 待機しても変化なし、処理されていない模様
$ openssl pkcs12 -export -in hoge.pem -inkey hogekey.pem -out hoge.pfx

// 何も表示されず、処理も完了しない

原因

  • Git インストール時「Configuring the terminal emulator to use with Git Bash」の設定で「Use MinTTY」を選択しているため
  • MinTTY は WindowsAPI と互換性の問題があり、WindowsAPIを使用するプログラムを実行すると正常に動作しない

参考:MinTTY の Tips
https://github.com/mintty/mintty/wiki/Tips#inputoutput-interaction-with-alien-programs

解決方法

  • コマンドの文頭に winpty を入力して実行する
$ winpty openssl pkcs12 -export -in hoge.pem -inkey hogekey.pem -out hoge.pfx  
Enter Export Password:  
Verifying - Enter Export Password:

// 実行された
  • 毎回入力するのが手間であれば、.bashrc にエイリアスを登録する
// .bashrc に以下を登録 ※~\.bashrcが無ければ手動で作成
alias openssl='winpty openssl'

// ターミナルでコマンド実行
$ openssl pkcs12 -export -in hoge.pem -inkey hogekey.pem -out hoge.pfx  
Enter Export Password:  
Verifying - Enter Export Password:

// winpty なしでも実行された
  • Git インストール時「Configuring the terminal emulator to use with Git Bash」の設定で「Use Windows' default console window」を選択する

    ※ターミナルがコマンドプロンプトになる
     別の回避方法があるので、今回の問題のためだけに選択しなくてもいいのではと思う

  • Git インストール時「Configuring experimental options」の設定で「Enable experimental support for pseudo consoles」にチェックを入れる

    ※注意書きにあるが、既知のバグがあるらしい

winpty とは?

  • Windows コンソールプログラムと通信するためのインターフェースを提供するパッケージ
  • MinTTY と WindowsAPI の間に入って非互換性を解決してくれる

参考:winpty の Readme
https://github.com/rprichard/winpty#readme