Bearer Token

The OAuth 2.0 Authorization Framework: Bearer Token Usage(日本語)

Bearer Tokenというのは、署名なしトークンで、上記に書いてあるのは、アクセストークンが署名なしトークンの場合に、保護リソースを要求する方法。これがBearer認証スキームと呼ばれているらしい。推奨される送り方は、Authorizationリクエストヘッダフィールドを用いる方法で、下記のようにやる。

レスポンスは、WWW-Authenticate ヘッダフィールドを含めるとか色々書いてある。
なんか単純すけど、セキュリティ高めるために暗号化したり、https接続したり、クッキーに保存するなとか、TLS証明書チェインを検証しろとか、有効期間を短くしろとかが書いてある。

mixi PlatformがOAuth 2.0の最新仕様に対応しました
これ見ると、アクセストークンは署名つきだったけど、https使えば署名なくてもいいんじゃないか的な感じで、アクセストークンのbearer認証スキームが生まれたのかなと思った。

GCPでUbuntu16・Nginx・PHP7・cakePHP3環境をつくる

Google Cloud Platform(GCP)はAWSのgoogle版です。ここにサービスの説明があります。

Compute Engine

まずプロジェクトを作成する。次に、Compute Engineのコンソールで、VMインスタンスを作成する。ゾーンを日本、マシンタイプをf1-micro、OSをUbuntu16.10で作成してみた。数十秒程度でインスタンスが作成完了し、ブラウザ上でssh接続、ターミナル操作がすぐ可能になった。

マシンタイプの変更方法

参考:vm instanceのMachine type変更方法
IPをスタティックにして、ディスクを削除しないようにしながら、VMインスタンスを削除して、新しくインスタンスをつくるらしい。この間サーバは止まってしまう。でもいずれにしても結構簡単に切替は可能。

ローカル環境でssh接続できるようにする

google cloud SDKをインストールする。インストール完了したら初期設定が動き出すので、ログインしたりゾーン選択したりする。
Compute EngineのVMインスタンスの画面にある、ssh接続用のgcloudコマンドを実行する。これでssh接続できた。

PHPとかNginxとかをインストールする

$ sudo apt-get update
$ sudo apt-get install php
$ php -v
PHP 7.0.15-0ubuntu0.16.10.4 (cli) ( NTS )
$ sudo apt-get install nginx
$ nginx -v
nginx version: nginx/1.10.1 (Ubuntu)
$ sudo apt-get install git vim composer

デフォルトでapache2が入っていて起動されているようだ。
$ sudo systemctl stop apache2
$ sudo systemctl start nginx

Cloud DNS

https://cloud.google.com/dns/quickstart
上記に従って、DNS APIを有効にして、DNSコンソールからドメインを追加する。記載されているネームサーバに合わせて、ドメインのネームサーバを変更して、必要な設定をすると反映される。

Cloud SQL

Google Cloud SQL ドキュメント
Cloud DNSと同様にAPIを有効にしてインスタンスを作成する。Compute Engineから接続するには、ネットワークの承認が必要。下記にやり方が書いてあった。
MySQL クライアントを Compute Engine から接続する

Compute Engineを設定してCakephp3を動かす

$ sudo vim /etc/nginx/sites-available/default

$ sudo systemctl restart nginx
$ cd /var/www/html
$ sudo apt-get install php-fpm php-intl php-mbstring php-zip
$ sudo composer create-project –prefer-dist cakephp/app hoge.com

Compute EngineをCloud SQLにつなぐ

phpmyadminを使う

$ sudo apt-get install mysql-client
$ sudo apt-get install phpmyadmin
$ sudo vim /etc/phpmyadmin/config-db.php

config-db.php

$dbnameがないとエラーになるけど、内容は適当でも大丈夫だった。

$ sudo echo “hoge:$(openssl passwd -apr1 hogepassword)” > /path/to/hogepath
$ sudo chmod 604 /path/to/hogepath
$ sudo vim /etc/nginx/sites-available/default

コマンドラインでmysqlにつなぐ

$ mysql –host=[INSTANCE_IP_ADDR] –user=root -p

cakephp3でmysqlにつなぐ

$ sudo vim /var/www/html/hoge.com/config/app.php
hostをCloud SQLにする。

Let’s EncryptでSSL取得・設定

hoge.comとphpmyadminをhttps接続のみ可能にする。hoge.comにhttpアクセスした場合はhttpsにリダイレクトさせる。

$ sudo apt-get install letsencrypt
$ sudo systemctl stop nginx
$ sudo letsencrypt certonly –standalone -d hoge.com
$ sudo letsencrypt certonly –standalone -d hogehoge.com
$ sudo systemctl start nginx
$ sudo vim /etc/nginx/sites-available/default

$ sudo systemctl restart nginx

Let’s Encryptの更新方法と更新の自動化

