web-dev-qa-db-ja.com

Gradleはリポジトリに証明書認証を使用します

問題

Android Gradleプロジェクトは、私の会社のsonatypeネクサスサーバーからlibをプルする必要があります。ネクサスサーバーは証明書認証を使用します。つまり、クライアントは、ネクサスサーバー。

問題は、私の証明書(osxキーストアにある)を使用するようにgradleを構成する方法です。

/app/build.gradle

repositories {
   // some other repositorys...
   ...
   maven {
      credentials {
         username = NEXUS_USERNAME
         password = NEXUS_PASSWORD
      }
      url 'https://prefix.server.com/nexus/content/repositories/artifactid'
   }
}

ネクサスサーバーは、証明書を与えずに次のことを行います。

エラー:HEAD ' https://prefix.server.com/nexus/content/repositories/artifactid/de/komoot/Android/kmt-material-showcase/0.0 .1/kmt-material-showcase-0.0.1.pom '。サーバーからステータスコード400を受信しました:不正なリクエスト

私の最初の解決策は、証明書にosxキーチェーンを使用するようにjvmを構成することでした。同じ方法で、Nexusサーバーでlibs/artifactsをプッシュして公開することができました。

/app/gradle.properties

org.gradle.jvmargs=-Djavax.net.ssl.keyStore=NONE -Djavax.net.ssl.keyStoreType=KeychainStore -Djavax.net.ssl.keyStorePassword=-

これは動作しませんグラドル同期に失敗しました:エラー:NONE(そのようなファイルまたはディレクトリはありません)

Gradleは、パラメーター「-Djavax.net.ssl.keyStore」の「NONE」になると予想されているようです。いくつかの大文字と小文字のソリューションを試しましたが、すべて失敗しました。

2番目のアプローチは、

org.gradle.jvmargs=-Djavax.net.ssl.keyStoreType=KeychainStore

しかし、サーバーは再び400で応答します。 JVM引数が使用されていないようです。

このトピックに関するアイデアや記事はありますか?誰かが私を助けてくれることを願っています。

11
Arne Köckeritz

問題は、Javaプロセスに認証用の証明書がなかったことです。

最初のアプローチでは非常に近づきましたが、会社のルートCA証明書を追加するのを忘れました。私の会社のプライベート証明書はルートCAに属しているため、両方をJavaに提供する必要があります。

解決:

最初に、私企業の証明書をgradleプロセスに提供します。

ユーザーgradle.propertiesを編集して追加します

org.gradle.jvmargs=-Djavax.net.ssl.keyStore="/Users/myusername/certificates/my_private_company_cert.p12" -Djavax.net.ssl.keyStoreType=KeychainStore -Djavax.net.ssl.keyStorePassword=changeit

次に、会社のルートCA証明書をJavaキーストアにエクスポートします。

Sudo keytool -import -trustcacerts -alias root -file ./certificates/company_root_ca.crt -keystore $Java_HOME/jre/lib/security/cacerts

これで証明書認証が機能するはずです。

これは、たとえば、独自のAndroid libaryプロジェクトを作成し、それらをアーティファクトサーバーにプッシュするために使用されます。 https://medium.com/Android-news/the-complete-guide- to-creating-an-Android-library-46628b7fc879#.naboz7yng

14
Arne Köckeritz

私の解決策は、ubuntu/debianシステムのca証明書を更新することでした。

update-ca-certificates -f