fc2ブログ

ぽよメモ

RaspberryPi

CATEGORY

  • このページのトップへ

SSL設定しようとして諦めた話


あけましておめでとうございます。
このブログがいつ消えるかは僕のやる気次第ですよろしくお願いいたします。

この前取得したドメインでwebサーバを建てました。→ poyo.info

そして正月の暇な気分に任せてStartSSLでSSL証明書を発行し、https対応してやろうと血迷ったのが昨日の夜です。
結果的に言うと諦めました。なんで諦めたかは後で書きます。とりあえずやり方だけ書いていきます。

最初にググってあちこちのサイトを見てから始めたのですが、結論から言うとStartSSLの仕様が大きく変わっており、一部大きく異る操作を行うこととなりました。

これまでは緑を基調とした比較的ポップなサイトでしたが、2016/1/4現在は水色が基調のはやりのフラットデザインを採用しています(所々前からの使い回しと思われる画像もあります

手順としてはだいたい以下のとおりです
1. StartSSLにSign-up
2. domain validation
3. Free SSL Certificateを発行
4. 秘密鍵、公開鍵、その他をnginxに読み込ませる

1. Sign-up
StartSSLにアクセスし、トップページの"Start Now for Free SSL Centrificate"をクリックします。

するとSign-upかAuthenticateが選択できるのでSign-upに進みます。
以前はここで住所、年齢、氏名等を入力する画面が出ましたが、今は国を選択しメールアドレスを入力してValification codeを発行してもらうだけです。
前はこれでIdentity Validationが完了していたっぽい?んですが現在はもう少し厳しくなってました。ログイン後の画面で3つあるタブのうち一番右、Validations Wizardを選択するとdomain, email, Personal Identity, OtherのValidationが選択できます。このうちemailは最初のSign-upで完了しており、Personal Identityを選択すると以下の画面が出ます。

Class2以上のSSL証明書が必要な場合はこちらの認証が必要ですが、Class1には必要ありません。

2. domain validation
一番上のdomain validationを選択しcontinue。top level domain(www.poyo.infoならpoyo.info)を入力する画面が出ますので、ここに入力すると以下の画面が出ます。

使っているdomain宛のメールアドレスを受信できる状態にする必要があります。またはWhois代理公開をしている場合、そのコンタクト情報を正しく入力しておく必要があります。僕はどっちもしておきました。
送られてきたメールに書いてあるコードを入力し、validationを終えます。

このとき意外とメールが来るのが遅いことがあるようです。最初のメールが5分以上遅延して送られてきました。


3. Free SSL Certificate
Certificates Wizardタブを選択し、今回はwebサーバに用いるので”Web Server SSL/TLS Certificates”を選択してcontinueします。

www.poyo.infoなどと入力し、秘密鍵のパスワードを設定します。10~32文字の英数字混合のパスが求められます。
次のページで秘密鍵が表示されるのでコピーして保存します。
このとき、絶対Download Private Keyを押して手元に残しておくことをおすすめします。(後からわからなくなると確認するすべがない

次は公開鍵を手に入れるのですが、時間かかります。Tool Boxタブを選択し、Certificate Listを選択すると以下の様な表が出ます。
Private Keyを手に入れてすぐの時はStatusがPending issuedになっているのでこの状態になるまで待ちます。メールに寄る通知などは来なかったです。僕はここで一旦切り上げて寝ました。朝起きたら以下のとおり↓

右のRetrieveボタンを押すと公開鍵をダウンロードすることができます。
ご丁寧にzipで固めてあり、開くとApache、IIS、Nginx、Other用にそれぞれzipがあるので適宜使ってください。

ここまで来たらようやくStartSSLから離れられます。
適当に使ってるwebサーバに鍵を転送します。(公開鍵→startssl.crt、秘密鍵→startssl.key)
適当にフォルダを決めて
$ wget https://www.startssl.com/certs/ca.pem
$ wget https://www.startssl.com/certs/sub.class1.server.ca.pem
こいつらを落としてきます。
パーミッションの変更
$ chmod 400 startssl.crt startssl.key ca.pem sub.class1.server.ca.pem

Apacheには中間証明書を指定するところがあり、Nginxにはありません。Nginxではサーバ証明書にくっつけてしまえば勝手にやってくれるらしいです(それでいいのか…
$ cat sub.class1.server.ca.pem >> startssl.crt

現在、StartSSLで作成してきた秘密鍵にはパスフレーズが設定されています。これをそのままnginxに読み込ませると、nginxを起動する度にパスフレーズが求められて面倒です。外してしまいます。
$ openssl rsa -in startssl.key -out startssl_nopass.key
unable to load Private Key
1996223696:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:
アレ…

no start lineとエラーが出ています。僕は察しました。「アッ、貼り付けるときに一行目がバグったな」
-----BEGIN RSA PRIVATE KEY-----を追加し、再度実行。
$ openssl rsa -in startssl.key -out startssl_nopass.key
unable to load Private Key
1995896016:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:pem_lib.c:818:
ファ!?
もういいや…毎回パスフレーズ入れよ…

「公開鍵と秘密鍵、合ってるか確かめときたいな」と思い
$ openssl x509 -in startssl.crt -modulus -noout
したのですが
$ openssl x509 -in startssl.crt -noout -modulus
unable to load certificate
1995597008:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:pem_lib.c:818:
アアアアッ…なんだこれは…

ググっても全然わからず。
ここで心折れて辞めました。メンタルが弱いんです。

気が向いたらまたやります。




スポンサーサイト



カテゴリー:RaspberryPi


NginxにphpMyAdminを通す


Nginxの最新版の導入が成功しましたら、データベースをより管理しやすくするためにphpMyAdminを入れます。
(インストールはこの前の記事でやった)
まずはphp5の環境設定から。
$ sudo vim /etc/php5/fpm/php.ini

・683行目付近 文字コードの設定
default_charset = "UTF-8"

・865行目付近 タイムゾーンの設定
date.timezone = "Asia/Tokyo"

・1645行目付近 言語設定
mbstring.language = Japanese


$ sudo vim /etc/php5/fpm/pool.d/www.conf

・22行目付近 PHP実行ユーザ名の設定
user = nginx

・23行目付近 PHP実行グループ名の設定
group = nginx

・33行目付近 FastCGIリクエストの設定
listen = 127.0.0.1:9000
ここまできたらサービスの再起動を行います。
sudo /etc/init.d/php5-fpm restart


MySQLのセキュリティのための設定
$ mysql_secure_installation

Enter current password for root (enter for none):  ←パッケージ導入時に指定したパスワードを入力
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
Thanks for using MySQL!


ここからはNginxの設定に入ります。

公開ドメイン名: www.poyo.info
ドキュメントルート: /var/www
Wordpress: /var/www/wordpress
phpMyAdmin: /usr/share/phpmyadmin

としておきます。
$ sudo vim /etc/nginx/nginx.conf

user nginx;
worker_processes 4; # Raspberry Pi2なので「1」→「4」に修正

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
}


http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

gzip on; #コメントアウトを外す Gzip圧縮転送を有効
include /etc/nginx/conf.d/*.conf;
}
Nginxは/etc/nginxにインストールされているはずです。
各種設定は/etc/nginx/conf.d/*.confとして保存し、先ほどのnginx.confによってincludeされます。
まずはデフォルトで入っている設定ファイル類のバックアップを取ります。
$ cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/wordpress.conf
$ mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.org
$ cp /usr/share/nginx/html/index.html /var/www/index.html
$ cp /usr/share/nginx/html/50x.html /var/www/50x.html

次にWordpressとphpMyAdminの設定をかきます。
$ sudo vim /etc/nginx/conf.d/wordpress.conf

server {
listen 80;
server_name poyo.info www.poyo.info;

# アップロードできるサイズの指定(Nginxのデフォルト値は1MByte)
client_max_body_size 16M;

# www が省略時されたときでも、www を付加したサーバ名に統一する
if ($http_host = "poyo.info") {
rewrite (.*) http://www.poyo.info$1;
}

location / {
root /var/www;
index index.php index.html index.htm;
}
 location /blog {
alias /var/www/wordpress;
index index.php;
# WordPress用のファイル・ディレクトリ不在時のリダイレクト対応
try_files $uri $uri/ /wordpress/index.php?$args;
# WordPress用のカスタムパーマリンク対応
if (!-e $request_filename) {
rewrite ^.+?($/.*) $1 last;
rewrite ^.+?(/.*\.php)$ $1 last;
rewrite ^ /wordpress/index.php last;
}
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www;
}
# FastCGI用の設定
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}
location /phpmyadmin {
alias /usr/share/phpmyadmin;
index index.php
#アクセスの制限
allow 127.0.0.1;
allow 192.168.0.0/24;
deny all;
}
location ~ /phpmyadmin/.*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/$uri;
include fastcgi_params;
}
}
これでhttp://[ラズパイのIPアドレス]/phpmyadminにアクセスすればphpMyAdminが表示されるはずです。


カテゴリー:RaspberryPi


Nginxの最新版を入れる


ようやくドメインを取得し、ラズパイをもう一台手に入れたので、こいつでWordpressを動かし、このブログをそっちにお引越ししたいと考えています。

ApacheにするかlighttpdにするかNginxにするか悩みましたが、どうも調べた限りではNginxがもっとも軽そうなのでこいつにします。
sudo apt-get install nginx php5 mysql-server php5-fpm php5-mysql phpmyadmin chkconfig

#勝手に入ってくるapache2を切る
sudo chkconfig apache2 off
しかし、ここで入れたnginxのバージョンは1.2.1でした。
最新版は1.8.0です。ちょっと気持ち悪いので手動で入れなおそうと思います。

#nginxのアンインストール
sudo apt-get remove nginx

#Nginxのリポジトリ追加
echo 'deb-src http://nginx.org/packages/debian/ wheezy nginx' | sudo tee -a /etc/apt/sources.list

#PGP公開キーを登録
wget http://nginx.org/keys/nginx_signing.key -O - | sudo apt-key add -

#GnuPGに登録
wget http://nginx.org/keys/nginx_signing.key -O - | gpg --no-default-keyring --keyring ~/.gnupg/trustedkeys.gpg --import -


/tmp/nginxにソースパッケージを展開しコンパイルします。
sudo apt-get update
sudo apt-get build-dep nginx
mkdir /tmp/nginx
cd /tmp/nginx
sudo apt-get source nginx
cd nginx-*
dpkg-buildpackage -uc -b
cd ..
#インストール
dpkg -i nginx_*~wheezy_armhf.deb
最後のインストールになってエラーが出ました。

nginx-debが何か悪さしてるっぽい?よくわからない。
言われるままにコマンドを打つ。依存関係の解消をするコマンドらしい。
sudo apt-get -f install
これでもまだエラーが出る。今度はnginx-commonが妨害しているようだ。
さらに、ここでまだnginxが動いていることに気づく。
sudo service nginx stop
sudo apt-get remove nginx-common
もう一度インストールを試す
$ dpkg -i nginx_*~wheezy_armhf.deb
(Reading database ... 82645 files and directories currently installed.)
Unpacking nginx (from nginx_1.8.0-1~wheezy_armhf.deb) ...
----------------------------------------------------------------------

Thanks for using nginx!

Please find the official documentation for nginx here:
* http://nginx.org/en/docs/

Commercial subscriptions for nginx are available on:
* http://nginx.com/products/

----------------------------------------------------------------------
Setting up nginx (1.8.0-1~wheezy) ...
Installing new version of config file /etc/nginx/scgi_params ...
Installing new version of config file /etc/nginx/fastcgi_params ...
Installing new version of config file /etc/nginx/koi-win ...
Installing new version of config file /etc/nginx/nginx.conf ...
Installing new version of config file /etc/nginx/koi-utf ...
Installing new version of config file /etc/nginx/win-utf ...
Installing new version of config file /etc/nginx/uwsgi_params ...
Installing new version of config file /etc/nginx/mime.types ...
Installing new version of config file /etc/init.d/nginx ...
Installing new version of config file /etc/logrotate.d/nginx ...
Installing new version of config file /etc/default/nginx ...
$nginx -v
nginx version: nginx/1.8.0
上手くいった。やったね。

冬休み中に設定を終えてしまいたいですね…

カテゴリー:RaspberryPi


RasPiで室温を計測する


最近ずっとbotの方にかかりきりでRaspberryPiを放置していた(サーバとしてしか使っていなかった)のですが、先輩が温度センサーとブレッドボード、ジャンパワイヤをお土産でくださったので使ってみることに。

今回用いるのはaitendoのI2C温度センサー、TMP102です。


以下のサイトを参考にしました。
raspberry piで温度計測(TMP102)

まずI2Cデバイスを扱えるようにします。
/etc/moduesに以下を追加(後述するがもしかしたら必要ない?
$ sudo vim /etv/modules
i2c-dev

以下のように該当行をコメントアウト
$ sudo vim /etc/modprobe.d/raspi-blacklist.conf
#i2c-bcm2708

しかし僕のRaspberryPi2にはraspi-blacklist.confが存在しませんでした。ググったところこの部分は仕様変更があったようで、次のサイトを参考にしました。→Raspberry PiでI2Cを使う。raspi-blacklist.confが無い時

$ sudo raspi-config
して設定するだけなのでむしろ簡単になったといえるかもしれません。
もしかしたらこれですべて自動で使えるようになって、/etc/modulesに書き込む必要は無かったかもしれませんが、これは検証していません。

なにはともあれここまで終わったら一旦RasPiをシャットダウンし、電源を抜きます。
$ sudo shutdown -h now


RaspberryPiを買った時に初期でついてきたGPIOカードを参考にしてジャンパワイヤを刺していきます。


TMP102の回路図はaitendoのサイトのリンクから見ることができます。
[tmp102] >> [RasPi]
V+ >> 3.3V
SDA >> GPIO2(I2C_SDA1)
SCL >> GPIO3(I2C_SCL1)
GND >> GND
ADD0 >> GND

まぁこんな感じで接続します。

このときADD0をどこにつなぐかで0x48か0x49になるかが決まるらしいです。今回のようにGNDに接続すると0x48になります。

i2c-toolsをインストール。
$ sudo apt-get install i2c-tools

$ sudo i2cdetect 1
すると以下の様な結果を得ます。


もしi2cdetect 1でエラーが返ってくるようならi2cdetect 0で試してみてください。また、ADD0をGND以外につなぐとここで49が表示されます。
$ sudo i2cget -y 1 0x48 0x00 w
として何か値が返ってくるのを確認してください。これでダメだったら温度センサーが死んでるのでは…

次にこれを温度に変えるスクリプトを組みます。僕にもよくわかんないですがこういうことらしいです。tmp102.shとか適当な名前で保存してください。
#!/bin/bash

hexraw=$(sudo i2cget -y 0 0x48 0x00 w)
while [ "$hexraw" == "" ]; do
hexraw=$(sudo i2cget -y 0 0x48 0x00 w)
done

msb=$(echo ${hexraw:4:2})
lsb=$(echo ${hexraw:2:1})
dec=$(printf "%d\n" "0x$msb$lsb")

echo "scale=4; $dec*0.0625" | bc
この計算スクリプトではbcという計算ソフトを利用しているらしいのでこれもインストールシておきます。
$ sudo apt-get install bc
ここまでくれば後は実行するだけです。
$ ./tmp102.sh
22.3125
無事値が帰ってきたら成功です。また、たまにError: Read failedが出ます。原因が不明で困っています。

ついでなのでpythonでもこいつから温度を取得してみたいと思います。
$ sudo apt-get install python-smbus
python-smbusをインストールし、以下の様なスクリプトを組みます。
import smbus
import time

bus = smbus.SMBus(1)
data = bus.read_i2c_block_data(0x48, 0)
msb = data[0]
lsb = data[1]

print (((msb << 8) | lsb) >> 4) * 0.0625
あとは実行するだけです。
$ sudo python tmp102.py
22.375
sudoつけてないとエラーが出ます。また、Read failedの時の例外処理をしてないのでその時もエラーが出ます()

また、pyenv環境の人はこのやり方では上手く行きません。次の記事で書きます。


カテゴリー:RaspberryPi


RasPiをDLNAサーバにする


SambaとNetatalkを設定し、ファイル共有を行える環境になったところで、RasPiからデータを配信できるようにminiDLNAを突っ込みます。

sudo apt-get install minidlna

簡単でいいですね。
設定ファイルは/etc/minilna.confです。ここで参照するフォルダや、データベースの更新頻度を決めます。
sudo vim /etc/minidlna.conf

#変更箇所のみ記述しています
#V=Videos(動画ファイル),P=Pictures(画像ファイル),A=Audio(音楽ファイル)など、
#メディアの種類ごとでフォルダ分け出来ます
media_dir=V,/var/nas/videos
media_dir=P,/var/nas/pictures
media_dir=A,/var/nas/music

#DBの自動更新。デフォルトではコメントアウトされている。
inotify = yes

#DBの更新頻度。デフォルトではコメントアウトされている。
notify_interval = 895
ポートはデフォルトで8200になっています。これもmiinidlna.confの中に記述箇所があるので変更可能です。その他の細かい項目についてはよく知らないので言及を控えます。

とりあえずLAN内のその他のデバイスから"http://[ローカルホスト名]:8200"にアクセスしてみましょう。
おそらく指定したフォルダ内にメディアファイルがあったとしても、
MiniDLNA status
Audio files:0
Video files:0
Image files:0
と表示されると思います。これはDBが更新されていないからです。DBの更新方法は
minidlna -R
または
sudo service minidlna restart
でできます。普段の更新は自動更新の間隔で十分でしょう。もっと大量のファイルを扱うなら、遅めの間隔が良いようです。

あとはLAN内にあるデバイスにDLNAクライアントを入れてたのしむだけです。

最近Xperia Z Ultra SOL24を中古で購入しました。かっこいいですねこれ。画面が大きいので動画等のコンテンツをかなり楽しめます。地味についてるフルセグ/ワンセグが便利ですw



SOL24なのでUQ mobileのSIMを契約しようとしたのですが、まさかの未成年なので契約不可という壁に行き当たってしまいました…
しばらくはiPhoneのテザリングと学内Wi-Fiでの運用になりますね…悲しい…

カテゴリー:RaspberryPi