CircleCIでプライベートなファイルを暗号化してレポジトリ管理する - Qiita を参考に、GitHubに暗号化したファイルを置いておいて、CircleCIでのビルドに利用していました。
今回、あるAndroidアプリをCircleCI 1.0から2.0に変更するにあたって詰まったのでメモ。
最初に結論
1.1より古いバージョンで暗号化したファイルを復号化するときは、 -md md5
をつける必要があるっぽい。
(ホントは、最新バージョンで暗号化しなおした方がいいはずですが。。)
何をしようとしたか
CircleCI 2.0にするにあたって、Language Guide: Android - CircleCIを参考に、CircleCI側が用意しているDockerを利用しました。
そして、今までと同じように、暗号化しておいた google-services.json
をCircleCI上で復号化させようとしました。
何が起こったか
#!/bin/bash -eo pipefail
openssl aes-256-cbc -k $DECRYPT_KEY -d -in app/encrypted_google-services.json -out app/google-services.json
bad decrypt
140487411111168:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:../crypto/evp/evp_enc.c:535:
Exited with code 1
調査してみた
しばらく放置していたので、暗号化のキーを変えて忘れてた、とかファイルを差し替えてたけどブランチマージしてなかった、など考えていましたが、ローカルでは復号化できました。
で、調べていくうちにOpenSSLのバージョンが違うのでは?と思い至り、出力させてみると1.1.0fでした。
(CircieCIへのリンク)
成功しているmasterブランチでも出力させてみると、1.0.1fでした。
(CircieCIへのリンク)
マイナーバージョンが違っていました。
そこでstackoverflowを探してみると、 https://stackoverflow.com/a/39641378 の回答があり、それを実行してみました。
対応してみた
コマンド末尾に -md md5
を追加し、下記のようにしました。
openssl aes-256-cbc -k $DECRYPT_KEY -d -in app/encrypted_google-services.json -out app/google-services.json -md md5
そうしたところ、復号化が成功し、ビルドにも成功しました。
なにが起こってたか
stackoverflowに書いてあるままですが、OpenSSL1.1以降でデフォルトのdigest?の方式がmd5 -> sha256に変わったらしいです。
そのため、sha256でチェック?しようとしててエラーになってたっぽいですね。