この投稿でLet’s Encryptで無料でSSL証明書を作りましたが有効期限が切れそうなので更新します。
環境は、サーバはさくらのVPS、OSはUbuntu16.04、webサーバはnginxです。

更新方法

参考:https://certbot.eff.org/#ubuntuxenial-nginx

Automating renewal

有効期限が切れる前に自動的に証明書を更新するようにCertbotを設定することができます。 Let’s Encrypt Encryptは90日間使用できるので、この機能を利用することをお勧めします。このコマンドを実行すると、証明書の自動更新をテストできます。

Ubuntu Xenial上のCertbotのバージョンに「電子メールなしで登録する!」という警告が表示されるバグがあります。以前にCertbotに電子メールを送っていたとしても。これが起こっても心配しないでください。更新には影響しません。それが正しく動作していると思われる場合は、以下を実行するcronまたはsystemdジョブを追加して自動更新を手配できます

更新する

更新はNginxをとめないといけません。止めずにrenewコマンドを実行すると、エラーがでます。

手動で更新する

Nginxを停止したのちに、renewコマンドを実行して、Nginxを再開するか、webrootプラグインを利用して、renewコマンドを実行する必要があります。webrootプラグインを利用する場合、80ポートにアクセスしてNot Foundとかにならないようにする必要があるようです。私の場合、httpsでしか接続できない(httpの場合強制的にhttpsにリダイレクトさせる)ようにしてあるので、webrootは使えませんでした。Nginx停止&再開をrenewコマンドの前後でやってみます。

自動更新させる

自動更新はcronを使います。

.crontabの中身を下記のようにします。

あるいは、ログを残しておく場合は下記のようにします。

crontabに反映させます。

設定がうまく反映できているかの確認をしたい場合、一旦上記cronの実行頻度を変更してすぐに実行させるようにしつつ、下記のような感じでログ出力したらいいと思います。

さくらVPSでcakephp3を動かす

環境

Ubuntu 16.04
PHP 7.0
Nginx 1.10

composerインストール+git clone

Nginx設定

$ vim /etc/nginx/sites-available/default

さくらレンタルサーバでcakephp3を動かす

すでにさくらサーバでgitが使えるようになっています。たしかデフォルトだと使えなかった気がする。マルチドメインで使います。
さくらサーバの管理画面の設定は抜かします。

composer installしたらエラーになりました。

デフォルトではintlがないらしい。

この参考記事のようにするとできるらしいけど、別のサーバ使うことにした。
参考:さくらのレンタルサーバでCakePHP3を使うためにintl extensionを導入する方法

さくらレンタルサーバのSIN SSL利用してると、Facebook APIがエラーになる

エラーは下記です。

恐らくさくらのレンタルサーバのSSL使うと、httpsアクセスだと認識されないことが原因なのではないかと思った。facebookのSDKみたらやはり、$_SERVER[‘HTTPS’]を見てたので、下記のようにしたらできた。

ちなみに、このプログラムはcakePHP2を使っているのですが、twitterやfacebookなどのコールバックURLをRouter::url()を使って動的に取得させていて、これまたhttpsアクセスしてるのにhttpsと勘違いされて、http://***というアドレスにされてしまっていた。これについては、core.phpのConfigure::write(‘App.fullBaseUrl’, ‘http://example.com’);に、httpsアドレスをベタ打ちしたら大丈夫になった。

さくらサーバでhttpsアクセスしてもhttpsアクセスしたことにならない

お客さんがさくらサーバでSSL設定されたのですが、httpsアクセスしてもhttpsアクセスしたことにならない。httpsアクセスすると$_SERVER[‘HTTPS’]がセットされるはずですがない。これがセットされてない場合、httpsのURLにリダイレクトするような設定をしてたのでリダイレクトループになりました。

参考:サクラのレンタルサーバーで共有SSLを使うとHTTPSを認識しない問題

$_SERVER[‘HTTP_X_SAKURA_FORWARDED_FOR’]がセットされてなければhttpsじゃないと判断できるらしい。

下記のような感じでやったらできた。

NginxでBasic認証

Ubuntuです。

Basic認証のパスワードファイルの作成

opensslを使います。下記のhogeは、Basic認証のIDを入れます。hogepasswordがパスワードです。

Nginxの設定

serverブロックの中に下記を追加します。

Let’s EncryptでSSL証明書を無料で作る

Let’s Encryptで無料でSSL証明書を作成します。
certbotというのを使って作ります。

Ubuntu + Nginxの場合は下記になります。
参考:https://certbot.eff.org/#ubuntuxenial-nginx

–standalone だと、nginxを一回とめないといけない。
—-webroot だと、とめなくていいけど、80ポートで登録するサイトにアクセスできる必要があるみたい。まだないサブドメインとかを事前登録したい場合は、standaloneを使えばいいのかな。

