azure iothub create-device-identity樣例報錯: unable to find valid certification path ,及iothub-explorer E

https://docs.microsoft.com/zh-cn/azure/iot-hub/iot-hub-java-java-getstartedjava

在IDEA中執行上述的代碼,會出現下面的報錯信息:node

Exception in thread "main" 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
	at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
	at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509)
	at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
	at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
	at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1513)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441)
	at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
	at com.microsoft.azure.iot.service.transport.http.HttpConnection.getResponseStatus(HttpConnection.java:236)
	at com.microsoft.azure.iot.service.transport.http.HttpRequest.send(HttpRequest.java:76)
	at com.microsoft.azure.iot.service.sdk.RegistryManager.addDevice(RegistryManager.java:108)
	at xxxx.azure.CreateDevIdentity.main(CreateDevIdentity.java:24)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

  

經過IE訪問接口的網址:https://xxx.azure-devices.cn/devices/xxdevId?api-version=2016-02-03linux

將網站的證書導出爲CER文件git

而後經過java的keytool導入證書(若是是windows平臺,須要以管理員身份打開CMD來執行命令)github

keytool -import -file E:\azure-devices.cn.cer -keystore "C:\Program Files\Java\jdk1.8.0_66\jre\lib\security\cacerts" -alias azure-devices.cn

從新運行程序便可npm

 

另外:CER文件也能夠經過linux下的openssl導出windows

openssl s_client -connect farm.azure-devices.cn:443 </dev/null 2>/dev/null | openssl x509 -outform DER > azure-devices.cer

  

 

iothub-explorer使用碰到的HTTPS的問題
iothub-explorer login "HostName=<my-hub>.azure-devices.net;SharedAccessKeyName=<my-policy>;SharedAccessKey=<my-policy-key>"

iothub-explorer create new-device --connection-string

iothub-explorer執行create命令時,會出現api

Error: CERT_UNTRUSTEDbash

 

能夠在執行命令前設置下面的參數,繞過HTTPS校驗app

export NODE_TLS_REJECT_UNAUTHORIZED=0

 

參考:

http://stackoverflow.com/questions/10888610/ignore-invalid-self-signed-ssl-certificate-in-node-js-with-https-request

 

3.18補充,將Ubuntu的nodejs切換爲4.x版本,能夠避免上述問題

sudo apt-get remove nodejs ^node-* nodejs-*
sudo apt-get autoremove
sudo apt-get clean
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install nodejs

curl https://raw.githubusercontent.com/creationix/nvm/v0.13.1/install.sh | sh

http://stackoverflow.com/questions/23393707/how-to-update-npm

相關文章
相關標籤/搜索