我正嘗試使用SecureSocket連接到服務器。我正在使用SecureSocket類實現的FlashBuilder 4.6。問題是,創建SecureSocket對象並調用連接函數後,我得到ioError - 輸入2031和「無效」的serverCertificateStatus。服務器端的證書是自簽名的。有沒有什麼辦法可以讓閃存使用自簽名證書?SSL接受ActionScript 3中的自簽名證書
回答
您可以使用as3crypto
TLSSocket
,而不是(我建議把我patched版本,它有補丁幾個關鍵issues),它也包含新的方法addTrustedCertificate
,可能是你的情況幫助(只是增加了證書中* .der格式,無論如何都會被接受(自簽名,錯誤域名等))。
package
{
import com.hurlant.crypto.tls.SSLSecurityParameters;
import com.hurlant.crypto.tls.TLSConfig;
import com.hurlant.crypto.tls.TLSEngine;
import com.hurlant.crypto.tls.TLSSocket;
import com.hurlant.util.der.PEM;
import com.kamagames.core.util.log.Logger;
import com.kamagames.core.util.log.TraceTarget;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.net.SecureSocket;
import flash.utils.ByteArray;
public class sockettest extends Sprite
{
[Embed(source="cert.pem", mimeType="application/octet-stream")]
private static const cert_pem:Class;
private var tlssocket:TLSSocket;
private var secsocket:SecureSocket;
public function sockettest()
{
var cert_pem_bytes:ByteArray = new cert_pem();
var cert_der:ByteArray = PEM.readCertIntoArray(cert_pem_bytes.readUTFBytes(cert_pem_bytes.bytesAvailable));
var config:TLSConfig = new TLSConfig(TLSEngine.CLIENT, null, null, null, null, null, SSLSecurityParameters.PROTOCOL_VERSION);
config.ignoreCommonNameMismatch = true;
config.addTrustedCertificate(cert_der);
var socket:Object = new TLSSocket(null, 0, config);
socket.addEventListener(Event.CONNECT, log);
socket.addEventListener(ProgressEvent.SOCKET_DATA, log);
socket.addEventListener(Event.CLOSE, log);
socket.addEventListener(IOErrorEvent.IO_ERROR, log);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, log);
socket.connect("google.com", 443);
}
private function log(event:Event):void
{
trace(event.type);
}
}
}
理論上SecureSocket.addBinaryChainBuildingCertificate
方法也可以幫助你,但我不知道這件事,可能是它僅適用於鏈式證書。
通常修補TLSSocket
比SecureSocket
更適合應用,因爲它開源並獲取對通信處理更全面的控制,但SecureSocket
是本地系統如所提到的(其與例如系統證書工作@ Reboog711該TLSSocket
不能)
我已經使用TLSSocket和我成功連接到服務器。連接後我發送一條消息並等待返回消息。現在我有一個從服務器讀取返回消息的問題。 var o_Bytes:ByteArray = new ByteArray(); tlssocket.readBytes(o_Bytes,0,tlssocket.bytesAvailable); 當我跟蹤o_Bytes時,它沒有任何內容,並且o_Bytes.length也是0 –
您是否讀取了有關_ProgressEvent.SOCKET_DATA_套接字事件的數據? – fsbmain
關於進度事件我正在調用rading數據的函數,是的。我已經添加了一個代碼段,我試圖使用 –
tlssocket.addEventListener(ProgressEvent.SOCKET_DATA, ESecureSocketData);
private function ESecureSocketData(evt:ProgressEvent):void
{
StartTimer();
ReadResponse();
ParseMessage();
}
private function ReadResponse():void
{
var o_Bytes:ByteArray = new ByteArray();
tlssocket.readBytes(o_Bytes, 0, tlssocket.bytesAvailable);
for (var i:uint = 0; i < o_Bytes.length; i ++) {
o_Bytes.position = i;
str_Response += String.fromCharCode(o_Bytes.readByte());
}
}
- 1. VB .net接受自簽名SSL證書
- 2. 使用appscript如何接受Safari中的自簽名SSL證書
- 3. 如何接受WCF客戶端中的自簽名SSL證書?
- 4. Chromecast自簽名SSL證書
- 5. 配置Mercurial接受自簽名證書
- 6. Fopen接受自簽名證書
- 7. iframe中的自簽名SSL證書
- 8. MongoDB自簽名SSL連接:SSL對等證書驗證失敗
- 9. 自簽名證書
- 10. 接受斯威夫特自簽名證書3
- 11. 自動使用自簽名SSL證書
- 12. SSL證書籤名驗證
- 13. 使用自簽名的SSL證書
- 14. Heroku使用自簽名證書的SSL
- 15. 帶自簽名證書的SSL
- 16. websocket的自簽名ssl證書
- 17. 自簽名證書
- 18. 接受自簽名的SSL證書 - >在哪裏設置默認的TrustManager
- 19. SSL:瞭解自簽名證書
- 20. 自簽名SSL證書403.7錯誤
- 21. 無法信任自簽名SSL證書
- 22. 檢查自簽名證書(SSL,C#)
- 23. SSLPeerUnverifiedException使用自簽名SSL證書時
- 24. 爲libcurl添加自簽名SSL證書
- 25. d3.js和自簽名SSL證書
- 26. 設置SSL(自簽名證書)和Tomcat
- 27. Keystone.js自簽名證書
- 28. SSL鏈簽名證書
- 29. 簽名證書和SSL
- 30. ncat SSL問題,證書驗證失敗(自簽名證書)
通常,Flash在瀏覽器上工作;因此您必須在瀏覽器中爲Flash添加永久豁免才能避免此錯誤。如果你周圍的Google應該能夠找到你選擇的瀏覽器的各種說明。我不建議在生產現場使用。 – JeffryHouser
感謝您的快速回復。問題在於它是一個網站上的Flash客戶端,任何人都可以用他們的瀏覽器啓動它,所以瀏覽器中的豁免無法解決問題。 –
請勿在生產站點中使用自簽名證書。 – JeffryHouser