ハックライフノート

技術的な話とか、覚え書き

[Apache]Let's EncryptでSSL対応化した話(ワイルドカード使用)

ずっとやろうと思っていたけどやらなかった、自鯖で運用しているwebサーバーのSSL対応についてです。

SSLってなんぞやって話については調べれば腐るほど情報がありますが、一言で言えば安全性を高める技術ってことです。

サイトをリクエストしたクライアントPCとサーバー間の通信をセキュアにしてくれるので、今の時代はまず導入しているのが一般的になりつつあります。

将来的にはSSL対応していないサイトは表示すらできなくなる可能性もあります。

そうなったら面倒なので、重い腰をあげて取り掛かりました。


で、SSL対応をするには証明書の発行が必要で、無料や有料のものもピンキリであるんですが、有料のものは大体個人で扱うような価格設定ではないケースが多いので、今回は無料で発行できるLet's Encryptを利用して証明書の発行を行いました。

まあ、webサーバー自体放置状態なので・・・


証明書の発行はサーバーで行いますが、Let's Encryptの場合certbotという自動で証明書を発行してくれるクライアントソフトがあるので、それを落とします。

yum install epel-release

epelレポジトリをインストールしていない場合は、まずepelレポジトリを導入します。

yum install certbot python-certbot-apache

で、certbot本体をインストール。

次にcertbotを利用して証明書の発行をするんですが、自分の環境では複数のサブドメインを運用しているのでそれ用のコマンドを引数として与えてやります。

sudo certbot certonly --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory -d alterzero.net -d *.alterzero.net

長いですが、こんな感じでコマンドを実行するとcertbotが走り対話形式で設定を聞いてきます。

alterzero.netの部分はご自身の環境に合わせて下さい、ちなみにこのドメインは私が趣味で取得したドメインですが今の所何もコンテンツがありません。

これを機に色々と立ち上げてみるつもりですが・・・

話が逸れましたが、対話形式では基本的に英語の内容を読んでyes or noを答えて下さい。

ただし、途中でDNSにTXTレコードを追加しろと言ってくるので、大人しくドメイン管理サービスでTXTレコードを設定します。

_acme-challengeをサブドメインとし、レコードの種類をTXT、valueについては表示されている暗号みたいな文字列をそのままぺっと貼っつけて下さい。

その後、追加したTXTレコードがドメインに追加されているかをチェックします。

nslookup -q=txt _acme-challenge.alterzero.net

とでも投げれば、最初は見つからないと言われますが数分も経てば追加したTXTレコードのvalueが流れてきます。

ここでも当然ご自身のドメインを指定して下さい。

後はさっきの途中で止めているcertbotでEnterを押して続けて下さい。

Conguratulation!と出ていれば、証明書の発行は終わりです。

/etc/letsencrypt/live/(ドメイン名)/のディレクトリ以下に各証明書と秘密鍵が生成されているので、そちらを使用しましょう。

cert.pem = サーバー証明書
privkey.pem = 秘密鍵
chain.pem = 中間証明書

Apacheへの環境設定は多分各個人でバラバラなので、次回あたりにでも私の環境での導入を書いておこうと思います。

[Windows10]Windows10 October 2018 Update(1809)でアクションセンターの通知が出なくなった不具合と解決法

今年の10月に配信が開始されたWindows10 October 2018 Update(バージョン1809)ですが、ファイルが消えるなどの不具合が相次ぎ、暫くの間配信の停止がされていましたね。

それが12月になって配信が再開されたので家のPCと職場のPCがアップデートされたのですが。

アップデート後、アクションセンターの通知が出なくなり、履歴も残らない状態になってしまいました。

ただ、右下の吹き出し?のようなアイコンには白くなり通知の数は表示されています。

が、クリックすると何も履歴が表示されないんですよね。

解決法としては、バックグラウンドアプリの実行を許可する、というものでした。

