问题
我有一个Android Gradle项目,该项目应该从我公司的sonatype nexus服务器中提取一个lib。Nexus服务器使用证书身份验证。这意味着客户端具有一个私有证书,该证书可对联系服务器进行身份验证和授权。
问题是如何配置gradle以使用我的证书(位于osx密钥库中)。
/app/build.gradle
repositories {
// some other repositorys...
...
maven {
credentials {
username = NEXUS_USERNAME
password = NEXUS_PASSWORD
}
url 'https://prefix.server.com/nexus/content/repositories/artifactid'
}
}
nexus服务器在不提供证书的情况下以以下方式响应:
错误:无法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:错误的请求
我的第一个解决方案是尝试将jvm配置为将osx密钥链用于证书。相同的方法帮助我将lib / artifacts推送并发布到了nexus服务器上。
/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”的“无”。我尝试了几种大小写解决方案,但都失败了。
第二种方法是尝试
org.gradle.jvmargs=-Djavax.net.ssl.keyStoreType=KeychainStore
但是服务器再次响应400。似乎尚未使用JVM args。
关于这个主题有什么想法或文章吗?希望可以有人帮帮我。
问题是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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句