Gradle 对存储库使用证书身份验证
Gradle use certificate authentication for repository
问题
我有一个 Android Gradle 项目,它应该从我公司的 sonatype nexus 服务器中提取一个库。 Nexus 服务器使用证书身份验证。这意味着客户端有一个私有证书,该证书可以针对 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 钥匙串。同样的方法帮助我在nexus服务器上推送和发布libs/artifacts。
/app/gradle.属性
org.gradle.jvmargs=-Djavax.net.ssl.keyStore=NONE -Djavax.net.ssl.keyStoreType=KeychainStore -Djavax.net.ssl.keyStorePassword=-
这不起作用 gradle 同步失败:
Error:NONE(没有那个文件或目录)
看起来 gradle 应该是参数 '-Djavax.net.ssl.keyStore' 的 'NONE'。我尝试了几种大写和小写的解决方案,但都失败了。
第二种方法是尝试
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 库项目并将它们推送到工件服务器。
https://medium.com/android-news/the-complete-guide-to-creating-an-android-library-46628b7fc879#.naboz7yng
我的解决方案是更新 ubuntu/debian 系统上的 ca 证书。
update-ca-certificates -f
问题
我有一个 Android Gradle 项目,它应该从我公司的 sonatype nexus 服务器中提取一个库。 Nexus 服务器使用证书身份验证。这意味着客户端有一个私有证书,该证书可以针对 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 钥匙串。同样的方法帮助我在nexus服务器上推送和发布libs/artifacts。
/app/gradle.属性
org.gradle.jvmargs=-Djavax.net.ssl.keyStore=NONE -Djavax.net.ssl.keyStoreType=KeychainStore -Djavax.net.ssl.keyStorePassword=-
这不起作用 gradle 同步失败: Error:NONE(没有那个文件或目录)
看起来 gradle 应该是参数 '-Djavax.net.ssl.keyStore' 的 'NONE'。我尝试了几种大写和小写的解决方案,但都失败了。
第二种方法是尝试
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 库项目并将它们推送到工件服务器。 https://medium.com/android-news/the-complete-guide-to-creating-an-android-library-46628b7fc879#.naboz7yng
我的解决方案是更新 ubuntu/debian 系统上的 ca 证书。
update-ca-certificates -f