我使用的是EC2 java类。要成功连接到AWS账户,我必须使用keytool命令将证书(.crt文件)添加到本地Java cacerts
文件,该命令在代码本地运行时运行良好。
问题是我需要在服务器上运行代码,我无法访问cacerts
文件,因此我尝试使用ClientConfiguration
类以编程方式添加证书。我将cacerts
文件上传到服务器,程序将其作为KeyStore
对象读取,并创建SSLSocketFactory
实例:
SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore, "<password>");
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.getApacheHttpClientConfig().setSslSocketFactory(socketFactory);
AWSCredentials credentialsProvider = new BasicAWSCredentials("<key>", "<private key>");
AmazonEC2 ec2 = new AmazonEC2Client(credentialsProvider, clientConfig);
但它仍会产生HTTP Status 500 - Unable to execute HTTP request: peer not authenticated
错误
我已经检查过使用密钥库的getCertificate
方法可以成功读取添加的证书别名。
发送到"<password>"
构造函数的SSLSocketFactory
是密钥库的密码
这是向EC2添加证书的正确方法吗?
答案 0 :(得分:0)
问题是不需要SSLSocketFactory
构造函数的密码参数。将密码提供给KeyStore
构造函数就足够了,对于SSLSocketFactory
,它只是:
SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore);