SSL을 통해 서버와 통신하려고합니다. PEM 클라이언트 파일은 인증서와 rsa 개인 키로 구성됩니다.플래시 SecureSocket 및 RSA 개인 키
인증서와 키를 모두 DER로 변환 할 수있었습니다. DER 인증서를 SecureSocket에 성공적으로로드합니다 (함수가 , addBinaryChainBuildingCertificate가).하지만 서버에 연결하려고하면 "주된 불일치"오류가 발생합니다. DER 키를로드하기 위해 앞에서 설명한 함수를 사용하려고하면 "잘못된 매개 변수"오류가 발생합니다.
개인 키를로드하지 않았기 때문에 "주요 불일치"가 있다고 가정합니다. 하지만 SecureSocket에 RSA 키를로드하는 기능은 없습니다. 이것에 대한 해결책이 있습니까? 인증서 만 사용하여 서버와 통신해야하지만 방정식에서 키를 제거해야합니까?
편집 :
코드 :
package {
import flash.display.Sprite;
import flash.net.SecureSocket;
import flash.net.URLLoader;
import flash.events.ProgressEvent;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.utils.ByteArray;
public class TestSSL2 extends Sprite {
private var mSocket:SecureSocket = new SecureSocket();
private var certFile:String = "ca.der";
private var keyFile:String = "key.der";
private var cert:ByteArray;
private var key:ByteArray;
public function TestSSL2() {
trace("SecureSocket.isSupported",SecureSocket.isSupported);
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, certLoaded, false, 0, true);
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.load(new URLRequest(certFile));
}
private function certLoaded(e:Event):void {
cert = (e.target as URLLoader).data;
trace("certificate",cert.length);
mSocket.addBinaryChainBuildingCertificate(cert, true);
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, keyLoaded, false, 0, true);
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.load(new URLRequest(keyFile));
}
private function keyLoaded(e:Event):void {
key = (e.target as URLLoader).data;
trace("key",key.length);
mSocket.addBinaryChainBuildingCertificate(key, true);
mSocket.connect("127.0.0.1", 3000);
mSocket.addEventListener(Event.CONNECT, socketConnected);
mSocket.addEventListener(IOErrorEvent.IO_ERROR, onError);
mSocket.addEventListener(ProgressEvent.SOCKET_DATA, socketData);
}
private function onError(error:IOErrorEvent):void {
trace("ERROR!",error.text,":",mSocket.serverCertificateStatus);
}
private function socketConnected(e:Event):void {
trace("Connected", e);
}
private function socketData(e:*):void {
var data:String;
data = mSocket.readUTFBytes(mSocket.bytesAvailable);
trace(data);
}
}
}
결과 :
SecureSocket.isSupported true
certificate 497
key 607
ArgumentError: Error #2004: One of the parameters is invalid.
at flash.net::SecureSocket/addBinaryChainBuildingCertificate()
at TestSSL2/keyLoaded()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
나는 줄 언급하는 경우 :
//mSocket.addBinaryChainBuildingCertificate(key, true);
내가 얻을 : 첫째
SecureSocket.isSupported true
certificate 497
key 607
ERROR! Error #2031: Socket Error. URL: 127.0.0.1 : principalMismatch
에 socket.connect 할 때 인증서가로드되고 유효성이 확인되도록 을 두 번째 매개 변수로 전달하여 표시해야합니다. 그 외에는 코드 나 특정 오류 코드를 게시하지 않았으므로 도움이되지 않습니다. –
추가되었지만 실제로 도움이 될만한 방법을 볼 수는 없습니다 :-(로컬 서버가 pem 파일에서 인증서와 키를 읽는 로컬 C++ 클라이언트와 잘 작동하는지 추가 할 수있게하십시오. –
로컬로 SWF를 시작하거나 웹에 테스트 되었습니까? –