facebook

そろそろ、自宅サーバーもhttps化しないとだめかな・・

かなり昔(もう二昔近くかな?)からですが、ネットワークの勉強かねて自宅サーバーを動かしています
現在は、知り合いがたま~に書き込んでくれるBBSと、最近暇つぶしに設定してみた
WordPress が動いている程度です
WordPress はそのうち、ここのようにメジャーなところにはあまり書けないような、マイナーな
内容を書いてみようと思っています(この記事も十分マイナーだと思いますが・・(^^;)
WordPressはデータの保管もできるので、データのやり取りに使ったりしてます
標準では、データの種類や容量に制限がありますが、自前なら自由に設定できるので便利です
その程度の利用ですが、そろそろ「https」化しないとダメかなぁ~と思いやってみました
できなかったら、レンタルサーバーでも借りようと思います

とりあえず、無料で!

自宅の環境は、Vine6.5 です。
なかなか、同じ環境の情報はでてきませんが、こちらを参考にしました

https://www.willstyle.co.jp/blog/394/
https://www.server-memo.net/server-setting/apache/apache-mod_ssl.html
http://vine.1-max.net/apache2-ssl.html

まずは、openssl と mod_ssl が必要なようなので、確認してみます

$ rpm -qa | grep openssl
openssl-1.0.1u-4vl6.i686
openssl098-0.9.8zh-1vl6.i686

openssl はインストール済みなようです。
次に、mod_ssl

$ rpm -qa | grep mod_ssl

う~ん、こちらは、インストールされていないようです
インストールされていない場合には、apr-get でインストールします
インストールする場合には、まずパッケージ名を調べます

$ apt-cache search mod_ssl
mod_ssl-apache2 – SSL/TLS module for the Apache HTTP server

出てきました
パッケージ名が分かったので、インストールします
インストールは、「apt-get」を使用します

$ sudo apt-get install mod_ssl-apache2

インストールが完了すると、apache のディレクトリに必要なディレクトリができていました
後でわかったのですが、次の処理として「秘密鍵」やら「証明書」やらの生成が必要ですが
そのファイルもインストールでやってくれているみたいでした
とりあえず、「apache2」のディレクトリを確認すると、ssl用にディレクトリが追加されています

$ ls /etc/apache2/conf
Makefile@ httpd.conf original/ ssl.crt/ ssl.key/
apache2.conf@ extra/ magic ssl.crl/ ssl.csr/ ssl.prm/

鍵と証明書の生成

次には

  • 秘密鍵の生成
  • CSR(Certificate Signing Request 証明書署名要請書)
  • サーバ認証(CRTファイル作成)

と進むようです
ただ、インストールした時点ですでに必要なファイルは生成されていたようで
ssl.key/ ssl.crt/ ssl.crt/ ディレクトリには、必要そうなファイルが作成されていました
作成されていたので、証明書などの作成は省略できそうな気もしますが
とりあえず、別のディレクトリに作成し、自動生成されていたファイルと入れ替える事にします

まずは、秘密鍵の生成

「openssl」コマンドを使用します

# openssl genrsa -out /etc/httpd/server.key 2048
Generating RSA private key, 2048 bit long modulus
…………+++
…………………………………….+++
e is 65537 (0x10001)

これで、キーが生成されたので、認証ファイルを生成します

# openssl req -new -key /etc/httpd/server.key -out /etc/httpd/server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [AU]:JP ←————————- 国
State or Province Name (full name) [Some-State]:Kanagawa ← 都道府県
Locality Name (eg, city) []:Yokohama ←————————- 市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:←-省略
Organizational Unit Name (eg, section) []:←–省略
Common Name (e.g. server FQDN or YOUR name) []:www.kazuban.com ←-ドメイン
Email Address []:←————————- 省略

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:←————————- 省略
An optional company name []:←——————— 省略

これで、認証ファイルが作成されます、通常はこのファイルをベリサインとかに送って
証明書を発行してもらうようですが個人でも証明書の発行はできるようです

# openssl x509 -req -days 365 -in /etc/httpd/server.csr -signkey /etc/httpd/server.key -out /etc/httpd/server.crt
Signature ok
subject=/C=JP/ST=Kanagawa/L=Yokohama/O=TAK/CN=www.kazuban.com
Getting Private key

これで、/etc/httpd/ ディレクトリ内に3つのファイルが作成されているはずです。
「ls」コマンドで調べてみます

$ ls /etc/httpd/
conf.d/ server.crt server.csr server.key

このファイルをそのまま使用してもいいと思いますが
私の場合は、インストール時に自動作成されていた、専用のディレクトリへコピーして
使う事にします
いずれにしても、どのファイルを使用するかは、「apache2」の「conf.d」ディレクトリの
「ssl.conf」の下記のキーワードで設定します。
SSLCertificateFile 「*.crt」サーバ証明書パス
SSLCertificateKeyFile 「*.key」サーバ秘密鍵パス



SSLCertificateFile /etc/apache2/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/apache2/conf/ssl.key/server.key

後一歩!

これで設定は終了し、「apache」を再起動すれば、いいはずですが
「https」は、「443」ポートを使用しますので「443」ポートを開放する必要があります

まずは、サーバー側

# /sbin/iptables -L

このコマンドで現在の設定状況が確認できます
ここで、「https」か「443」が「ACCEPT」になっていれば、Webサーバー側の設定は
OKですが、この項目がない場合には、設定が必要です
コマンド入力での追加方法も検索すると出てきますが、私はGUIでやってしまいました

次に、ルータ側の設定も必要ですね

私の場合は「auひかり」なので、ホームゲートウェイのポートマッピングの設定で
ポート番号「443」を許可しました
ポートマッピング
ここで、自宅LAN上のサーバアドレスを指定することで、インターネット側からアクセスできるようになります
開放状況は、こちらのサイトから、確認できるようです
http://www.cman.jp/network/support/go_port.cgi

さて、これでhttps でアクセスできるはずです・・・

設定が無事完了できれば、アクセスできますが、警告がでますねぇ
保護されていない
自分で自分を証明しているわけですから、しょうがないですね
個人的に使う場合は通信自体は暗号化されていると思うので、すこしは進歩かな・・
ただ、Let’s Encryptを使うと、無料で証明書を取得できるようです
そのうちに、暇なときにやってみようと思います

最新情報をチェックしよう!