根据您的描述,我还使用 Documentdb Java SDK 编写了一段代码来连接到 Cosmos DB 模拟器,结果遇到了与您相同的问题。
package emulator;
import com.microsoft.azure.documentdb.ConnectionPolicy;
import com.microsoft.azure.documentdb.ConsistencyLevel;
import com.microsoft.azure.documentdb.Database;
import com.microsoft.azure.documentdb.DocumentClient;
import com.microsoft.azure.documentdb.DocumentClientException;
public class TestEmlulator {
// Replace with your DocumentDB end point and master key.
private static final String END_POINT = "https://localhost:8081/";
private static final String MASTER_KEY = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
public static void main(String[] args) throws DocumentClientException {
// Connect to the Azure Cosmos DB Emulator running locally
DocumentClient client = new DocumentClient(END_POINT, MASTER_KEY, ConnectionPolicy.GetDefault(),
ConsistencyLevel.Session);
Database database = new Database();
database.setId("testEmulator");
database = client.createDatabase(database, null).getResource();
System.out.println(database.toJson());
}
}
所以我导出了cosmos DB的证书,并将其命名为documentdbemulatorcert.cer
并按照官方提供的保存在我的D盘中官方教程 https://learn.microsoft.com/en-us/azure/cosmos-db/local-emulator。看来你也做了同样的事情。
然后,我尝试将cosmosdb的证书导入到JVM信任证书列表中。您也可以参考我下面的步骤:
Step1:打开CMD命令窗口,输入%JAVA_HOME%/jre/lib/security
目录。请注意,需要使用以下命令打开命令窗口administrator privileges
对我来说,目录看起来像C:\Program Files\Java\jdk1.8.0_131\jre\lib\security
Step2 :在打开的命令窗口中输入以下命令:
keytool -import -alias cacerts -keystore cacerts -file d:\documentdbemulatorcert.cer
输入默认密码:changeit
并输入Y or y反对这Trust this certificate? [no]:
Step 3:你可以看到Certificate was added to keystore
如果证书已成功导入。
整个过程可以参考下面的截图:
最后,我的代码可以运行了!
您还可以参考以下SO主题:
1.无法找到请求目标的有效证书路径 - 即使在导入证书后也会出现错误 https://stackoverflow.com/questions/9210514/unable-to-find-valid-certification-path-to-requested-target-error-even-after-c
2.“PKIX 路径构建失败”和“无法找到请求目标的有效证书路径” https://stackoverflow.com/questions/21076179/pkix-path-building-failed-and-unable-to-find-valid-certification-path-to-requ
希望对您有帮助。