[OpenSSL] pem ファイルとは?SSL証明書の中身を確認する方法

iOS開発でのサーバ側 push通知設定や、WebサーバのSSL証明書設定に使われる .pem ファイルの中身を確認する時に便利なコマンドをまとめました。

  1. pem ファイルとは?
  2. openssl コマンドのインストール方法
  3. pem ファイルに含まれる証明書の確認方法
  4. 秘密鍵の内容を表示する
  5. pemファイルの作り方
  6. (おまけ)csrの情報を出力する

続きを読む [OpenSSL] pem ファイルとは?SSL証明書の中身を確認する方法

[iOS][OpenSSL] .p12キーストアファイル証明書の中身を確認する

iOS開発で頻繁にお世話になる .p12 ファイル(秘密鍵+証明書のセット)の情報を確認する方法です。
SHA1フィンガープリント、有効期限、チームID,名前などがコマンドラインから簡単に確認できます。

続きを読む [iOS][OpenSSL] .p12キーストアファイル証明書の中身を確認する

証明書と秘密鍵からp12ファイルを作る

証明書と鍵ファイルからp12ファイル(pkcs12)を作る手順のメモ。
証明書(cer)をPEMに変換する、鍵(PEM private key)と結合してp12にする、という2段構え。

参考: http://spiratesta.hatenablog.com/entry/20120215/1329280918

1.公開用証明書をPEM証明書形式に変換する

$ openssl x509 -in distribution_identity.cer -inform DER -out distribution_identity.pem -outform PEM

2.PEM証明書形式をP12証明書形式に変換する

$ openssl pkcs12 -export -inkey mykey.key -in distribution_identity.pem -out distribution_identity.p12

パスワードを聞かれるので、適宜入力する(パスワード空欄だとキーチェーン取り込みできない)

3.P12証明書を開いてキーチェーンに取り込む(取り込み時に上記パスワードを入力する)

なぜ必要だったか

MacBook Pro が壊れたので修理して、クリーンインストールし直したんですが、
そのときにとあるプロジェクトのApp Storeのリリース用(Distribution)秘密鍵の移行を忘れて喪失してしまったため、
なんとかサルベージできないか、と試行錯誤するのに使いました。

Circle CIにp12の鍵が上がっていたので、CIを回してSSHで入り、
鍵ファイル(/var/folders/jm/ほげほげ/T/cert.abcdef)をcatして取り出し .key として保存、
Apple Developerサイトの Certificates,IDs & Profiles から証明書ダウンロード、
あとは手順通りの結合で事なきを得ました。バックアップは大事ですね。。

こんな記事もあります

.p12キーストアファイル証明書の中身を確認する

Swift2でリリースビルドの時にログ表示しないようにする

Xcode7(Swift2) でデバッグビルドの時だけデバッグ出力して、プロダクションビルドの時はセキュリティのためデバッグログを削る方法のメモ。

このコードにより、print, debugPrintln, NSLogの出力を制御することができます。

事前準備

XcodeプロジェクトのBuild Settings → Swift Compiler → Other Swift Flags の Debug に「-DDEBUG」を追加して下さい。

コード

AppDelegate.swift の冒頭に以下のグローバル関数を追加します。

他のファイルのほうがわかりやすければAppDelegate以外でも大丈夫です。

// リリースビルドでprint, debugPrintを無効化
func print(object: Any) {
  #if DEBUG
    Swift.print(object, terminator: "")
  #endif
}

func debugPrint(object: Any) {
  #if DEBUG
    Swift.debugPrint(object, terminator: "")
  #endif
}

// リリースビルドでNSLog無効化
func NSLog(message:String){
  #if DEBUG
    Foundation.NSLog(message)
  #endif
}
func NSLog(format:String, _ args:CVarArgType...){
  #if DEBUG
    Foundation.NSLog(String(format: format, arguments: args))
  #endif

}

この記事を書いた理由

print, debugPrintは出てきますが、SwiftでNSLogを非表示にする方法がどうしても出てこなかったので記事にしました。

