このブログを検索

ラベル CA の投稿を表示しています。 すべての投稿を表示
ラベル CA の投稿を表示しています。 すべての投稿を表示

2026/03/13

自作メールサーバからiPhoneでメールが受信できない

dovecot+postfixのメールサーバが2台ある。

iPhoneでメールの送受信ができる。

dkimとかなんとかも設定している。

iPhoneが2台あるので、2台目でも受信できるようにしようとアカウントを設定した。

CA証明書もメールで送りインストールした。

しかし、2台目のiPhoneでだけ受信できない。


CA証明書が違うものか?と思って有効期限やシリアルを見て同じであることを確認した。

サーバで拒否している?fail2banで落としている?


が、firewall-cmdやfail2banで落としているかどうかもパッとわからない。

tcpdumpしてみる。

受信できる方は自宅のwifiにつなぎ、できないほうはwifiを切ってIPが変わるようにする。

それぞれのIPアドレスを確認し(いわゆる確認君の自作版で)、tcpdumpしてみると、

どちらからもサーバへのアクセスがある。

/var/log/maillog をtail -f で見る。

不正アクセスというか、ブルートフォースアタックというか、いたずらなのか、認証失敗アクセスが大量に来ている。

その中に自分のiPhoneのログもあった。

Mar 13 03:16:59 hogehoge dovecot[862]: imap-login: Disconnected: Connection closed: SSL_accept() failed: error:0A000416:SSL routines::ssl/tls alert certificate unknown: SSL alert number 46 (no auth attempts in 0 secs): user=<>, rip=49.xxx.xxx.xxx, lip=xxx.xxx.xxx.xxx, TLS handshaking: SSL_accept() failed: error:0A000416:SSL routines::ssl/tls alert certificate unknown: SSL alert number 46, session=<cBUowtdMuuUxbXwH>


証明書がどうこう書いている。certificate unknown

証明書が不明、信頼できない、ということのようである。


証明書を見るのはクライアントである。クライアントがサーバの証明書を見る。それを信頼するためにサーバ証明書を発行(署名)したCA証明書をインストールしたのだ。

なのに、信頼できないと言っている。


copilotにこのログを投げつけ、いくつか情報を補足すると原因がわかった。

CA証明書はiPhoneにインストールしただけではだめで、

設定→一般→情報→証明書信頼設定 で、「ルート証明書を全面的に信頼」をオンにしなければならない。




2024/11/06

CA構築 2024

ubuntu 
サーバはj***、digital oceanのvps
Ubuntu

opensslのconfigは /etc/ssl/openssl.cnf

/etc/pki/CA に移動する。
ここで全部やる。

openssl.cnfを /etc/pki/CAにコピーする。

openssl.cnfを編集

[ CA_default ]
dir             = .            # Where everything is kept
private_key     = $dir/cakey.pem # The private key

[ req_distinguished_name ]
国とかcityとかのデフォルト値を入れておく


v3_ca
というファイルを作って下記を記載し、署名時に使う
(opnessl.cnfの[v3_ca]セクションに書いたら行けると思ったがだめだったので)
 
basicConstraints = critical, CA:true
keyUsage = critical, cRLSign, keyCertSign
subjectKeyIdentifier=hash


#これをやっておく

touch index.txt
echo 00 > serial

#ca証明書のcsr発行

 openssl req -new -key ./cakey.pem -out ./ca.csr

※openssl.cnfにkeyの場所を書いたつもりだが効かないので指定した
なぜ効かないとわかったかというとパスワードを聞かれたから


#CA証明書のCSRにサイン

openssl ca -in ca.csr -selfsign \
-notext -config openssl.cnf -outdir . \
-extfile v3_ca -out cacert.pem\
-startdate 241101000000Z -enddate 251031235959Z

いつもつけていなかったが、-notextを指定すると読める情報が書かれない(あっても問題ない)

-extfile v3_ca がさっきのCA情報

これもいつもやらないが、-startdate -enddateを明示的に指定。
指定しないと作った時間になって切りが悪いのでこっちの方がいい。

openssl x509 -in cacert.pem -text

中身を確認

 Version: 3 であること

下記があること

 X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign

※この後別のcentos9のサーバでCA証明書を作ったが上記オプションがなくても問題なく使えた。

#iPhoneにCA証明書をインストール

証明書をテキストにコピーし、拡張子.crt (.pemでもいいはず)にして
メールでiPhoneに送る。

証明書をiPhoneにダウンロードして開き、インストールする。
(私はapple watchを使っているので、iphoneとapplewatchのどちらにインストールするかと聞かれた)

※私はiPhoneの言語を英語に設定している

すると、Settings > General > VPN & Device Management の、
DOWNLOADED PROFILE に表示されるのでタップして開くと、Not Verified と表示されている。
中身を見て、「Certificate Authority」がYesになっていること
Versionが3であること
を確認

最初に戻って、右上のInstallをタップ

ここで終わりではない。

General > About > Certificate Trust Settings > ENABLE FULL TRUST FOR ROOT CETIFICATES
で、インストールした証明書を信頼する。