2017-09-13 / @syui

gpg

gitlab-gpg

いつの間にかGitLabでGPGの検証が来ていましたので設定してみましたが、色々とハマりどころ満載でした。(あくまで個人的事情によりですが)

https://docs.gitlab.com/ee/user/project/gpg_signed_commits/

まずGitHubとGitLabでGPGの検証方法がだいぶ異なっているので再設定する羽目になりました。共通するキーを使えなかった。その時のメモ。

私は、基本的には匿名のメールアドレスで設定していました。具体的には[email protected]のような形のものです。これはGitHubのドキュメントにも書かれていますが、ユーザーのプライバシーを保障するため、GitHubではそういったものを登録できます。

ですが、GitLabでは、それをAddしてProfileで設定してもPrimary emailにはできません。なぜならそれを登録するには送信されたURLを開く必要があるからです。これによって認証を行い登録が完了するシステムです。匿名メールアドレスでは送信されてもそれを受信することはできませんので、やはりProfile欄にPrimaryとして設定することは難しいのです。なお、アクセストークンなどを使ってこれを回避、迂回する方法があるかもしれませんが、調べていません。

さて、当該GPGに設定されている匿名メールがPrimary emailにできないと検証に失敗してしまうのがGitLabの挙動であるということですが、これはセキュリティ的に正しいことなのですが、しかし、これによって私がGitHubで使っていた手法が使えなくなってしまいました。

次の問題はGitLabは一度検証されたキーはVerifiedのまま維持されるようですが、GitHubではGPGのPublic Keyを設定から削除するとUnverifiedになるらしいです。このあたりの実際の挙動は確認していませんが、GitLabの説明を読む限りでは、GitLabの挙動のほうが正しいと私は思います。この挙動の違いもGPGを管理する上で面倒を引き起こします。

その他、GitLabではコミットに使ったメールアドレスとGPGのメールアドレスが不一致になってもVerifiedのままでしたが、GitHubでは不一致でUnverifiedになりました。

この辺りの挙動がだいぶGitHubとLab間で違っているので色々と面倒でした。

できれば匿名アドレスを使いたいのですが、GitLabでGPGをVerifiedにするにはそれは不可能で、なおかつ.gitconfigに設定したemailとGPGのメールアドレスが不一致を見ると今度はGitHubでUnverifiedになってしまいます。

これは何が問題なのかというと以下のようにできないのが問題なのです。

Host Rep GPG Verified
GitHub 匿名 匿名 Yes
GitHub 匿名 実名 No
GitLab 匿名 匿名 No
GitLab 匿名 実名 Yes

全部実名で行う場合はどちらもYes.ですが、匿名で行う場合、別々のキーを用意するか、または実名キーを使用するかで面倒が生じます。私は、できれば同一のキーを使いたいと考えていますが、その場合はやはり実名アドレスを使うしかないでしょう。反対にキーを別々にしたとしても、一つは実名アドレスを使用するしか無く、この点において匿名を使用する意義が低下します。キーを調べれば一方に実名アドレスが使われている事がわかるからです。

また、もしキーを別々にしたとしても、新しい問題が発生します。それはgit commitを行う場合、つまり、GitHubでVerifiedを維持する方向でコミットを行うにはGitHubのリポジトリでわざわざgit config user.emailする必要があるのです。これは、.gitconfig [email]匿名の場合の話です。

この辺り、非常に面倒くさくなっているのです。

ということで、もはやGitHubとLab間でGPG認証を行う場合、匿名アドレスを使用するメリットが失われました。できれば匿名アドレスを使い続けたかったのですが、実名アドレスでキーを発行することにしました。本来なら秘匿アドレスで行うものではないのですが、しかし、そういったやり方ができないというか、やろうとするとかなり面倒なことになるので、少し残念です。