2019年8月26日月曜日

iOS証明書を更新する

どうも、俺です。

1年ほど前にiOS PUSH通知証明書の更新方法をメモしましたが、今日はiOS証明書の更新方法をメモ。

全体の流れは、


  1. 証明書署名要求を作成
  2. Apple Developer Programで新しい証明書を作成
  3. .p12ファイルを作成
  4. プロビジョニングプロファイルを更新
です。


手順1: 証明書署名要求を作成

キーチェーンアクセス.appを起動し、メニューにある
「キーチェーン」→「証明書アシスタント」→「認証局に証明書を要求...」をクリック
・ユーザーのメールアドレス ... Apple Developer Programのメールアドレス
・通称 ... なんでもOK
・CAのメールアドレス ... 空白
・ディスクに保存 ... チェック
・鍵ペア情報を指定 ... チェック
で「続ける」をクリックし、適切なディレクトリに保存します。


鍵ペア情報は「2048ビット」「RSA」でOK。
保存するファイル名を変更していなければ、対象のディレクトリにCertificateSigningRequest.certSigningRequestというファイルが生成されます。

手順2: Apple Developer Programで証明書を作成

Apple Developer Programにログインし、
メニュー→「Certificates」をクリックし選択。


↑の画像にある「+」ボタンをクリックし新しい証明書作成画面に移ります。

続いて「iOS App Development」を選択。
これは開発用の証明書です。
AdHoc用や本番用の証明書を作る場合は「iOS Distribution (App Store and Ad Hoc)」を選択。


次に、手順1で作成した証明書要求の CertificateSigningRequest.certSigningRequest を選択します。


すると、次の画面で作成された証明書情報が見れますので、右上の「Download」をクリックし保存します。



これで新しい証明書が作成され、PCにも保存されました。
DLした証明書をダブルクリックし、キーチェーンアクセスに登録しておきます。



古い証明書は有効期限まで使えますが、もう新しい証明書を使ってしまってOKです。

手順3: .p12ファイルの作成

個人で開発されてる方はここの手順は不要です。
チーム開発されてる場合などは、.p12ファイルを作成 & 共有して使うと良いです。

まず、キーチェーンアクセスを起動し、登録したての新しい証明書を選択します。


左側にある「▶」をクリックし、「秘密鍵」と書かれた鍵マークのある列を選択します。
そこで右クリックし「" ****** を書き出す..."」をクリックし、適切な名前をつけて.p12ファイルを保存します。
これで.p12ファイルが出来上がります。


手順4: プロビジョニングプロファイルを更新

証明書が新しくなると、プロビジョニングプロファイルを更新する必要があります。
※有効期限が切れると使えなくなるため



既存のプロビジョニングプロファイルを「Edit」から編集し、新しい証明書を選択して作り直します。





以上でぇぇぇえす。

2019年3月22日金曜日

DKIM設定してさらにメール到達率を上げる

どうも、俺です。

男もすなるDKIMといふものを女もししてみむとてするなり。

環境はCentOS7.2 + Postfix 2.10.1 です。

OpenDKIMのインストール

yumで入れます。
# yum install opendkim

鍵やら何やらを作るので、専用のディレクトリを作成します。
# mkdir /etc/opendkim/keys/MYDOMAIN.com(ドメイン名)

で、鍵やら何やらを作ります。
# opendkim-genkey -D /etc/opendkim/keys/MYDOMAIN.com/ -b 1024 -d MYDOMAIN.com -s koexuka

-Dは生成ディレクトリ
-bは1024や2048など鍵のビット長
-dはドメイン名
-sはセクレタ名。鍵を識別できる分かりやすい名前が良いです。サイト名や作成日付など。

これでファイルが2つできてるはずです。
# ls -l /etc/opendkim/keys/MYDOMAIN.com

-rw------- 1 opendkim opendkim 887  3月 22 15:11 koexuka.private
-rw------- 1 opendkim opendkim 317  3月 22 15:11 koexuka.txt


設定ファイルの更新

KeyTableファイルを編集します。
# vim /etc/opendkim/KeyTable

koexuka._domainkey.MYDOMAIN.com MYDOMAIN.com:koexuka:/etc/opendkim/keys/MYDOMAIN.com/koexuka.private

