NET::ERR_CERT_COMMON_NAME_INVALID なんだこれ?

備忘録。あしらからず。

WSLのおかげでもうほとんどLinuxな仮想マシンは要らなくなったのでホントにラクチン。まぁ、業務上必要なのでまだまだ HyperVにはお世話にならんといけませんが・・・。

で、WSL-UbuntuにSSL通信(HTTPS)させようと、ひさしぶりにopensslコマンドとか使う。なにげにopensslは万能コマンドすね。乱数からダイジェストから暗号化まで全部できちゃう!(^^; で、まぁ、お約束どおりCA.pl -newcaとかで認証局を作って、認証局の証明書をWindowsの証明書マネージャで「信頼されたルート証明機関」にインポート後、openssl.cnfいじって、あとはお決まりのCSR作って、さっき作った認証局で署名して、そのサーバー証明書(CN=localhost)をapache2に食わせて、https://localhost/ にアクセスしたんすよ。

結果、撃沈。昔はこれでいけたんです! IE11だと問題ないし。

最新のChrome/FireFox/Edge ぜんぶダメ。chromeだとNET::ERR_CERT_COMMON_NAME_INVALIDとかいう謎のエラーが出る。。。いやいや、証明書のプロパティを見るとちゃんと CN=localhostってなってるし・・・。

で、このエラーをそのままググると、最近のブラウザはCNは無視するみたいで・・・って、よくわからんが、最近は、CNの一致ではなく、SANを見てるんだとか・・・。理屈はともかく、理由が分かればあとは証明書の作り方を変えればオケ。

とりあえず、CSR(署名要求)まではお約束通り。
※openssl.cnfの設定はググればよろし。ただ、CA向け用とサーバー向け用とファイルを分けて使い分けるのが間違いがなくてよろしかと。
デフォルトのopenssl.cnfをCA用として修正し、サーバー証明書作成時に使う設定は openssl-server.cnfと別ファイルにして使ってます。

#1.認証局作成
$ cd /usr/lib/ssl/misc
$ ./CA.pl -newca

# Windowsの証明書マネージャで「信頼されたルート証明機関」にインポートとするため der に変換。
# でも cacert.pem を直接インポートしたら普通にできたので、↓要らないかも。
$ cd demoCA
$ openssl x509 -in cacert.pem -inform pem -out cacert.der -outform der

#2.サーバーキー作成
$ cd /etc/ssl
$ mkdir server; cd server
$ openssl genrsa -out localhost.pem -aes256 2048
$ openssl rsa -in localhost.pem -out localhost.key

#3.署名要求作成
$ openssl req -new -config ../openssl-server.cnf -key localhost.pem -out localhost.csr

そして・・・CSR(署名要求)を認証局に署名してもらうときに、下記の内容のテキストファイルを用意して、-extfile オプションをつけて食わせるといいようです。理屈はどうでもいい。まずは手順さえ覚えて、あとから調べればいいんです。逃げ。

subjectAltName=DNS:localhost

複数の場合はカンマで区切れば行けそう?

subjectAltName=DNS:localhost,IP:127.0.0.1

このファイルを署名するときに食わせる。

$ echo "subjectAltName=DNS:localhost" > localhost.san
$ openssl ca  -config ../openssl-server.cnf -in localhost.csr -out localhost.crt -extfile localhost.san

そして、できた localhost.keyとlocalhost.crt の二つを /etc/apache2/sites-available/default-ssl.conf の SSLCertificateFile とSSLCertificateKeyFile に記述。そして起動する。

$ a2enmod ssl
$ a2ensite default-ssl
$ service apache2 start

そして、1.で作ったcacert.der をデスクトップにコピーして 右クリック⇒証明書のインストールで「信頼されたルート証明機関」へストア。

ってなわけで?めでたく、最新のブラウザでも https://localhost/ で緑色の鍵マーク付きで表示された。

CoffeeLake(Core i7-8700) と Windows10 1803更新と

自作組立でPCを組んだのが5年前、そろそろハードウェアを一新したいなーと思いつつ伸ばし伸ばしにしてたのですが、GW連休に片付けてしまおうと思いリプレースを決行しました。

当初、起動システムが入っているSSDも含め一新しようと思いましたが、Windows10はAnniversary Update(1607)からライセンス認証の形態が変わり、ハードウェアの変更においても簡単にライセンス認証できる仕組みになったようで、OS自体も特に意識せずともクリーンインストールせずに環境を引き継げるとのこと。

要はマイクロソフトアカウントでログインしてライセンスとリンクしていればマザーボード等を交換してもライセンス再認証が通るようになったようです。
https://support.microsoft.com/ja-jp/help/20530/windows-10-reactivating-after-hardware-change

ってことで、今回はCPU、マザーボード、メモリを交換して、経済的理由により(^^;、来年あたりにストレージを交換することにした。
で、まずはパーツ購入です。

  • Intel Core i7-8700
  • ASUS PRIME Z370-A
  • Corsair DDR4-2666 8GB x 2

交換する前に、Spring Creators Update(RS4) の更新が降ってきたので、メンドクサイな・・・と思いつつパーツ交換前に済ませとこうと思い、更新開始後30分くらいでRS4に更新完了。
RS4への更新で一番うれしかったのが、WSL(Windows Subsystem for Linux)のブラッシュアップ。
デーモンプロセスが常駐できるようなったこと。今まではWebサーバーやデータベースなどのデーモンはBashコンソールを終わらすと全部落ちちゃうので不便極まりなかった。
それにWindowsシステムにも openssh がサポートされているようで・・・あとはもうCMD.EXEを捨て去ってマイクロソフト純正のターミナルエミュレータを作ってコンソールウィンドウを置き換えてくれれば・・・!

んで、次、マザーボード、CPU、メモリの交換はスムーズにいき、BIOSで必要な設定を行い、いざWindows10起動・・・見慣れない、「デバイスを準備中です」のメッセージの後、普通に起動した(^^;


さすがに論理プロセッサが12基あると壮観っすね。

普段はローカルアカウントで作業しているんですが、新規に作ってあったマイクロソフトアカウントを使ったユーザーでログイン後、ライセンス再認証してみる・・・・失敗・・・。上記URLの通り、トラブルシューティング実施後、「このデバイス上のハードウェアを最近変更しました」をクリック・・・失敗・・・・・・ええーーーーー!指示通りにやったのに再認証でけへん!!!

途方に暮れつつ、イチかバチか、Windows10に無料アップデートする前の5年前にパーツ買ったときに一緒に買ったWindows7のDVDメディアについてたプロダクトキーで、プロダクトキーの変更を行ってみる・・・

「このデバイスはライセンス認証されています」

あれ? 再認証でけた・・・。よくわからんが、やっぱりM/B、CPU、メモリ、3つも変えるとスンナリ再認証させてくれないのか・・・。
とりあえず、パーツ交換にともなうライセンス認証はクリアした。

しかし、致命的な問題が発生。Intel QSV がアプリケーションで認識しなくなった・・・。ググってみると、インテルグラフィックスドライバを最新版にしろ、とのことなので、インテルのサイトから最新のドライバ 24.20.100.6025 をダウンロードして実行してみたのですが、エラーが出てインストールできず・・・。

いろいろ試してみてもダメ。最終手段で、デバイスマネージャーからドライバファイルごと削除した。

もう一度最新ドライバのインストーラーを実行したら、インストールが正常に完了した。
QSVが認識されているか、HandBrakeを立ち上げて確認したら、ちゃんと認識してくれるようになった!
前のPC(Haswell)で平均で200FPSぐらいでエンコードできてた動画の変換が300FPSぐらい出てる!早い!バンザーイ!ってことでCPU4世代分の進化を実感できたw

そして、あともう1個 問題発生。
SONYのNASNEをパソコンから見るための PC-TV Plus というソフトでTVや録画番組が再生できなくなってしまった。
「グラフィックスドライバの状態が不正です、HDCPが・・・」というようなエラーが発生するようなった。
追記:HDCPチェッカーで HDCPがNGになってました。なんで・・・?
んーーー、これに関しては、原因が分からん。このパソコンではたまにしか見てなかったので問題はないが・・・ソフト側の問題かWindows10-1803の更新の問題のような気がする・・・。一応、一度アンインストールしてからインストールしなおしてみたけど状況は変わらず・・・。更新を待つしかないか・・・。

【追記の追記】これに関しては液晶モニターのHDCPが機能していませんでした。タイミング的にOSかアプリのせいかなと思ったんですが、ブルーレイレコーダをHDMI接続してみたらエラーで何も映りません・・・。たぶんモニタを修理に出したら基板交換になると思うんで・・・モニタが完全に壊れたら買い替えすることにします。。。(;´д`)トホホ

パーツ費用 約8万円也・・・。いまま使ってきた M/B(Gigabyte Z87X)、CPU(Core i7-4770)、メモリ(DDR3 16GB)をケースから抜いたままをヤフオクで出品して手数料、送料引いて約2万円弱ぐらいで処分できた。もうちょっと高く出品しても良かったかな、と一瞬思ったけど、僕にとってはゴミなので(^^;
まぁ、出品してすぐに落札されたので気持ちよく処分でけたマル。

xkeymacs + Windows10

2018年4月8日 追記
ようやく設定プロパティダイアログの修正が入ったものがリリースされた模様。待ってました!ってなわけでここに置いてあるのは削除しました。


そろそろプロパティダイアログの修正入っているのかなぁ・・・と思って久しぶりにxkeymacsのページを覗いたけど、現状で安定しているのかsnapshotが6年前で止まってた。まぁ、Windows10でもちゃんと動いているんだし(^^;
snapshotのリリースは止まっていたけど、ソース自体は更新されていたので、最新のソースをダウンロードしてVisual Studio 2015 Community でビルドした。
ビルドする前に設定ダイアログのサイズをちょっと伸ばしてプロパティシートが切れないのようにちょっとだけ伸ばす。これは↓と同じ(^^;

Windows8.1用にxkeymacsをビルド

スクリーンテキストのサイズは100%でしか使わないのでOK。
プロパティの部分だけ(GUIの部分だけ)C# .Net Frameworkとかで書けば多分解決するんでしょうけど、いかんせん、MFCのソースは僕には皆目読めません。。。読む気ありません。。。ただでさえC++忘れかけてるのに・・・。C++ TR1ぐらいがギリついてけるが、C++11規格とかもうサッパリ・・・。Cに至ってはもうC90ぐらいでも今となってはついていけるかも怪しい。。。

ってなわけで、どこからでもダウンロードできるように、リンク貼っておこう。
Rev.8799a18のものをVisual Studio 2015 Community Editionでビルドしたやつ

シェルスクリプト右往左往

Bash on Ubuntu on Windows(以下BoWと略す)の環境下で作成したシェルスクリプト(ほとんどがImageMagickとffmpeg関連)がある程度貯まってきたので、CentOS側にコピーして動かしてみたら、エラーが出まくって動かなくなった・・・トホホ。

原因のほとんどが、basenameでのエラー。BoWは Ubuntuで、coreutilsのバージョンは 8.25。CentOS 6に標準で載ってる coreutilsのバージョンは、8.4・・・7年前にリリースされたもの・・・。

ってなわけで、 `basename -s <suffix> <filepath>` となっているところを片っ端から `basename <filepath> <suffix>` に変換してようやく動く。

今までシェルスクリプトは、「なんか覚えるのメンドーだなー」とか、「Perlで組めば大抵代用できるしなー」とか思ってて、あえて避けてきたんだけど、やっぱり画像の一括リサイズとか、画像への文字合成処理とかの単純作業は、Photoshopのアクション&バッチ処理をするより、圧倒的に手間が少なく、ラクできる。 特定ディレクトリ下に無秩序に掘られたサブディレクトリに格納された画像1000枚以上にシリアル番号入れて一括リサイズなんてPhotoshopでやってらんねーーーーし!

とりあえず、if-elif-else、case、while、for、などの基本制御式さえ押さえれば、あとは manページ参照しながらやってると、よく使う find コマンドとか、imagemagickなどのオプションなんて自然とソラで書けるようになってくるのがアラ不思議(^^

google検索のおかげで、CLIはグッとハードルが下がりましたよねぇ。。。

やっぱりWSLでCentOSが使いたい(挫折編)

#2018年9月1日追記
この記事はベータ版時代のWSLに関するものですので、ご注意ください。具体的には LxRun コマンドでインストールされるLegacy版が対象です。
主なディストリビューションに関してはストア版を導入した方が管理も楽でしょうし、debian系、slackware系もそろってますし、redhat系のディストリビューションもそのうちリリースされることでしょう・・・いやしてほしい。以前 fedora もマイクロソフトストア配布されてた思うんですが・・・消えてますね・・・。

また、WSL-DistroLauncher というWSL用ディストリビューションのインストーラー・起動アプリのリファレンス実装サンプルをマイクロソフトが公開していますので、そちらで好みのディストリビューションをWSL用にパッケージングが試せます。また勉強がてらに試してみよう。。。
※ツールのビルドにVisual Studio 2017 community が必要です。

#2018年5月19日追記
コマンドラインの記述が一部間違っておりました。
インストールしたディストリビューションの切替の箇所でswitch.pyと記述しないといけないところを、install.py と間違えていました。記事内修正しました。
また、Windows10 の Spring Creators Update を適用してから CentOS をインストールして切り替えて使ってみた感じ、特にエラーもなく使えるようになってまつね・・・。いいぞ、Microsoft! この調子で、マイクロソフト製の ちゃんと使えるターミナルエミュレータのリリースを待ってます!いや、CMD.EXEぢゃなく・・・、いや、ホントに。

#2017年11月1日 追記
内容が古いので、ご注意ください。
また、Windows10 Fall Creators Updateから、マイクロソフトストアで複数のディストリビューションがダウンロードできるようになっているので、そちらを利用されることをおススメします。

ディストリビューションの切替は、wslconfig.exe コマンドを利用することを強く推奨します(^^;
従来からのものは、”Legacy”。 ストアからインストールされるものは、”Ubuntu”などとディストリビューション名で管理されているようです。
詳しくはこちら (English)


Bash On Windows、WSL(Windows Subsystem for Linux)で提供されているディストリビューションは ubuntu ですが、ubuntuの環境が動くんなら、他のディストリビューションも動くでしょ? というのが普通の感情(^^

ちょちょっとググってみると、やっぱりあります。
WSL Distribution Switcher ( https://github.com/RoliSoft/WSL-Distribution-Switcher )

Python3で書かれている一連のスクリプトツールのようですが、これを使うといろんなディストリビューションをインストールして切り替えて使えるようです! やったー!
ってなわけで、単純なオイラはすぐに Python の Windowsバイナリをインストールして、早速試してみました。

要するにこのツールは、LinuxディストリビューションのDockerイメージを取得・展開・切り替えの一連の手順をスクリプト化したもののようです。間違ってたらすみません。

で、結果的には、CentOSで運用できるところまではいかなかった・・・。いえ、一応CentOSをインストールできてbashは起動できたんですが・・・このエントリは、その時の備忘録です。

※ Pythonで書かれているので、Windows版のPython3バイナリをインストールしておく必要があります。cygwin環境のpythonだと dockerイメージの解凍に失敗してしまいました。この辺よく分かりません(m´・ω・`)m ゴメン…

上記サイトに行き、git 使っている方は、clone、使ってない方はzip書庫をダウンロードして適当なフォルダに展開してください。私は デスクトップに展開して作業しました。
ちなみに、Windows10のバージョンは Anniversary Update ( Windows10 v1607/Build14393 ) です。

まずは、README.mdに書かれている手順を行う前に、hook_postinstall_all.sample.sh というファイルをリネームして、hook_postinstall_all.sh にしときます。単に sample を消すだけです。
普通にインストールすると root のパスワードが設定されないので、困ることになるので、hook_postinstall_all.shを編集します。具体的には 下記の行をスクリプト上部のコメントが終わった直後ぐらいに追記しときます。

#rootのパスワード設定
ROOTPASSWD="0000"

前準備完了。

1、get-source.py で Docker Hub 内の オフィシャルイメージを取得します。

僕の目的は CentOSの最新版なので、単に centos と指定。 たぶん動かないと思うけど CentOS6系なら ‘centos:6’ というような感じで指定するみたいです。指定の仕方は docker のまんまですね・・・。詳しくは上記サイトのREADME.md 参照。

C:\Users\xxx\Desktop\WSL&amp;amp;gt;&amp;amp;gt; python get-source.py centos

これで tarボールがダウンロードできました。

2、install.py で tarボールの解凍および切り替え

ダウンロードしたtarボールを指定するか、イメージ名を引数にして install.py を実行。

C:\Users\xxx\Desktop\WSL&amp;amp;gt;&amp;amp;gt; python install.py centos

これで、%localappdata%\lxss ディレクトリにある既存のubuntuが入った rootfs がリネームされ、新しい rootfs に先ほどのイメージが格納されます。
その後、hook_postinstall_all.sh が実行されます。

これで一応インストール完了。試しに bash を立ち上げて、/etc/redhat-release を見ると

$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

3、switch.py で切り替える

元の ubuntu に戻すときは、

C:\Users\xxx\Desktop\WSL&amp;amp;gt;&amp;amp;gt; python switch.py ubuntu:trusty

引数なしで実行すると、インストールされているディストリビューションの一覧が表示されます。

C:\Users\xxx\Desktop\WSL&amp;amp;gt;&amp;amp;gt; python switch.py
usage: ./switch.py image[:tag]

The following distributions are currently installed:

- centos:latest*
- ubuntu:trusty

To switch back to the default distribution, specify ubuntu:trusty as the argument.

4、sudo とかその他諸々がエラーで使えない!!!

さて、実はこれからです(笑)
CentOSがインストールされてやったー!と思って、以下のコマンドを叩くと・・・

$ sudo vi /etc/hosts
sudo: unable to create sockets: Socket type not supported

どうやら sudo コマンドが使えないみたい・・・。
README.mdには、その対策として、 alias sudo=”sudo -S” で回避するように、とのことですが、僕の環境だと同じエラーが出ます・・・。
仕方ないので、su でrootになって作業するしかありません・・・めんどくさーーーーーー!
他にも、localectl とか timedatectl とか なんちゃらctl が動かない。どーなっとんじゃー!?

ってな感じです。CentOS7自体まだ触ったことないんで・・・。ちなみに CentOS6はbash自体起動できず。まぁ、カーネルバージョンが違うので当たり前? これもよくわかんないです。

ってなわけで? おとなしく ubuntu に戻しました・・・。今後のWSLのアップデートに期待です・・・。次のWindows10のバージョンアップ( Creators Update でしたっけ?)でネットワーク関係のシステムコールがまともに使えるようになるんでしょうか・・・・???? 現状ネットワークドライブにアクセスできないので、まともに使えない・・・Apacheとかsambaとかフツーに使えるようにしてyo!!!

(m´・ω・`)m オネガイシマス。