登録完了すると、下記ディレクトリに格納される。
/etc/letsencrypt/live/hoge.com/cert.pem
/etc/letsencrypt/live/hoge.com/fullchain.pem
/etc/letsencrypt/live/hoge.com/privkey.pem

nginxの設定では、下記のようにする。

複数のドメインを一気に登録したりすると、cert.pemじゃなくて、fullchain.pem使うみたい。

Xampp windows10 PHP sendmail 設定 (gmailを使う)

php.iniの設定と、sendmail.iniの設定をして、stunnelをインストールして、stunnel.confを設定する。

php.iniの設定

php.iniの場所は、xampp/php/php.ini
[mail function]という箇所を下記のようにする。

sendamil.iniの設定

sendmail.iniの場所は、xampp/sendmail/sendmaill.ini

stunnelのインストール

stunnel: Downloads

stunnel.confの設定

stunnel.confのバックアップをとっておき、中身を下記のようにする。

最後にXamppコントローラでApacheを再起動する。

mac – El CapitanでcakePHP3を使う

Macの状態

  • macは、El Capitan 11.10.5です。
  • すでに、PHP7、MySQL、Nginxが入っています。composerもインストール済みです。
  • Nginxのドキュメントルートは、/usr/local/var/wwwです。

cakephp3のプロジェクトを作成する

ドキュメントルートに移動して、hogeプロジェクトを作成します。

php-fpmが変だったので直した

cakePHP3は、php5.5.9以上が必要で、php7もOKということで、php7をインストールしました。しかしphp-fpmのバージョンを確認すると、以前インストールされていたphp5.3のものでした。

php7のインストールは、 mac – phpを7.0にバージョンアップに記載の方法でやりました。php7のパスは、/usr/local/php5/binです。これに対応するphp-fpmは、/usr/local/php5/sbin/php-fpmです。なので、/usr/local/php5/sbinもパスに加えたらOKになりました。

.bash_profileを開く

下記を最後に追加する

.bash_profileを読み込む

php-fpmを起動

php-fpmのバージョン確認

Nginxの設定をcakephpに合わせて変更する

nginx.confを修正する

Nginxを再起動する

mac El CapitanにNginxをインストール

macは、El Capitan 10.11.5です。

Nginxインストール

インストールできた。

Nginxのバージョン確認

Nginxの設定を確認

下記に設定ファイルがあります。

rootには、htmlと書いてあるだけですが、ドキュメントルートは、/usr/local/var/wwwでした。

NginxでPHPが動くようにする

上記nginx.confの65行目〜71行目付近を下記のようにコメントを外して、編集します。

Nginxを再起動する

RDSからEC2のmysqlに移す

RDSは便利ですが、高かったです。

EC2のMySQLのバックアップ

RDS運用の前はEC2のMySQLで運用していたので、古いですが現状のEC2のMySQLを一応バックアップしておきます。

EC2のMySQLのデータベースを空にする

RDSからEC2のMySQLにインポートする

Nginx・PHP – アップロードファイルの最大サイズの変更

参考:nginxで”client intended to send too large body”が発生した時の対策方法
参考:最大アップロード容量を変更する

Nginxは、/etc/nginx/nginx.confの、下記を変更する。なかったら、http, server, locationコンテキスト内に追加する。

あとは、php.iniの値も確認・修正する。
下記のようになってたので、それぞれ必要な容量に修正する。

Amazon Linux – PostgreSQL・Nginx・FuelPHP


インストール

参考:
Amazon Linux AMIにpostgresqlをインストールする
チュートリアル: Amazon Linux への LAMP ウェブサーバーのインストール

yumをアップデートして、phpとgitとvimとnginx入れた。アパッチとMySQLも入れた。

postgresql入れた。

エラーでた

php56と指定しないといけないっぽい。

これで必要なの入った。

postgreSQLの設定する

postgresユーザにパスワード設定

postgresユーザに切り替える

基本データベース生成とサービス開始

データベース作成する

NginxでPHP使えるようにする

参考:nginxでphpを使う(CentOS6.5)

php-fpmをインストールする

php-fpmの設定をする

下記のwww.confのuserとかgroupがapacheになっているので、nginxに変更します。

NginxでFuelphpが動くようにする

下記、nginx.confを修正していく。

下記箇所を、/usr/share/nginx/hoge/publicとかにする。

参考:http://fuelphp.jp/docs/1.8/installation/instructions.html
下記のように変更する。

nginxとphp-fpmを再起動する

FuelPHPをcloneする

FuelPHPはローカルで作ってるやつをcloneする。

FuelPHPのcomposer installする

phpPgAdminインストール

参考:phpPgAdminのインストール – CentOS6.5(Vagrant)

とりあえず、ローカルで上記サイトに記載のURLから、ダウンロードして、展開して、gitリポジトリに追加して、pullした。常時使える必要はなかったので、nginxのrootを変更してちょっとだけ使った。