SigningTableファイルを編集します。
# vim /etc/opendkim/SigningTable

*@MYDOMAIN.com koexuka._domainkey.MYDOMAIN.com

TrustedHostファイルを編集します。
# vim /etc/opendkim/TrustedHosts

127.0.0.1
::1
#host.example.com
#192.168.1.0/24

CIDR形式で記述できます。
上記IPにマッチした場合だけ署名されます。

opendkim.confを編集します。
# vim /etc/opendkim.conf

Mode sv
#KeyFile        /etc/opendkim/keys/default.private #コメントアウトする
KeyTable       /etc/opendkim/KeyTable
SigningTable   refile:/etc/opendkim/SigningTable
ExternalIgnoreList     refile:/etc/opendkim/TrustedHosts
InternalHosts  refile:/etc/opendkim/TrustedHosts

/etc/sysconfig/opendkimファイルを編集します。
# vim /etc/sysconfig/opendkim

# これを追加
AUTOCREATE_DKIM_KEYS=NO

main.cfを編集します。
#vim /etc/postfix/main.cf

# これを追加
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

Postfixを再起動します。
# systemctl restart postfix


ドメイン情報を更新

利用しているDNSサーバーでTXTゾーンにDKIMの内容を反映させます。
まず、公開鍵の内容を確認します。

# cat /etc/opendkim/keys/MYDOMAIN.com/koexuka.txt

koexuka._domainkey     IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNAD(〜略〜)//ciSVp9o(〜略〜)ZBCwIDAQAB" )  ; ----- DKIM key koexuka for MYDOMAIN.com

DNS管理画面で以下を追加します。
Aレコード koexuka._domainkey.MYDOMAIN.com 123.45.67.89(IPアドレス)
TXTレコード koexuka._domainkey p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNAD....ZBCwIDAQAB; v=DKIM1; k=rsa;


あとは実際にメールを送信してみて、受信側でメールヘッダに
dkim=pass
とあればOKです!

以上でぇぇぇぇえぇ〜す。

2019年3月15日金曜日

PostgreSQL10のでパーティショニング

どうも、俺です。

PostgreSQLがv10になってからパーティショニングの設定が超ラクになりました。
これまでは、CREATE TABLE するときにトリガーや関数を逐一設定する必要がありましたが、
PostgreSQL 10からはCREATE TABLE文の中だけでパーティショニングの設定が可能です。

簡単なサンプルで見てみます。

-- 元となる親テーブルの作成
CREATE TABLE test_table (
  id SERIAL,
  user_id INTEGER NOT NULL,
  name VARCHAR(512) NOT NULL,
  created_at TIMESTAMP NOT NULL
)
-- user_idをキーにパーティションする
PARTITION BY LIST (user_id);

-- user_idが1の場合はtest_table_1へ
CREATE TABLE test_table_1 PARTITION OF test_table FOR VALUES IN (1);
-- user_idが2の場合はtest_table_2へ
CREATE TABLE test_table_2 PARTITION OF test_table FOR VALUES IN (2);
-- user_idが3と4の場合はtest_table_3へ
CREATE TABLE test_table_3 PARTITION OF test_table FOR VALUES IN (3,4);
-- user_idが5と6と7の場合はtest_table_4へ
CREATE TABLE test_table_4 PARTITION OF test_table FOR VALUES IN (5,6,7);
.
.
.

これだけでOKです。


ただ、このパーティショニングの方法だと、user_idが増えれば増えるほどパーティショニング子テーブルをいちいち CREATE TABLE する必要があるので、
子テーブルを予め10個作成しておき、user_idを10で割った余りを元にパーティショニングするように変更してみます。

CREATE TABLE test_table (
  id SERIAL,
  user_id INTEGER NOT NULL,
  name VARCHAR(512) NOT NULL,
  created_at TIMESTAMP NOT NULL
)
-- user_idを10で割った余りをキーにパーティションする
PARTITION BY LIST ((user_id%10));

