SOに関するこのトピックに関するほぼすべての質問を参照しましたが、残念ながら、どの回答もブレークスルーをもたらしませんでした。
私は EWS1.2 を使用しており、Eclipse 内から次のコードを実行して Exchange サーバーに接続し、テスト メールを送信しています。コードが何をしていると私が理解しているかについては、インライン コメントを参照してください。
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
/* Our company email id and windows password. We never had to enter a password for outlook.
I guess it is using LDAP authentication. In our outlook it is set to Negotiate Authentication. */
ExchangeCredentials credentials = new WebCredentials("123.abc@xyz.com", "MyWinPassword");
service.setCredentials(credentials);
/* Our proxy server's ip address and port. I am not sure if our exchange server is only accessible through a proxy
but this statement stopped a "connection refused" error that I was getting earlier */
WebProxy webProxy = new WebProxy("our_proxy_ip", 8080);
webProxy.setCredentials("my_win7_user_id", "MyWinPassword", "OurDomain");
service.setWebProxy(webProxy);
try {
service.setUrl(new URI("https://exchange_ip/ews/Exchange.asmx"));
/* Autodiscovery never worked: The Autodiscover service couldn't be located. */
// service.autodiscoverUrl("123.abc@xyz.com");
} catch (URISyntaxException e) {
e.printStackTrace();
}
EmailMessage msg;
try {
msg = new EmailMessage(service);
msg.setSubject("Test Email");
msg.setBody(MessageBody.getMessageBodyFromText("Sent using the EWS API"));
msg.getToRecipients().add("123.abc@xyz.com");
msg.send(); /* This is where we get an exception */
} catch (Exception e) {
e.printStackTrace();
}
その結果、次のトレースが生成されます。
microsoft.exchange.webservices.data.ServiceRequestException: The request failed. sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at microsoft.exchange.webservices.data.ServiceRequestBase.getEwsHttpWebResponse(Unknown Source)
at microsoft.exchange.webservices.data.ServiceRequestBase.validateAndEmitRequest(Unknown Source)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(Unknown Source)
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(Unknown Source)
at microsoft.exchange.webservices.data.ExchangeService.internalCreateItems(Unknown Source)
at microsoft.exchange.webservices.data.ExchangeService.createItem(Unknown Source)
at microsoft.exchange.webservices.data.Item.internalCreate(Unknown Source)
at microsoft.exchange.webservices.data.EmailMessage.internalSend(Unknown Source)
at microsoft.exchange.webservices.data.EmailMessage.send(Unknown Source)
at com.ashok.calsync.Sync.testMethod(Sync.java:39)
at com.ashok.calsync.Sync.main(Sync.java:12)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
... 11 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
... 28 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:318)
... 34 more
Outlook で使用される証明書を .cer ファイルにエクスポートし、keytool を使用して cacerts にインポートしました。
keytool -import -file D:\Ashok\myOutlookCert1.cer -keystore cacerts -alias myOutlookCert1
Eclipse の実行構成には、VM Arguments の下に以下が含まれます。
-Djavax.net.debug=all -Djavax.net.ssl.keyStore="C:\java_jdk\1.6.0_30\jre\lib\security\cacerts" -Djavax.net.ssl.keyStorePassword=changeit -Djavax.net. ssl.trustStore="C:\java_jdk\1.6.0_30\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword=changeit
証明書はデバッグ トレースに表示されます
信頼できる証明書として追加: 件名: CN=123.abc、CN=S、CN=A、CN=OurDomain、CN=XYZ、CN=pki、DC=xyz、DC=com 発行者: CN=XYZ-CA1-FR、 CN=PKI、DC=XYZ、DC=com アルゴリズム: RSA; シリアル番号: 0x43559d09
2012 年 6 月 19 日火曜日 13:31:28 IST から 2015 年 6 月 19 日金曜日 14:01:28 IST まで有効
これらすべての後、例外は証明書が見つからないことを示唆しています。ここでの質問は次のとおりです。
- cacerts にインポートした証明書がサーバーが探しているものであることを確認するにはどうすればよいですか?
- Outlook の Trust Center から (電子メール セキュリティ セクション内から) 証明書をエクスポートしました。これは、Exchange Server に接続するための正しい証明書ですか?
助けてくれてありがとう。
よろしく、
アショク