はじめに
みなさんはサーバ証明書使っているでしょうか?
使ってない人はこのサイトを見ることはないでしょう。
iOS アプリでサーバ証明書を見る方法が無いような気がするので作りました。
アプリの紹介
できるだけシンプルな作りにしました。
サーバ証明書を確認したサイトのホスト名を入力、もしくは URL のペーストをします。
ナビバーの虫眼鏡ボタンをタップすることでサーバ証明書を取得し、完了したら遷移されます。
階層ごとに項目が表示され、タップすると証明書ごとの情報が表示されます。
現状パース処理に対応しているものが少ないですが、他の項目にも対応できればと思ってます。
また、入力するのは面倒だし、ブラウザからすぐに確認したいので数タップで確認ができるようにしたいです。
ShareExtension を実装しました。 Safari 等 URL を共有できるアプリから共有シートを表示し CertsCheck
を見つけてください。
タップするとアプリが開き、ホスト名が入力された状態になります。あとは同じように虫眼鏡ボタンをタップすることで同様に確認をすることができます。
本当は Safari Extensions とかでできたら面白いんだろうなと思ったんですが Web がわからなくて一旦諦めました。
モチベーション
以前は、 Google Chrome でサーバ証明書の内容を確認できていましたが、現在はできなくなっています。なぜでしょうか...
ちょっと前に以下のような話が話題になったので
ソースコード
例のごとく、ソースコードはオープンソースになっています。
Star ください!
5日で作ったので手荒な部分があるかと思いますがよろしくお願いいたします(なにに)
大変だったこと
Apple の Security フレームワークが iOS で提供している API が少なすぎて取得したい情報が取得できないなどで OpenSSL を使うことになりました。
macOS では SecCertificateCopyValues(_:_:_:)
*1 という関数が用意されており、基本的な情報はこれから取得することができるようです。
最後に
今現在、 App Store の 6.5 インチ 5.5 インチのデバイスの表示ではスクリーンショットの順番が反転してしまっていて「なんでこうなったんや...」とちょっと悔しい思いをしているのですが次回のアップデートではちゃんと確認します。
今後は iPad 対応もします。使ってくれる人がいるか知らんけど。
個人的に DER ファイルは単体で SecTrustCreateWithCertificates(_:_:_:)
*2 に渡してもだめで階層すべてを取得しないと SecTrust
は生成されないということを発見できて面白かったです。*3
*1:https://developer.apple.com/documentation/security/1396051-seccertificatecopyvalues
*2:https://developer.apple.com/documentation/security/1401555-sectrustcreatewithcertificates
*3:テストコード: https://github.com/nnsnodnb/ssl-certificates-check-ios/blob/main/SSLCertificateCheckPackage/Tests/SearchFeatureTests/Entities/TestX509.swift