ライセンス管理にlicense3j
というJavaライブラリを使用しています。ライブラリは非対称暗号化を使用し、Bouncycastleに依存しています。 gpg
コマンドを使用してライセンスファイルを作成し、公開鍵を使用してソフトウェア内のライセンスを確認します。これまでのところすべてがうまくいきました。しかし、生成された1,000個のライセンスでは、実際には有効です(約5/1000)が、正しく検証できない部分があります。この場合にはどうなりPGPOnePassSignature.verifyを呼び出すときに署名の長さが正しくない
:基本的な暗号の知識を持つ、私に
org.bouncycastle.openpgp.PGPRuntimeOperationException: unable to verify signature: Signature length not correct: got 511 but was expecting 512
音ではなく曖昧:org.bouncycastle.openpgp.PGPOnePassSignature.verify(PGPSignature)
ライセンスがcom.verhas.licensor.License.setLicenseEncoded(InputStream)
で検証する場合は、次の例外がスローされます。グーグルで過ごす時間は、「先導するゼロ」について何かがあることを私に告げた。したがって、与えられた例では、明らかに先行ゼロがどこかで取り除かれ(?)、比較するシグネチャデータの長さが一致しません。意味をなさない
ここでは問題がどこにあるのかわかりません。ライセンスファイルのの作成中ですか?基本的には、次のようにしています:
gpg --armor --local-user=name.of.software --sign
ライセンスファイルは私たちに与えられます。
またはエラーが検証中に起こるのでしょうか?先行ゼロ問題に正しく対処するためにBouncycastle構成を変更する必要がありますか?それらのFAQはいくつかのヒントを示していますが、License3j
sourceは決してCipher
インスタンスを使用しないため、これを指定されたAPIに統合する方法が完全に失われています。
私はこれが明らかにあまりよく知られていないライブラリでは非常に特別な問題であると認識しています。したがって、私は少しのフィードバックや入力を感謝します。それは、はBouncyCastleは常にデータ間違って作成しただけで1.6後のJavaのバージョンで遭遇はBouncyCastleのバグは、ですが、Javaは、データ中1.7以来、それは検証中に受け入れるより厳密になったよう
マグヌスさん、本当に問題の理解に役立ってくれてありがとう!私は、管理しやすい努力でこの問題を解決する方法を提案していますか? BCのソースを踏んでも、私がフックできるポイントはありません。私が使用できる選択肢はありますか? – qqilihq
残念ながら、バウンシーキャスルで修正するのは簡単ではないようですが、問題追跡ツールでバグを起こすことはできますが、どれだけ成功するかはわかりません。それぞれのライセンスを検証し、それが失敗した場合に再生成することができます。 – Magnus
実際にはライセンスを再生成するという考えもありましたが、ライセンスが生成されるサーバーはJava環境では実行されていません。ライセンスを確認するためだけにJREをセットアップするのは巨大なピタだろう。私はそれについて紀元前に問題を提起しようとします。もう1つの質問:BCの横に暗号ライブラリが追加されているのか、GPGシグネチャの検証もJava APIのクラスで実行できるのでしょうか?結局のところ、存在する。 'java.security.Signature'クラスです。検証手順はあまり複雑すぎるとは思われないので、その機能を書き直すことも考えています。 – qqilihq