CREATE TABLE test_table_1 PARTITION OF test_table FOR VALUES IN (1);
CREATE TABLE test_table_2 PARTITION OF test_table FOR VALUES IN (2);
CREATE TABLE test_table_3 PARTITION OF test_table FOR VALUES IN (3);
CREATE TABLE test_table_4 PARTITION OF test_table FOR VALUES IN (4);
CREATE TABLE test_table_5 PARTITION OF test_table FOR VALUES IN (5);
CREATE TABLE test_table_6 PARTITION OF test_table FOR VALUES IN (6);
CREATE TABLE test_table_7 PARTITION OF test_table FOR VALUES IN (7);
CREATE TABLE test_table_8 PARTITION OF test_table FOR VALUES IN (8);
CREATE TABLE test_table_9 PARTITION OF test_table FOR VALUES IN (9);
CREATE TABLE test_table_0 PARTITION OF test_table FOR VALUES IN (0);



以上でぇぇぇえ〜す。

2018年7月25日水曜日

iOS PUSH通知証明書を更新する

どうも、俺です。

 1年毎にやってくるPUSH通知証明書の更新ですが、毎回手順を調べるのも面倒なのでメモ。
 全体の流れは、

  1. 証明書署名要求を作成
  2. Apple Developer Programで証明書を作成
  3. .p12ファイルを作成
  4. .pemファイルを作成
です。

【手順1: 証明書署名要求を作成】

キーチェーンアクセス.appを起動し、メニューの
「キーチェーン」→「証明書アシスタント」→「認証局に証明書を要求...」をクリック。

・ユーザーのメールアドレスを入力...適当なメアド
・通称 ... 何でもOK
・CAのメールアドレス ... 空白
・ディスクに保存 ... チェック
・鍵ペア情報を指定 ... チェックしない
で、「続ける」をクリックし、保存先を決めてファイルを保存。

CertificateSigningRequest.certSigningRequest というファイルが生成されます。


【手順2: Apple Developer Programで証明書を作成】

Apple Developer Programにログイン。
メニューにある「Certificates」→「All」をクリック。


画面右上にある「+」ボタンをクリックし証明書作成を開始する。

次の画面で、「Production」内にある「Apple Push Notification service SSL (Sandbox & Production)」にチェックを入れ「Continue」をクリック。
※開発版の場合は「Develop」内にある「Apple Push Notification service SSL (Sandbox)」にチェックを入れる。



次の画面で、PUSH通知証明書を更新するアプリのApp IDを選択し「Continue」。



次の画面はそのまま「Continue」をクリック。



次の画面で、先ほど生成した CertificateSigningRequest.certSigningRequest を選択し「Continue」。



すると、証明書が作成されるので「Download」をクリックし保存する。


【手順3: .p12ファイルを作成】

手順2で作成した証明書ファイルをダブルクリックし、キーチェーンアクセスに登録します。

次にキーチェーンアクセス上で、登録した証明書を「右クリック」→「"Apple Push Services: XXX.XXX.XXX"を書き出す...」をクリックして適当なディレクトリに保存します。
パスワードが必要な場合は設定して下さい。次の手順4で利用します。

すると、証明書.p12のようなファイル名でファイルが書き出されます。
ファイル名は半角英数で aps_prod.p12 のように変えておいたほうが良いです。



【手順4: .pemファイルを作成】

多くのPUSH通知証明書更新について書かれたサイトは、
手順3で作成した「.p12ファイルをサーバーにあげて使って下さい」、とあるのですが、
一応、.pemファイルを作ってそれをサーバーにUPする手順も書いておきます。
(...というか、その方法でしかやった事がない)

ターミナルを開き、手順3で作成した.p12ファイルがあるディレクトリまで移動し、
以下のコマンドを叩きます。

$ openssl pkcs -in aps_prod.p12 -out aps_prod.pem -nodes

これで、.pemファイルが生成されます。
※手順3でパスワードを指定していた場合は、パスワードを問われます。



手順は以上。
作られたaps_prod.pemをサーバーにアップしてPUSH通知が届くかテストして作業完了です!


以上でぇぇぇぇぇぇぇす。

2018年7月11日水曜日

SQLiteのコマンドラインを見やすくしちゃう

どうも、俺です。

SQLiteのコマンドラインって見にくいですよね。
そこで見やすくする方法についてメモ。


$ vim ~/.sqliterc

.header on
.mode column

これでOKです。


または、SQLiteのコマンドライン内で直接、
$ sqlite3 hoge.sqlite

sqlite> .header on
sqlite> .mode column

これでもOKです。


以上でぇぇぇす。