Home · All Classes · Modules  · QSS HELP  · QSS 案例 · VER007 HOME

QSslSocket Class Reference
[QtNetwork module]

该QSslSocket类提供的SSL加密套接字的客户端和服务器。More...

继承QTcpSocket

Types

Methods

Static Methods

Qt Signals


Detailed Description

该QSslSocket类提供的SSL加密套接字的客户端和服务器。

QSslSocket建立可用于传输加密数据安全,加密的TCP连接。它可以同时在客户端和服务器模式下运行,并且它支持SSL的现代化协议,包括支持SSLv3和TLSv1 。默认情况下, QSslSocket使用的TLSv1 ,但是你可以通过调用改变SSL协议setProtocol()只要你握手之前做到这一点已经开始。

SSL加密运行在现有TCP流顶部的插座进入后ConnectedState。有两种简单的方法来建立使用QSslSocket安全连接:通过即时SSL握手,或连接已经建立了未加密模式之后延迟SSL握手发生。

使用QSslSocket最常见的方式是通过调用构造对象,并启动安全连接connectToHostEncrypted( ) 。这个方法立刻执行SSL握手一旦连接已经建立。

 QSslSocket *socket = new QSslSocket(this);
 connect(socket, SIGNAL(encrypted()), this, SLOT(ready()));

 socket->connectToHostEncrypted("imap.example.com", 993);

作为一个普通的QTcpSocket, QSslSocket进入HostLookupStateConnectingState,最后是ConnectedState如果连接成功。握手然后自动启动,如果成功,encrypted()信号被发射,以指示插座已经进入了加密的状态,并准备好使用。

注意,数据可从返回后,立即被写入到插座connectToHostEncrypted( )(即,前encrypted()信号被发射) 。该数据被排队在QSslSocket后才encrypted()信号被发射。

使用延迟SSL握手,以确保现有连接的一个例子是SSL服务器固定一个传入的连接的情况下。假设你创建一个SSL服务器类作为子类QTcpServer。你会复盖QTcpServer.incomingConnection( )的东西,如下面的例子,它首先构造QSslSocket的一个实例,然后调用setSocketDescriptor( )新的套接字的描述符设置为现有的传入然后,它开始通过调用SSL握手startServerEncryption( ) 。

 void SslServer.incomingConnection(int socketDescriptor)
 {
     QSslSocket *serverSocket = new QSslSocket;
     if (serverSocket->setSocketDescriptor(socketDescriptor)) {
         connect(serverSocket, SIGNAL(encrypted()), this, SLOT(ready()));
         serverSocket->startServerEncryption();
     } else {
         delete serverSocket;
     }
 }

如果发生错误, QSslSocket发射sslErrors()信号。在这种情况下,如果不采取行动,以忽略错误( s)时,连接将被丢弃。要继续,尽管错误的发生,你可以调用ignoreSslErrors( ) ,无论是从该时隙内发生的错误后,或建设QSslSocket后,连接之前的任何时间尝试。这将允许QSslSocket忽略它遇到建立对等体的身份,当出现差错。在SSL握手过程忽略错误,应谨慎使用,因为安全连接的一个基本特征是,它们应与成功握手建立。

一旦加密,您可以使用QSslSocket作为一个经常QTcpSocket。何时readyRead( )被发射,你可以调用read( )canReadLine()和readLine() ,或getChar( )读取QSslSocket的内部缓冲区解密数据,并且可以调用write()或putChar( )将数据写回给对端。 QSslSocket会自动加密写入的数据对你来说,并放出encryptedBytesWritten()一旦数据已被写入到对等体。

为方便起见, QSslSocket支持QTcpSocket的阻断功能waitForConnected( )waitForReadyRead( )waitForBytesWritten()和waitForDisconnected( ) 。它也提供waitForEncrypted(),它会阻塞调用线程,直到一个加密的连接已经建立。

 QSslSocket socket;
 socket.connectToHostEncrypted("http.example.com", 443);
 if (!socket.waitForEncrypted()) {
     qDebug() << socket.errorString();
     return false;
 }

 socket.write("GET / HTTP/1.0\r\n\r\n");
 while (socket.waitForReadyRead())
     qDebug() << socket.readAll().data();

QSslSocket提供了用于处理加密密码,私钥和地方,同行,以及证书颁发机构( CA)证书广泛的,易于使用的API 。它还提供了用于处理在握手阶段所发生的错误的API。

以下功能也可以定制:

Note:如果可以,在Unix (不包括Mac OS X的)根证书将来自标准证书目录按需加载。如果您不希望加载的根证书上的需求,你需要调用静态函数setDefaultCaCertificates( )前的第一个SSL握手是在你的应用程序, (例如,通过“ QSslSocket.setDefaultCaCertificates (QSslSocket.systemCaCertificates( ) ) ;“) ,或致电setCaCertificates( )在之前的SSL握手你QSslSocket实例。

