2016-03-24 13 views
7

問題リポジトリ用の証明書認証を利用する

私はcompanysのsonatype nexusサーバーからlibを取得するAndroid Gradleプロジェクトを持っています。ネクサスサーバは証明書認証を使用します。つまり、クライアントには、Nexusサーバに対して認証して認証するプライベート証明書があります。

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

で証明書にネクサスサーバーrespontを与えることなく/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を受信しました:Bad Request

私の最初の解決策は、証明書にosxキーチェーンを使用するようにjvmを構成することでした。同じ方法で、nexusサーバでlibs/artifactsをプッシュして公開する手助けをしました。 エラー:NONE(そのようなファイルやディレクトリは)

それがあることが予想Gradleのように見えるん

/app/gradle.properties

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

これはGradleの同期が失敗した動作しません。パラメータ '-Djavax.net.ssl.keyStore'の 'NONE'。私はいくつかのuperとlower caseのソリューションを試しましたが、すべて失敗しました。

第2のアプローチは、

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

でそれを試してみましたが、サーバーは再び400で応答します。 JVM引数が使用されていないように見えます。

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

答えて

7

Javaプロセスに認証用の証明書がないという問題がありました。

私の最初のアプローチでは、私はとても近づいてきましたが、私は同社のルートCA証明書を追加するのを忘れていました。私の会社のプライベート証明書はルートCAに属しているので、どちらもjavaに提供する必要があります。

ソリューション:

まずGradleのプロセスにあなたの民間企業の証明書を提供しています。

編集ユーザーgradle.propertiesとその後のJavaキーストアにあなたの会社のルートCA証明書をエクスポート

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 

を追加します。

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

これで証明書の認証が正しく機能するはずです。

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

+1

"KeychainStore"は有効なキーストアタイプではありません。この例では、「PKCS12」である必要があります。そうでなければ、すばらしい答えです - ありがとう! – Mark

1

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

update-ca-certificates -f 
関連する問題