スタート→設定→プライバシー→バックグラウンドアプリの項目へ飛び「バックグランドアプリ実行を許可する」をオンにし、PCを再起動するれば直りました。


今までは無駄に裏で動いて欲しくなかったので意図的にオフにしていたんですが、何故か1809ではこれをオンにしないと通知が出なくなるという、不具合というよりかは仕様に変更されています。

なんでや・・・

[PC]Core i9 9900Kを買いました

最近めっきり寒くなりましたね。

私はと言うと、冬のボーナスが出たので調子に乗ってCore i9 9900K(8コア16スレッド!)を買ってしまいました。

ほとんど勢いです。

ただ、今まで使用していたCPUがCore i7 3770Kと大分前の世代のCPUだったので、そろそろ変えどきかなぁと思っていたのも事実です。

CPU換装に伴い、マザーボード(ROG STRIX Z390-F GAMING)とメモリ16GB(DDR4-2666)も合わせて購入。

総額約11万です。たっか!

ま・・・動画作ったりするし、エンコード時には役に立ってもらうとして。

換装後に何故かドライバーが当たらなかったデバイスが存在したので、困惑しました。

バイスIDで調べてみた所、Cannon Lake PCH SMBus ControllerとCannon Lake PCH SPI Controllerという名前のデバイスだと判明。

まあチップセット絡みのデバイスだと思うので、素直にIntelのサイトから
ダウンロード チップセット INF ユーティリティ
をダウンロード&インストール。

無事に認識しました。


i9という響きに負けて買っただけのアホです。

[VB.NET]DataGridViewの描画を高速化する

DataGridViewと言えば、データベースから引っ張ってきたデータ群を表示したり、色んな用途で使えるコンポーネントです。

ただ、初期状態では大量のデータをバインドした状態での描画の際、もったりとした動作になってしまいます。

解決法は色々とあるのですが、その中でも特に劇的な改善が見られたのは、ダブルバッファの有効化でした。


ダブルバッファとは、おおまかに言ってしまえば、データを描画する前に一旦メモリ上で表示するデータを展開してから、一気に画面上へ反映させる技術の事です。

ダブルバッファの有効化はいくつかの手段がありますが、その中でも既存のDataGridViewに簡単に適用できる方法が以下のコードとなります。

System.Type dgvtype = typeof(DataGridView);

System.Reflection.PropertyInfo dgvPropertyInfo = 
                                dgvtype.GetProperty("DoubleBuffered",
                                System.Reflection.BindingFlags.Instance |
                                System.Reflection.BindingFlags.NonPublic);

dgvPropertyInfo.SetValue(適用したいDataGridView名, true, null);

これをLoadイベントに書いてあげれば、対象のDataGridViewのダブルバッファが有効となります。

ただし、環境によっては不具合を起こしたりする場合もある事を確認しているので、ケースバイケースとなります。


ダブルバッファで、業務効率化へ。

[Java]Mapインターフェースでよく使うHashMap、LinkedHashMap、TreeMapの違い

今回はJavaのMapインターフェースのお話です。

そもそもMapとは、任意の型同士をキーと値のセットで使用する使い所によっては便利なインターフェースです。

使い方としては、

Map<String, String> map = new HashMap<>();

な感じで、大抵の場合Mapインターフェースを実装したHashapクラスでインスタンス化する場合が大抵だと思います。

この場合、Stringクラスのキーと同じくStringクラスの値のセットで使用します。

が、ここでHashMapの特性を理解していないと、意外な所でつまづきます。

例えば、Mapの要素内を全て取り出したい時は拡張for文等で実装すると思いますが。

for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + ":" + entry.getValue());
}

といった感じで出力すると、出力される結果はランダムな要素順になってしまいます。

これはHashMapの特徴で、要素の追加順等は保有しません。

じゃあ要素の追加順で出力したい場合はどうするかと言うと、LinkedHashMapクラスでインスタンス化をします。

そうすると、先程の拡張for文で回してあげると、要素を追加した順に出力をしてくれます。