有关密码和证书的详细信息,请参阅QSslCipherQSslCertificate

本产品包括OpenSSL工具包的使用由OpenSSL项目开发的软件(http://www.openssl.org/) 。

Note:注意之间的差值的bytesWritten()信号和encryptedBytesWritten()信号。对于QTcpSocketbytesWritten()会得到尽快的数据已被写入到TCP套接字射出。对于QSslSocket ,bytesWritten()会得到发射时,数据被加密并encryptedBytesWritten()会得到尽快的数据已被写入到TCP套接字射出。

Symbian Platform Security Requirements

在Symbian ,它使用这个类的进程必须有NetworkServices平台的安全能力。如果客户端程序缺乏这种能力,操作将失败。

平台的安全功能是通过添加TARGET.CAPABILITYqmake的变量。


Type Documentation

QSslSocket.PeerVerifyMode

介绍了同行的验证模式QSslSocket。默认模式是AutoVerifyPeer ,它选择一个合适的模式,这取决于插座的QSocket.SslMode 。

Constant Value Description
QSslSocket.VerifyNone 0 QSslSocket不会要求对端的证书。如果你没有兴趣在连接的另一端的身份,您可以设置该模式。该连接仍然会被加密,你的socket仍会发送其本地证书给对端,如果它的要求。
QSslSocket.QueryPeer 1 QSslSocket将要求对端的证书,但不要求该证书是有效的。当你想显示对等体证书的详细信息给用户,而不会影响实际的SSL握手,这是很有用的。这种模式是默认的服务器。
QSslSocket.VerifyPeer 2 QSslSocket会要求对方在SSL握手阶段证书,并要求该证书是有效的。如果失败,QSslSocket将发射QSslSocket.sslErrors()信号。这种模式是默认的客户端。
QSslSocket.AutoVerifyPeer 3 QSslSocket会自动使用QueryPeer的服务器套接字和VerifyPeer的客户端套接字。

这个枚举被引入或修改的Qt 4.4 。

See also QSslSocket.peerVerifyMode( ) 。

QSslSocket.SslMode

说明可用于连接模式QSslSocket

Constant Value Description
QSslSocket.UnencryptedMode 0 套接字是未加密的。其行为是相同的QTcpSocket
QSslSocket.SslClientMode 1 套接字的客户端SSL套接字。它可以是alreayd加密的,或者它是在SSL握手阶段(参见QSslSocket.isEncrypted())。
QSslSocket.SslServerMode 2 该插座是一个服务器端的SSL套接字。它要么已经加密的,或者它是在SSL握手阶段(参见QSslSocket.isEncrypted())。

Method Documentation

QSslSocket.__init__ (self, QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个QSslSocket对象。parent被传递给QObject的构造。新的套接字的cipher套件被设置为静态方法返回一个defaultCiphers( ) 。

QSslSocket.abort (self)

中止当前连接并重置插口。不像disconnectFromHost( ) ,这个函数立即关闭套接字,写缓冲区清除任何挂起的数据。

See also disconnectFromHost()和close( ) 。

QSslSocket.addCaCertificate (self, QSslCertificate certificate)

添加certificate此套接字的CA证书数据库。握手阶段中的CA证书数据库所使用的插座,以验证对方的证书。

要添加多个证书,使用addCaCertificates( ) 。

See also caCertificates()和setCaCertificates( ) 。

bool QSslSocket.addCaCertificates (self, QString path, QSsl.EncodingFormat format = QSsl.Pem, QRegExp.PatternSyntax syntax = QRegExp.FixedString)

搜索中的所有文件path对于证书编码指定format并将它们添加到这个套接字的CA证书数据库。path可以是显式的,或者它可以包含通配符在由指定的格式syntax。返回True如果一个或多个证书添加到套接字的CA证书数据库,否则返回False 。

握手阶段中的CA证书数据库所使用的插座,以验证对方的证书。

为了更精确的控制,使用addCaCertificate( ) 。

See also addCaCertificate()和QSslCertificate.fromPath( ) 。

QSslSocket.addCaCertificates (self, list-of-QSslCertificate certificates)

添加certificates此套接字的CA证书数据库。握手阶段中的CA证书数据库所使用的插座,以验证对方的证书。

为了更精确的控制,使用addCaCertificate( ) 。

See also caCertificates()和addDefaultCaCertificate( ) 。

QSslSocket.addDefaultCaCertificate (QSslCertificate certificate)

添加certificate到默认的CA证书数据库。每个SSL套接字的CA证书数据库被初始化为默认的CA证书数据库。

See also defaultCaCertificates()和addCaCertificates( ) 。

bool QSslSocket.addDefaultCaCertificates (QString path, QSsl.EncodingFormat format = QSsl.Pem, QRegExp.PatternSyntax syntax = QRegExp.FixedString)

搜索中的所有文件path具有指定证书encoding并将它们添加到默认的CA证书数据库。path可以是显式的文件中,或者它可以包含通配符在由指定的格式syntax。如有CA证书被添加到默认数据库,则返回True 。

每个SSL套接字的CA证书数据库被初始化为默认的CA证书数据库。

See also defaultCaCertificates( )addCaCertificates()和addDefaultCaCertificate( ) 。

QSslSocket.addDefaultCaCertificates (list-of-QSslCertificate certificates)

添加certificates到默认的CA证书数据库。每个SSL套接字的CA证书数据库被初始化为默认的CA证书数据库。

See also defaultCaCertificates()和addCaCertificates( ) 。

bool QSslSocket.atEnd (self)

从重新实现QIODevice.atEnd( ) 。

int QSslSocket.bytesAvailable (self)

从重新实现QIODevice.bytesAvailable( ) 。

返回解密后的字节是立即可用于阅读的数量。

int QSslSocket.bytesToWrite (self)

从重新实现QIODevice.bytesToWrite( ) 。

返回正在等待被加密并写入网络未加密的字节数。

list-of-QSslCertificate QSslSocket.caCertificates (self)

返回此套接字的CA证书数据库。握手阶段中的CA证书数据库所使用的插座,以验证对方的证书。它可以与握手之前被moodifiedaddCaCertificate( )addCaCertificates()和setCaCertificates( ) 。

Note:在Unix中,这个方法可能会返回一个空列表,如果根证书按需加载。

See also addCaCertificate( )addCaCertificates()和setCaCertificates( ) 。

bool QSslSocket.canReadLine (self)

从重新实现QIODevice.canReadLine( ) 。

返回True如果你能读一而行(终止由一个单一的ASCII码为'\ n '字符)解密字符,否则返回False 。

list-of-QSslCipher QSslSocket.ciphers (self)

返回此套接字的当前密码的加密套件。在插座的握手阶段该列表用于选择一个会话密码。密码返回的列表是按递减优先级进行排序。 (例如,在列表中的第一密码是最优选的密码) 。会话密码将是第一个在也支持对等的列表。

默认情况下,握手阶段可以选择任何由该系统的SSL库支持的加密算法,这可能会有所不同从系统到系统。通过此系统的SSL库支持的密码列表是由返回supportedCiphers( ) 。你可以通过调用限制用于选择会话密码为这个套接字密码列表setCiphers( )与所支持的加密算法的子集。你可以通过调用恢复使用整套setCiphers( )与返回列表supportedCiphers( ) 。

您可以限制用于选择会话加密的密码清单all套接字通过调用setDefaultCiphers( )与所支持的加密算法的子集。你可以通过调用恢复使用整套setCiphers( )与返回列表supportedCiphers( ) 。

See also setCiphers( )defaultCiphers( )setDefaultCiphers()和supportedCiphers( ) 。

QSslSocket.close (self)

从重新实现QIODevice.close( ) 。

QSslSocket.connectToHostEncrypted (self, QString hostName, int port, QIODevice.OpenMode mode = QIODevice.ReadWrite)

开始到设备的加密连接hostNameport,使用mode作为OpenMode。这等同于调用connectToHost()来建立连接,然后通过调用startClientEncryption( ) 。

QSslSocket首先进入HostLookupState。然后,无论是进入事件循环或一个WAITFOR的... ( )函数后,它进入ConnectingState,发出connected( ) ,然后启动SSL客户端握手。在每个状态的变化,QSslSocket发出信号stateChanged( ) 。

启动SSL客户端握手,如果对等体的身份不能成立,信号经过sslErrors()被发射。如果你想忽略错误并继续连接,则必须调用ignoreSslErrors() ,无论是从一个槽函数内部连接到sslErrors( )信号,或在进入加密模式之前。如果ignoreSslErrors( )没有被调用,则连接断开,信号disconnected()被发射,并且QSslSocket返回到UnconnectedState

如果SSL握手成功,QSslSocket emits encrypted( ) 。

 QSslSocket socket;
 connect(&socket, SIGNAL(encrypted()), receiver, SLOT(socketEncrypted()));

 socket.connectToHostEncrypted("imap", 993);
 socket->write("1 CAPABILITY\r\n");

Note:上面的例子表明,文本可以请求加密连接,以前后立即被写入套接字encrypted()信号已经发出。在这种情况下,文本被排队的对象,并写入到插座after连接建立和encrypted()信号已经发出。

默认为mode is ReadWrite

如果你想创建一个QSslSocket在连接的服务器端,你应该改为调用startServerEncryption( )后,通过接收传入的连接QTcpServer

See also connectToHost( )startClientEncryption( )waitForConnected()和waitForEncrypted( ) 。

QSslSocket.connectToHostEncrypted (self, QString hostName, int port, QString sslPeerName, QIODevice.OpenMode mode = QIODevice.ReadWrite)

这是一个重载函数。

除了connectToHostEncrypted的原始行为,此重载方法使不同的主机名的用法(sslPeerName)的证书验证,而不是用于TCP连接的一(hostName) 。

此功能被引入Qt的4.6 。

See also connectToHostEncrypted( ) 。

QSslSocket.connectToHostImplementation (self, QString hostName, int port, QIODevice.OpenMode openMode)

这种方法也是一个Qt槽与C + +的签名void connectToHostImplementation(const QString&,quint16,QIODevice::OpenMode)

list-of-QSslCertificate QSslSocket.defaultCaCertificates ()

返回当前默认的CA证书数据库。这个数据库是最初设置为系统的默认CA证书数据库。如果没有找到系统默认的数据库,建立一个空数据库将被退回。你可以用你自己的CA证书数据库使用复盖默认的CA证书数据库setDefaultCaCertificates( ) 。

每个SSL套接字的CA证书数据库被初始化为默认的CA证书数据库。

Note:在Unix中,这个方法可能会返回一个空列表,如果根证书按需加载。

See also setDefaultCaCertificates()和caCertificates( ) 。

list-of-QSslCipher QSslSocket.defaultCiphers ()

返回默认的加密密码套件在这个应用程序的所有插座。此列表中的套接字的握手阶段时,与对等谈判,以选择一个会话密码使用。该列表是按优先次序排列(即,在列表中的第一个密码是最喜欢的密码) 。

默认情况下,握手阶段可以选择任何由该系统的SSL库支持的加密算法,这可能会有所不同从系统到系统。通过此系统的SSL库支持的密码列表是由返回supportedCiphers( ) 。

See also setDefaultCiphers()和supportedCiphers( ) 。

QSslSocket.disconnectFromHostImplementation (self)

这种方法也是一个Qt槽与C + +的签名void disconnectFromHostImplementation()

int QSslSocket.encryptedBytesAvailable (self)

返回正在等待解密加密的字节数。通常情况下,这个函数将返回0 ,因为QSslSocket只要它可以解密它的输入数据。

此功能被引入Qt的4.4 。

int QSslSocket.encryptedBytesToWrite (self)

返回的加密的字节正在等待被写入到网络的数目。

此功能被引入Qt的4.4 。

bool QSslSocket.flush (self)

该函数将尽可能从内部写缓冲区的底层网络接口,而不会阻塞。如果任何数据被写入时,该函数将返回True,否则返回False。

调用此函数,如果你需要QSslSocket立即开始发送缓冲数据。成功写入的字节数依赖于操作系统。在大多数情况下,你不需要调用这个函数,因为QAbstractSocket将自动开始发送数据,一旦控制返回到事件循环。在不存在的事件循环,调用waitForBytesWritten( )来代替。

See also write()和waitForBytesWritten( ) 。

QSslSocket.ignoreSslErrors (self)

这种方法也是一个Qt槽与C + +的签名void ignoreSslErrors()

这个插槽告诉QSslSocket过程中忽略的错误QSslSocket的握手阶段,并继续连接。如果你想继续使用,即使在握手阶段出现的错误连接,那么你必须调用这个槽,无论是从连接到一个槽sslErrors( ) ,或之前握手阶段。如果你不调用这个插槽,无论是在响应错误或握手之前,连接将在之后被丢弃sslErrors()信号已经发出。

如果在SSL握手阶段没有错误(即对方的身份确立,没有任何问题) ,QSslSocket也不会发射sslErrors()的信号,并且它不需要调用此函数。

Warning:一定要始终让用户检查报告的错误sslErrors( )信号,并且只从用户的程序是确定经确认后,调用此方法。如果有意外的错误,连接应被中止。不检查实际的错误调用此方法将最有可能带来安全风险的应用程序。使用它以极大的关怀!

See also sslErrors( ) 。

QSslSocket.ignoreSslErrors (self, list-of-QSslError errors)

这是一个重载函数。

这个方法告诉QSslSocket忽略只在给定的误差errors

请注意,您可以在SSL错误设定预期的证书:如果,例如,要连接到使用自签名证书的服务器时,请考虑下面的代码片断:

 QList<QSslCertificate> cert = QSslCertificate.fromPath(QLatin1String("server-certificate.pem"));
 QSslError error(QSslError.SelfSignedCertificate, cert.at(0));
 QList<QSslError> expectedSslErrors;
 expectedSslErrors.append(error);

 QSslSocket socket;
 socket.ignoreSslErrors(expectedSslErrors);
 socket.connectToHostEncrypted("server.tld", 443);

多次调用该函数会被替换传入以前调用的错误列表。您可以清除通过调用这个函数以一个空列表,你要忽略错误的列表。

此功能被引入Qt的4.6 。

See also sslErrors( ) 。

bool QSslSocket.isEncrypted (self)

返回True如果套接字是加密的,否则,则返回False。

加密套接字加密被写入调用的所有数据write()或putChar()之前的数据被写入到网络上,并解密所有传入的数据作为数据是从网络接收到的,在打电话之前read( )readLine()或getChar( ) 。

QSslSocket emits encrypted( )当它进入加密模式。

您可以致电sessionCipher()找到它的加密密码是用来加密和解密数据。

See also mode( ) 。

QSslCertificate QSslSocket.localCertificate (self)

返回套接字的本地certificate,或者一个空的证书,如果没有本地证书已分配。

See also setLocalCertificate()和privateKey( ) 。

SslMode QSslSocket.mode (self)

返回当前模式的插座;要么UnencryptedMode,其中QSslSocket行为identially到QTcpSocket的,或者一个SslClientMode or SslServerMode,其中客户端可以是谈判或加密模式。

当模式改变,QSslSocket emits modeChanged( )

See also SslMode

QSslCertificate QSslSocket.peerCertificate (self)

返回同行的数字证书(即您已连接到主机的直接证明) ,或空凭证,如果对等未分配证书。

对等证书握手阶段中的自动检查,所以这个功能通常用来获取用于显示或连接诊断目的的证书。它包含有关对等的信息,包括它的主机名,证书颁发者,和同行的公钥。

因为对等证书握手阶段中的设置,它是安全的,从连接到一个插槽存取等证书sslErrors()信号或encrypted()信号。

如果证书无效,则返回,它可能意味着SSL握手失败,或者它可能意味着您已连接到主机没有证书,或者它可能意味着没有连接。

如果你想检查对端的完整的证书链,利用peerCertificateChain()来得到一次全部。

See also peerCertificateChain( ) 。

list-of-QSslCertificate QSslSocket.peerCertificateChain (self)

返回数字证书的对等的链,或证书列表是空的。

同行证书握手阶段中的自动检查。此功能通常用于获取证书显示,或用于执行连接诊断。证书包含有关对等和证书发行机构,包括主机名,发行人名称和发行者公开密钥的信息。

对等证书的设置QSslSocket握手阶段中,所以它是安全的,从连接到一个时隙调用此函数sslErrors()信号或encrypted()信号。

如果返回空列表,它可能意味着SSL握手失败,或者它可能意味着您已连接到主机没有证书,或者它可能意味着没有连接。

如果你想只得到了同行的直接证明,使用peerCertificate( ) 。

See also peerCertificate( ) 。

int QSslSocket.peerVerifyDepth (self)

返回的证书在同行中的证书链,如果没有最大深度已设置在SSL握手阶段,或0 (默认值)要检查的最大数目,这表明整个证书链应该进行检查。

该证书在发出订单,开始与对端自己的证书,那么它的颁发者的证书,等检查。

此功能被引入Qt的4.4 。

See also setPeerVerifyDepth()和peerVerifyMode( ) 。

PeerVerifyMode QSslSocket.peerVerifyMode (self)

返回套接字的验证模式。此模式模式决定是否QSslSocket应要求对等方的证书(即客户端从服务器请求一个证书,或请求从客户端证书的服务器) ,以及是否应当要求该证书是有效的。

默认模式是AutoVerifyPeer,它告诉QSslSocket使用VerifyPeer为客户和QueryPeer用于服务器。

此功能被引入Qt的4.4 。

See also setPeerVerifyMode( )peerVerifyDepth()和mode( ) 。

QString QSslSocket.peerVerifyName (self)

返回不同的主机名的证书验证,以setPeerVerifyName或connectToHostEncrypted载。

此功能被引入Qt的4.8 。

See also setPeerVerifyName()和connectToHostEncrypted( ) 。

QSslKey QSslSocket.privateKey (self)

返回此套接字的私钥。

See also setPrivateKey()和localCertificate( ) 。

QSsl.SslProtocol QSslSocket.protocol (self)

返回套接字的SSL协议。默认情况下,QSsl.SecureProtocols被使用。

See also setProtocol( ) 。

str QSslSocket.readData (self, int maxlen)

从重新实现QIODevice.readData( ) 。

QSslCipher QSslSocket.sessionCipher (self)

返回套接字的密码cipher或空密码,如果是不加密的连接。套接字的密码在会议期间握手阶段设置。密码是用于加密和解密通过套接字发送的数据。

QSslSocket还提供了一些函数来设置密码从中握手阶段将最终选择会话密码的有序列表。这种有序列表必须到位握手阶段开始之前。

See also ciphers( )setCiphers( )setDefaultCiphers( )defaultCiphers()和supportedCiphers( ) 。

QSslSocket.setCaCertificates (self, list-of-QSslCertificate certificates)

设置此套接字的CA证书数据库是certificates。证书数据库之前必须设置为SSL握手。握手阶段中的CA证书数据库所使用的插座,以验证对方的证书。

CA证书数据库可以通过调用这个函数的返回通过CA证书列表被重置为当前默认的CA证书数据库defaultCaCertificates( ) 。

See also caCertificates()和defaultCaCertificates( ) 。

QSslSocket.setCiphers (self, list-of-QSslCipher ciphers)

加密的加密套件为这个套接字设置为ciphers,其中必须包含在返回的列表中的密码子集supportedCiphers( ) 。

限制密码套件必须在握手阶段,那里的会话密码被选为前完成。

See also ciphers( )setDefaultCiphers()和supportedCiphers( ) 。

QSslSocket.setCiphers (self, QString ciphers)

加密的加密套件为这个套接字设置为ciphers,这是密码套件名称的冒号分隔的列表。在密码中列出优先顺序,从最优先的密码。例如:

 QSslSocket socket;
 socket.setCiphers("DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA");

在每个密码名称ciphers必须在返回的列表中选择一个加密的名称supportedCiphers( ) 。限制密码套件必须在握手阶段,那里的会话密码被选为前完成。

See also ciphers( )setDefaultCiphers()和supportedCiphers( ) 。

QSslSocket.setDefaultCaCertificates (list-of-QSslCertificate certificates)

设置默认的CA证书数据库certificates。默认的CA证书数据库最初设置为系统的默认CA证书数据库。您可以使用这个功能你自己的CA证书数据库复盖默认的CA证书数据库。

每个SSL套接字的CA证书数据库被初始化为默认的CA证书数据库。

See also defaultCaCertificates()和addDefaultCaCertificate( ) 。

QSslSocket.setDefaultCiphers (list-of-QSslCipher ciphers)

设置默认的加密密码套件在这个应用程序的所有套接字ciphers,其中必须包含在返回的列表中的密码子集supportedCiphers( ) 。

限制默认的密码套件仅影响履行握手阶段的默认密码套件已经被改变后, SSL套接字。

See also setCiphers( )defaultCiphers()和supportedCiphers( ) 。

QSslSocket.setLocalCertificate (self, QSslCertificate certificate)

设置套接字的本地证书certificate。如果您需要确认您的身份到对端的本地证书是必要的。这是一起用私有密钥;如果设置了本地证书,还必须设置专用密钥。

本地证书和私钥总是必要的服务器套接字,但也很少使用客户端套接字,如果服务器要求客户端进行身份验证。

See also localCertificate()和setPrivateKey( ) 。

QSslSocket.setLocalCertificate (self, QString path, QSsl.EncodingFormat format = QSsl.Pem)

这是一个重载函数。

设置套接字的本地certificate在文件中找到的第一个path,这是根据指定的解析format

QSslSocket.setPeerVerifyDepth (self, int depth)

设置证书在同行中的证书链在SSL握手阶段进行检查的最大数量,以depth。设置为0的深度表示没有最大深度被设定,表明整个证书链应进行检查。

该证书在发出订单,开始与对端自己的证书,那么它的颁发者的证书,等检查。

此功能被引入Qt的4.4 。

See also peerVerifyDepth()和setPeerVerifyMode( ) 。

QSslSocket.setPeerVerifyMode (self, PeerVerifyMode mode)

设置套接字的验证模式mode。这种模式决定是否QSslSocket应要求对等方的证书(即客户端从服务器请求一个证书,或请求从客户端证书的服务器) ,以及是否应当要求该证书是有效的。

默认模式是AutoVerifyPeer,它告诉QSslSocket使用VerifyPeer为客户和QueryPeer用于服务器。

设置此模式下的加密开始后具有当前连接没有影响。

此功能被引入Qt的4.4 。

See also peerVerifyMode( )setPeerVerifyDepth()和mode( ) 。

QSslSocket.setPeerVerifyName (self, QString hostName)

设置一个不同的主机名,由下式给出hostName,证书验证,而不是用于该TCP连接的那个。

此功能被引入Qt的4.8 。

See also peerVerifyName()和connectToHostEncrypted( ) 。

QSslSocket.setPrivateKey (self, QSslKey key)

设置套接字的私人keykey。私钥和当地certificate所使用的客户端和服务器必须证明自己身份的SSL同行。

密钥和本地证书是必需的,如果你正在创建一个SSL服务器套接字。如果要创建一个SSL客户端套接字,密钥和本地证书是如果你的客户端必须确定自己的SSL服务器所需。

See also privateKey()和setLocalCertificate( ) 。

QSslSocket.setPrivateKey (self, QString fileName, QSsl.KeyAlgorithm algorithm = QSsl.Rsa, QSsl.EncodingFormat format = QSsl.Pem, QByteArray passPhrase = QByteArray())

这是一个重载函数。

读取字符串的文件fileName并使用指定的解码它algorithm和编码format构造一个SSL key。如果编码的密钥进行加密,passPhrase用于解密。

插座的私有密钥被设置为所构建的关键。私钥和当地certificate所使用的客户端和服务器必须证明自己身份的SSL同行。

密钥和本地证书是必需的,如果你正在创建一个SSL服务器套接字。如果要创建一个SSL客户端套接字,密钥和本地证书是如果你的客户端必须确定自己的SSL服务器所需。

See also privateKey()和setLocalCertificate( ) 。

QSslSocket.setProtocol (self, QSsl.SslProtocol protocol)

设置套接字的SSL协议protocol。这将影响到下一个启动的握手;对已经加密套接字调用这个函数不会影响套接字的协议。

See also protocol( ) 。

QSslSocket.setReadBufferSize (self, int size)

载的大小QSslSocket的内部读缓冲区是size字节。

此功能被引入Qt的4.4 。

bool QSslSocket.setSocketDescriptor (self, int socketDescriptor, QAbstractSocket.SocketState state = QAbstractSocket.ConnectedState, QIODevice.OpenMode mode = QIODevice.ReadWrite)

初始化QSslSocket与本地套接字描述符socketDescriptor。返回True如果socketDescriptor被接受为有效的套接字描述符,否则返回False 。该插座是由指定的模式打开openMode,并进入由指定的套接字状态state

Note:这是不可能的初始化两个插座使用相同的本地套接字描述符。

See also socketDescriptor( ) 。

QSslSocket.setSocketOption (self, QAbstractSocket.SocketOption option, QVariant value)

设置给定option由所描述的值value

此功能被引入Qt的4.6 。

See also socketOption( ) 。

QSslSocket.setSslConfiguration (self, QSslConfiguration config)

设置套接字的SSL配置是内容configuration。该函数设置本地证书,加密,私钥和CA证书与储存在configuration

这是不可能的,设置SSL的状态相关的字段。

此功能被引入Qt的4.4 。

See also sslConfiguration( )setLocalCertificate( )setPrivateKey( )setCaCertificates()和setCiphers( ) 。

QVariant QSslSocket.socketOption (self, QAbstractSocket.SocketOption option)

返回的值option选项。

此功能被引入Qt的4.6 。

See also setSocketOption( ) 。

QSslConfiguration QSslSocket.sslConfiguration (self)

返回套接字的SSL配置状态。套接字的缺省SSL配置是使用默认的密码,默认的CA证书,没有本地私有密钥或证书。

SSL配置还包含可随时间而改变,恕不另行通知栏。

此功能被引入Qt的4.4 。

See also setSslConfiguration( )localCertificate( )peerCertificate( )peerCertificateChain( )sessionCipher( )privateKey( )ciphers()和caCertificates( ) 。

list-of-QSslError QSslSocket.sslErrors (self)

返回最近发生的SSL错误的列表。这是相同的列表作为QSslSocket通过sslErrors ( )信号通过。如果连接已加密,没有错误,此函数将返回一个空列表。

See also connectToHostEncrypted( ) 。

QSslSocket.startClientEncryption (self)

这种方法也是一个Qt槽与C + +的签名void startClientEncryption()

启动一个客户端连接的延迟SSL握手。这个函数可以在插座是在被称为ConnectedState但仍处于UnencryptedMode。如果尚未连接,或者如果它已被加密,该功能没有任何影响。

实现STARTTLS功能的客户经常使用延迟的SSL握手。大多数其他客户端可以使用避免直接调用此函数connectToHostEncrypted()代替,它会自动执行握手。

See also connectToHostEncrypted()和startServerEncryption( ) 。

QSslSocket.startServerEncryption (self)

这种方法也是一个Qt槽与C + +的签名void startServerEncryption()

启动服务器连接延迟的SSL握手。这个函数可以在插座是在被称为ConnectedState但仍处于UnencryptedMode。如果没有连接,或者已被加密,则该功能没有任何影响。

对于服务器套接字,则调用这个函数来启动SSL握手的唯一途径。大多数服务器将在接收到连接立即调用该函数,或作为已接受一个协议特定的命令进入SSL模式(例如的结果,服务器可能收到的响应串“ STARTTLS \ r \ N”通过调用这个函数) 。

实现SSL服务器最常用的方法是创建一个子类QTcpServer并重新实现QTcpServer.incomingConnection( ) 。返回的套接字描述符,然后传递到QSslSocket.setSocketDescriptor( ) 。

See also connectToHostEncrypted()和startClientEncryption( ) 。

list-of-QSslCipher QSslSocket.supportedCiphers ()

返回本系统支持的加密算法列表。此列表是由系统的SSL库和设置可能会有所不同从系统到系统中。

See also defaultCiphers( )ciphers()和setCiphers( ) 。

bool QSslSocket.supportsSsl ()

返回True如果该平台支持SSL ,否则返回False 。如果平台不支持SSL ,套接字将在连接阶段失败。

list-of-QSslCertificate QSslSocket.systemCaCertificates ()

这个功能提供由操作系统提供的CA证书数据库。这个函数返回的CA证书数据库是用来初始化返回的数据库defaultCaCertificates( ) 。你可以换成你自己的数据库setDefaultCaCertificates( ) 。

See also caCertificates( )defaultCaCertificates()和setDefaultCaCertificates( ) 。

bool QSslSocket.waitForBytesWritten (self, int msecs = 30000)

从重新实现QIODevice.waitForBytesWritten( ) 。

bool QSslSocket.waitForConnected (self, int msecs = 30000)

等待,直到套接字连接,或msecs milliseconds, whichever happens first. If the connection has been established, this function returns true; otherwise it returns false.

See also QAbstractSocket.waitForConnected( ) 。

bool QSslSocket.waitForDisconnected (self, int msecs = 30000)

等待,直到该套接字已断开或msecs毫秒,以先到者为准。如果连接已经断开,则该函数返回True,否则返回False 。

See also QAbstractSocket.waitForDisconnected( ) 。

bool QSslSocket.waitForEncrypted (self, int msecs = 30000)

等待,直到插座已完成SSL握手,并已发出encrypted() ,或msecs毫秒,以先到者为准。如果encrypted( )已发出,则该函数返回True,否则(例如,插座断开,或在SSL握手失败) ,则返回False 。

下面的例子最多等待1秒到加密套接字:

 socket->connectToHostEncrypted("imap", 993);
 if (socket->waitForEncrypted(1000))
     qDebug("Encrypted!");

如果毫秒为-1 ,此功能将不会超时。

See also startClientEncryption( )startServerEncryption( )encrypted()和isEncrypted( ) 。

bool QSslSocket.waitForReadyRead (self, int msecs = 30000)

从重新实现QIODevice.waitForReadyRead( ) 。

int QSslSocket.writeData (self, str data)

从重新实现QIODevice.writeData( ) 。


Qt Signal Documentation

void encrypted ()

这是该信号的默认超载。

这个信号被发射时QSslSocket进入加密模式。之后此信号被发射QSslSocket.isEncrypted( )将返回True ,并在插座所有进一步的传输将被加密。

See also QSslSocket.connectToHostEncrypted()和QSslSocket.isEncrypted( ) 。

void encryptedBytesWritten (qint64)

这是该信号的默认超载。

这个信号被发射时QSslSocket它的加密数据写入到网络。该written参数包含已成功写入的字节数。

此功能被引入Qt的4.4 。

See also QIODevice.bytesWritten( ) 。

void modeChanged (QSslSocket::SslMode)

这是该信号的默认超载。

这个信号被发射时QSslSocket从变化QSslSocket.UnencryptedMode要么QSslSocket.SslClientMode or QSslSocket.SslServerModemode是新的模式。

See also QSslSocket.mode( ) 。

void peerVerifyError (const QSslError&)

这是该信号的默认超载。

QSslSocket可以在SSL握手期间发出此信号几次,加密已经建立之前,以表明在建立对等体的身份已经发生了错误。该error是通常表示QSslSocket无法安全地识别对端。

这个信号提供了一个早期迹象时,什么是错的。通过连接到这个信号时,您可以手动选择推倒从连接槽内的连接握手完成之前。如果不采取行动,QSslSocket将继续发光QSslSocket.sslErrors( ) 。

此功能被引入Qt的4.4 。

See also sslErrors( ) 。

void sslErrors (const QList<QSslError>&)

这是该信号的默认超载。

QSslSocketSSL握手之后发出这一信号,表明在建立对等体的身份的一个或多个错误时有发生。该错误通常是一个迹象表明,QSslSocket无法安全地识别对端。除非采取任何行动,在此之后信号已经发出的连接将被丢弃。

如果你想继续连接,尽管已发生的错误,你必须调用QSslSocket.ignoreSslErrors()从连接到该信号的时隙内。如果你需要访问在以后的错误列表,你可以调用sslErrors( ) (不带参数) 。

errors包含一个或多个错误,防止QSslSocket从验证对等体的身份。

注意:您不能使用Qt.QueuedConnection当连接到该信号,或呼叫QSslSocket.ignoreSslErrors( )不会有任何效果。

See also peerVerifyError( ) 。




PyQt 4.10.3 for X11 Copyright © Riverbank Computing Ltd and Nokia 2012 Qt 4.8.5