14
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Openssl 1.1.0でもファイルを復号化する

Posted at

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

CircleCIへのリンク

調査してみた

しばらく放置していたので、暗号化のキーを変えて忘れてた、とかファイルを差し替えてたけどブランチマージしてなかった、など考えていましたが、ローカルでは復号化できました。

で、調べていくうちに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

そうしたところ、復号化が成功し、ビルドにも成功しました。

CircieCIへのリンク

なにが起こってたか

stackoverflowに書いてあるままですが、OpenSSL1.1以降でデフォルトのdigest?の方式がmd5 -> sha256に変わったらしいです。
そのため、sha256でチェック?しようとしててエラーになってたっぽいですね。

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?