2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
この記事は、Twilio Advent Calendar 11日目の記事です。
9日目は、satoshi0212さんの「Twilioサーバーレス化作業記録 - RequestURLもサーバーレス化」でした。
はじめに
この記事は、直接Twilioとは関係ないのですが、TwilioClientのJavaScripts版を利用していて、今月に入ってからChromeブラウザでエラーが発生するようになったため、その原因と解決方法を記事にしたものです。
TwilioClientとは、パソコンのブラウザを使って電話ができるという、TwilioのVoIP機能です。
現象
Chromeブラウザを使って、TwilioClient(JS版)で通話をしようとすると、ある日から突然以下のメッセージがでてエラーになる、もしくはマイクへのアクセス許可ダイアログが表示されずに接続できなくなります。Safariなど、別のブラウザでは今までどおり動作します。
Error: User denied access to microphone, or the web browser did not allow microphone access at this address.
原因の推測
エラーメッセージから推測するに、どうやらマイクへのアクセスができないよとのことらしい。念のためChromeのデベロッパーツールを確認すると、以下のWarningが出ている。
static.twilio.com/libs/twiliojs/refs/6359b40/twilio.min.js:113 getUserMedia() no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gl/rStTGz for more details.
要は、httpsでアクセスしてないので、セキュリティ上マイクへのアクセスはそのうちにできなくなるから気を付けてねということらしい。で、そのうちがやってきたというわけです(Chromeのバージョン47からかな)。
ということなので、解決策はSSL/TLSでアクセスすれば良いわけですが、テスト環境などにもいちいち証明書を用意するのは大変ですよね、奥さん。
対策1 セキュリティチェックをバイパスする
他の方法はないかと先ほどのWarningメッセージにあったURLを見てみると、どうやら起動オプションを指定することで、セキュリティチェックをバイパスできるらしいっす。
さっそく試しにやってみる。
まずは、Chromeを完全に閉じる。
Macのターミナルから以下のコマンドを入力する(あらやだ、あなたWindowsなの?そんなOS、知らないですわよ)。
open -a "/Applications/Google Chrome.app" --args \
--unsafely-treat-insecure-origin-as-secure="http://www.hoge.com" \
--user-data-dir=/tmp/foo
www.hoge.comのところはアクセスしたいURLに書き換えてください。
うまくコマンドが通れば、Chromeが起動してきます。
Chromeをインストールした直後のような動作になるけど、確かにこれだとアクセスしたいURLでちゃんとマイクの許可ダイアログが表示されるようになります。
まぁしかし、長期的に考えるとSSL/TLS対応するのがベストですよね。
対策2 無料で証明書を準備する
今までだと、証明書を取得するには年間数千円から数万円の費用がかかるので、テスト環境のドメインでは準備するのが大変でした。しかし、Let's Encryptの登場により状況は一変しました。
###Let's Encryptとは
Let's Encrypt は、認証局(CA)として「SSL/TLSサーバ証明書」を無料で、しかも簡単に発行してくれるサービスです。
なぜ無料かというと、無料にすることでTLS や HTTPSを普及させ、安全なネットの世界を作りたいという、非常に素晴らしい志があるからです。運営は、非営利団体の ISRG(Internet Security Research Group)で、シスコ(Cisco Systems)、Akamai、電子フロンティア財団(Electronic Frontier Foundation)、モジラ財団(Mozilla Foundation)などの大手企業・団体が、ISRG のスポンサーとして Let's Encrypt を支援しています。
今まではクローズドβだったのですが、2015年12月4日からオープンβプログラムに移行したため、誰でもが利用できるようになっています。
詳しい説明は、以下のページをご覧ください(日本語で導入方法が書かれています)。
注意点だけ書いておくと、
- 証明書を利用するサイト上でLet's Encryptsソフトウェアを実行すること
- ドメイン認証のみのサポートなので、企業認証やS/MIMEなどでの利用はできない
- 現時点では、Windows環境ではLet’s Encryptsソフトウェアが動作しない
といったところでしょうか。
僕も実際にAWS上のEC2で試してみましたが、無事に取得できました。
で、この記事の主題でもある、TwilioClientは、SSL/TLS対応することにより、正常に動作することを確認しました。