$ git clone https://github.com/GuyBrand/WssSample
で取ってきた、コードで、色々調べている。
サーバは、以下で起動。
クアイアントは、
で起動(に失敗)
以下、色々ごそごそやってみる。
ちなみに、getCrtホルダは、証明鍵を作るプログラムのようす
C:\Users\ebata\WssSample\genCrt>ls
genCrt.go new.crt new.key
C:\Users\ebata\WssSample\goClient>curl localhost:9200
Client sent an HTTP request to an HTTPS server.
C:\Users\ebata\WssSample\goClient>curl https://localhost:9200
curl: (77) schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - 信頼されていない機関によって証明書チェーンが発行されました。
「信頼されていない機関」って「私」か。そりゃそうだが。
うーん、では、curlコマンドを使ってHTTPSのAPIを叩く と 、SSL通信時発生する証明書エラーとその仕組みを理解する を参考にして、
C:\Users\ebata\WssSample\goClient>curl -k https://localhost:9200
を実行。
色々でてきた。ということは、サーバとしては機能しているようです。
とは言え、
は、解決されていないです。
そもそも、私、SSLの仕組み、きちんと理解できていると思っていません(だからAWSのhttps化で地獄を見ることになった)。今回、イケメンとラブレターで学ぶSSLの仕組み で、なんとか分かったような気になりました。
C:\Users\ebata\WssSample\server の中に入っている、algo.crt を叩いてみたら、
が出てきました。インストールして良いものかどうか迷いましたが、(有効期間内だったようだし)「証明証のインストール」のボタンを押してみました。
よく分かりませんが、言われるがまま(にボタンを押していきました。
そんでもって、サーバ側からは、C:\Users\ebata\WssSample\server>go run main.go hub.go conn.go クライアント側には、C:\Users\ebata\WssSample\goClient>go run goClient.go conn.go hub.go を入力しましたが ―― うん、症状改善なし、でした。
一応ブラウザから https://localhost:9200 を押下したみたのですが、
こんな感じですねえ。サーバのエラー表示はこんな感じです。
「詳細設定」ボタンを押して、「localhost にアクセスする(安全ではありません)」を押下すると、一応動きます。
この画面2枚上げると、表示が連動しているのが分かります。
Windows10の環境設定画面から、以下のような設定もやってみたけどダメでした(ので消しました(別の問題を引き起こしそうだったので))
(一時休憩)
現在勉強中のページ
MacでGolangでhttpdでTLSでLet's Encryptを使ってみた。
ここで困っていたら、普段からご教示して頂いているSさんから「mkcertを使ってみたら」というアドバイスを頂きました。で、get clone https://github.com/FiloSottile/mkcert.git などもやってみたのですが、ソースコードしか入っていなくて、このコンパイル方法も良く分かりませんでした。
https://github.com/FiloSottile/mkcertを除いてみたら、バイナリがダウンロードできそうことが分かりました。
でもって、ここから、Windows10で使えそうなバイナリをダウンロードしました。
ダウンロードしたところから、直接叩いてみたら、C:\Users\Ebata\AppData\Local\mkcert の中に、鍵ができていましたが、最初に、mkcer -installしろ、と言われています。
本当はmkcertにリネームした方が良いのでしょうが、面倒なので、そのまま mkcert-v1.4.1-windows-amd64.exe -install でセットしました。
その後、mkcert-v1.4.1-windows-amd64.exe localhost 127.0.0.1 と入力すると、"localhost" と "127.0.0.1"を含む鍵が、カレントディレクトリにできるようです。
で、"localhost+1-key.pem"を "algo.key"とリネームして、"localhost+1.pem"を"algo.crt"とリネームして、C:\Users\ebata\WssSample\serverに放り込む。
C:\Users\ebata\WssSample\server>go run main.go conn.go hub.go
file algo.crt found switching to https
とこの状態で、ブラウザから、https://localhost:9200を入力
おお! 警告が出なくなった!!! サーバはちゃんと動いているみたい。
では、クライアントのプログラムも・・・
うん、こっちはダメだな。
ws, _, err := websocket.NewClient(c, u, wsHeaders, 1024, 1024)
if err != nil {
fmt.Println(err.Error())
return
}
トレースで、このNewClient()でエラーが出ているのは分かっているんですが、この原因は分かりません。
クライアント側のコードでは、鍵の読み込みをしていないようです。
ちなみに、WssSample/gemCrt に鍵を生成するプログラムが入っていますが、これで作った鍵では、httpsの認証問題をクリアできませんでしたので、素直に「mkcertを使ってみたら」と申し上げます。
(もう一度チャレンジしますが今日は▽ここまで)。