Swift2から廃止されたprintln, debugPrintlnはここに書いていませんが、print, debugPrint と同様の方法で対応可能です。

ググると NSLogを消す方法として、プレフィクスヘッダファイル(.pchファイル)に #define NSLog を方法が出てきますが、こちらはObjective Cにしか効果がないようなので注意。

おまけ

代替案としては、より細かいログレベル制御が可能なXCGLoggerを使うのも手です。

AppDelegateで

import XCGLogger

let log: XCGLogger = {
  let log = XCGLogger.defaultInstance()
  #if DEBUG
    log.setup(.Debug, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: nil)
    #else
    log.setup(.Severe, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: nil)
  #endif
  let dateFormatter = NSDateFormatter()
  dateFormatter.dateFormat = "MM/dd/yyyy hh:mma"
  dateFormatter.locale = NSLocale.currentLocale()
  log.dateFormatter = dateFormatter
  
  return log
  }()

としておくと、

log.debug("Debugレベルのログです")
log.info("infoレベルのログです")

のようにログレベルごとのログ出力ができるようになります。

[iOS][Swift] Swiftっぽくレコードをソートをする

NSSortDescriptorはObjective-Cでも使えるレコードの配列をレコードキーでソートするのに便利な方法ですが、Arrayのsort()メソッドやsorted()メソッドを使うとよりSwiftっぽくクロージャでソートすることができます。

変更前:

let records = NSMutableArray()
let sortDescriptor = NSSortDescriptor(key: "fileSize", ascending: true)
records.sortedArrayUsingDescriptors([sortDescriptor])

// レコード投入
let record1 = NSMutableDictionary()
record1["filePath"] = "/path/to/file1"
record1["fileSize"] = 1000
records.addObject(record1)

let record2 = NSMutableDictionary()
record2["filePath"] = "/path/to/file2"
record2["fileSize"] = 100
records.addObject(record2)

let record3 = NSMutableDictionary()
record3["filePath"] = "/path/to/file3"
record3["fileSize"] = 500
records.addObject(record3)

println(records)

続きを読む [iOS][Swift] Swiftっぽくレコードをソートをする

[iOS][Objective-C] @property の基本まとめ

Objective-C でなんとなく知っているけど実はよく知らないプロパティ(@property)まわりの
基本的な仕様をまとめました。

Xcode6.1が正式リリースされてSwiftのβがとれたし、「Swift使うからいらないよ」なんて言わないで、iOS開発のお供にどうぞ。

続きを読む [iOS][Objective-C] @property の基本まとめ

[iOS] UIButtonのテキスト設定時のアニメーションを止める

iOS7以降(iOS7.1, iOS8も)、UIButtonにsetTitleすると勝手にボタンがアニメーションをしてしまうようです。
たとえばコードからデフォルト値設定したいだけなのに[UIButton setTitle:]したら、チラッとUIビルダーの設定値が出ちゃってなんだかあれだったので、止める方法をメモしておきます。

続きを読む [iOS] UIButtonのテキスト設定時のアニメーションを止める

【iOS】音楽を止めずに効果音を同時に再生するには

iOSでは音を再生する時の選択肢として MediaPlayer Farmework と AVFoundation Frameworkの2種類があります。

今回はこれらの組み合わせで多重再生ができないかどうかを調べてみました。

続きを読む 【iOS】音楽を止めずに効果音を同時に再生するには

iPhoneで電話番号リンク問題の対処方法まとめ

iPhone の Safariは連続する数字が勝手に電話番号のリンクになってしまいます。
電話番号や郵便番号(123-4567)のようなハイフン区切りだけでなく、
小数点(123.4567)のようにドット区切りの数値までも電話番号リンクになります。

これでは困るので対処方法をまとめました。
(iPhone 4, iPhone 4sで動作確認)

目次:

  1. 1.iPhone 版 Safari用の対策
  2. 2.Safari以外のアプリ用の対策
  3. 3.修正できないアプリ用の対策

続きを読む iPhoneで電話番号リンク問題の対処方法まとめ