pemって言ったら改行も仕様に含むんだよもん

冗談じゃねぇ、と思ったけどPEMはBASE64を使っていてBASE64はMIMEの仕様の一部で、とたどっていった結果、一行あたりの制約がPEMの仕様に漏れでてくる、ということのようだ。

どうしてそんなことになったかというと、OpenSSLで鍵を読み込んでいるときに、ファイル経由でpemを読んだら問題なかったのに、それをメモリ上にのっけてやってみたらだめだったという事件の流れ。データの違いは改行の違いだけで「この改行って意味があるの!?」とかびびった。

具体的には、PEM_read_bio_PrivateKey() が "bad base64 decode" とか言い出した。そんなわけあるんかいな、と思ったら、あったのだ。

メモリ上にマッピングするときに「改行なんて要らないよね」とか言った自分が悪い。いや、しかし……

PEMというのは

-----BEGIN CERTIFICATE-----
MIICnjCCAYYCCQCvgY9YjPLo2DANBgkqhkiG9w0BAQUFADARMQ8wDQYDVQQDEwZ1
YnVudHUwHhcNMTIxMDAzMDkyOTM1WhcNMjIxMDAxMDkyOTM1WjARMQ8wDQYDVQQD
EwZ1YnVudHUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8lP+hcVM3
...
Qjyuxx//vDtL53k92bKb2orQkL/3u/cF4ynwy6p646UkEyrQAtbUS1O/F91ZG6k9
GigCBfK8xKa5yMJ7vQQk/vmkrI+pfqc0G4uKV/lvCSmPkXqjxgA/6OvRStazr9Jt
LA0gcsiaR0HwBMYe4ESZb3vzKyQKQZwr4SbfLQWPr8DA09kC3nxBo2hAhLYWptlz
c9u9i7DWOPMNDxDQvXl+ibG/jqSumEONN+493z5uj/awqSt9lUyPVU7Ngn54FeVN
1iU=
-----END CERTIFICATE-----

というあれ。この改行に意味があったんだよ(ナンダッテー) という話。知ってるか。

(ちなみに、上記のものはUbuntuの中でmod_sslがデフォルトで使っているサーバ証明書)

#でも、Javaやってるときに文句言われたこと、ないんだよなぁ

このブログの人気の投稿

WiiUのコントローラが通信不良に陥った話

LibreOfficeで表紙、目次、本体でフッターのページ番号のスタイルを変える

技術書典2 あ-03 『もわねっとのPythonの本』