問題
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引数が使用されていないようです。
このトピックに関するアイデアや記事はありますか?誰かが私を助けてくれることを願っています。
問題は、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
私の解決策は、ubuntu/debianシステムのca証明書を更新することでした。
update-ca-certificates -f