因みに、TreeMapというクラスもありますが、こちらの場合はキーを昇順に並べ出力してくれます。

まとめると・・・

1.HashMapは取り出す際、要素はランダム
2.LinkedHashMapは、追加(put)した順番
3.TreeMapは、キーを昇順に並べた順番

に出力されます。

[MySQL]CentOSへのMySQLインストール後mysql_secure_installationで躓いた話

新しくサーバ用のPCを買ったので、どうせならMySQLでもインストールしておこうと思いたったのが事の発端

環境はCentOS 7.5-1804のMySQL 5.7.22です。

MySQLは普通にyumするとMariaDBがインストールされるので、MySQLの公式からレポジトリを追加してyum install mysqlしてます。

さて、通常のやり方としては上記の通り本体をインストール後

sudo cat /var/log/mysqld.log | grep password

で初期パスワードをまず取得してから

mysql_secure_installation

をすると思いますが・・・ここで躓いた。

Access denied for user 'root'@'localhost'

rootパスワードを求められる所で、先程取得した文字列をちゃんと入れてもこの通り、ログインできません。

実はこの現象、RaspberryPiにMySQLを入れた際にも同様のエラーが起こったので、元々のバグなのか何なのか正直わかってません。

んで本題、これの解決法。

まずMySQLのサービスを停止します。

sudo systemctl stop mysqld.service

因みに、CentOS7からはsystemctlコマンドを使ってサービス(デーモン)の起動や停止を行います。

次に、/etc/my.cnfの[mysqld]の最後列にskip-grant-tablesを追記。

vi /etc/my.cnf
[mysqld]
skip-grant-tables

んで、MySQL起動。

sudo systemctl start mysqld.service

補足ですが、MySQLは停止しないままmy.cnfを編集後

sudo systemctl restart mysqld.service

でも行けると思います。

そしたら、MySQLに普通にログインします。

mysql -u root

パス無しで入れるので、後はmysqlスキーマのuserテーブルにあるauthentication_stringカラムがrootのpasswordを更新してあげてください。

UPDATE mysql.user
SET authentication_string=password('新しいrootパスをここに入れる')
WHERE user='root';

んで、MySQLをログアウト後、再度停止後my.cnfの追加した行を削除しmysqlを起動するか、編集後に再起動してください。

mysql -u root -p

で先程UPDATEしたパスワードを入力すれば、きっとログインができる喜びを味わえるでしょう。

もう既に2回も遭遇し2回対処しているので、手順を覚えそうです。覚えたくないけど。

[Windows10]ドライブがエクスプローラーで2重に表示される

タイトル通りですが、Windows10のエクスプローラーの左ツリーでドライブが2重に表示される問題があります。

f:id:miyatakaTK:20180519170349p:plain

上のスクリーンショットにあるように、赤枠で囲んだ部分が余計に表示されています。

これ、何故こうなっているかと言うと、赤枠の方はどうもリムーバブルディスクとして認識しているせいです。

USBメモリとか、そういった仲間に分類されてるんですね。

なんでやねん。

見た目上あまりよろしいものではないので、赤枠の方の表示を消します。


1.レジストリエディタを起動する
Win + Rキー同時押しで「ファイル名を指定して実行」を開き、名前に「regedit」と入力してEnterします。

このショートカットキーは便利なので覚えておいて損はないです。


2.レジストリの編集
レジストリの編集は自己責任で、万が一に備えてバックアップを取ったほうが吉です。

レジストリエディタが開いたら、

コンピューター\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\DelegateFolders

に移動します。

そこに {F5FB2C77-0E2F-4A16-A381-3E560C68BC83} という名前のキーがあるので、削除します。

3.あら不思議
f:id:miyatakaTK:20180519171528p:plain

エクスプローラーを再起動しなくても、こんな感じで2重表示が解消されていると思います。

と言うか、リムーバブルディスクとして認識しちゃダメでしょ、ってツッコみたいですね。