Skip to content

GradleのHTTPリポジトリで発生する「insecure protocols」エラーの解決方法

問題の概要

Android StudioをArctic Foxにアップデートした後、Gradleビルドで以下のエラーが発生することがあります:

A problem occurred configuring root project 'so10'.
> Could not resolve all dependencies for configuration ':classpath'.
   > Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository 
'maven3(http://oss.sonatype.org/content/repositories/snapshots)' to redirect to a secure protocol (like HTTPS) or allow insecure protocols.

このエラーは、Gradle 7.0以降でセキュリティが強化され、HTTPプロトコルを使用したリポジトリ接続がデフォルトでブロックされるようになったために発生します。

エラーの原因

Gradle 7.0以降、セキュリティ向上のため以下の変更が行われました:

  • HTTPプロトコルを使用したMavenリモートリポジトリへの接続が禁止
  • HTTPを使用したスクリプトプラグインの適用が禁止
  • 明示的な許可なしの安全でないプロトコルの使用がサポートされなくなった

問題の根本原因は、ビルドスクリプト内でHTTPプロトコルを使用しているリポジトリ宣言にあります:

gradle
maven { url 'http://oss.sonatype.org/content/repositories/snapshots' }

解決方法

方法1: HTTPSへの移行(推奨)

最も安全で推奨される解決策は、HTTPをHTTPSに置き換えることです:

gradle
repositories {
    maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
    // 他のリポジトリ...
}

TIP

多くのリポジトリは既にHTTPSをサポートしています。単にhttp://https://に変更するだけで解決できる場合があります。

方法2: allowInsecureProtocolの明示的許可

どうしてもHTTPを使用する必要がある場合、明示的に許可を設定できます:

Groovy DSLの場合:

gradle
repositories {
    maven {
        url "http://oss.sonatype.org/content/repositories/snapshots"
        allowInsecureProtocol = true
    }
    // 他のリポジトリ...
}

Kotlin DSLの場合:

kotlin
repositories {
    maven {
        url = uri("http://oss.sonatype.org/content/repositories/snapshots")
        isAllowInsecureProtocol = true
    }
    // 他のリポジトリ...
}

方法3: setAllowInsecureProtocolメソッドの使用

場合によっては、プロパティ割り当てではなくメソッド呼び出しが必要なことがあります:

gradle
maven { 
    url "http://myinsecure/repository..."
    setAllowInsecureProtocol(true)
}

方法4: スクリプトプラグインでのHTTP使用

HTTPを使用したスクリプトプラグイン適用時にも同様のエラーが発生します:

gradle
// エラーが発生するコード
apply from: "http://mycompany.com/buildscript.gradle"

// 修正後のコード
apply from: resources.text.fromInsecureUri("http://mycompany.com/buildscript.gradle")

よくある質問

Q: すべてのHTTPリポジトリを修正する必要がありますか? A: はい、ビルドスクリプト内でHTTPを使用しているすべてのリポジトリ宣言を修正する必要があります。

Q: 複数のHTTPリポジトリがある場合どうすればよいですか? A: 各HTTPリポジトリに対して個別にallowInsecureProtocol = trueを設定する必要があります。

Q: この変更はセキュリティリスクになりますか? A: はい、HTTP通信は傍受や改ざんのリスクがあるため、HTTPSへの移行が強く推奨されます。

ベストプラクティス

  1. HTTPSの優先: 可能な限りHTTPSリポジトリを使用してください
  2. リポジトリの整理: 使用していない古いリポジトリを削除する良い機会です
  3. 定期的な更新: 依存関係とビルドスクリプトを定期的に見直してください

WARNING

セキュリティ上の理由から、allowInsecureProtocol = trueの使用は最終手段としてのみ使用し、可能な限り早くHTTPSへの移行を計画してください。

この変更はGradleのセキュリティを向上させるための重要なステップです。適切に対応することで、より安全な開発環境を維持できます。