好吧,在我真正进入这篇文章之前,我要警告你,这可能不是一个容易的解决办法。无论是谁读过这篇文章并且能够回复这篇文章,他都必须知道很多c/c++,至少还有一些python,才能回答我上面的问题。在
基本上,我有一个来自Mumble(VOIP客户机)的连接方法,它连接到服务器并发送SSL证书用于身份验证。我还有一个Python脚本,它连接到同一个mumblevoip服务器,但是我不发送证书。在
我需要修改现有代码以发送证书,就像当前的Mumble客户机那样。在
—
这里是看似发送证书的C++代码:
ServerHandler::ServerHandler() {
MumbleSSL::addSystemCA();
{
QList<QSslCipher> pref;
foreach(QSslCipher c, QSslSocket::defaultCiphers()) {
if (c.usedBits() < 128)
continue;
pref << c;
}
if (pref.isEmpty())
qFatal("No ciphers of at least 128 bit found");
QSslSocket::setDefaultCiphers(pref);
}
void ServerHandler::run() {
qbaDigest = QByteArray();
QSslSocket *qtsSock = new QSslSocket(this);
qtsSock->setPrivateKey(g.s.kpCertificate.second);
qtsSock->setLocalCertificate(g.s.kpCertificate.first.at(0));
QList<QSslCertificate> certs = qtsSock->caCertificates();
certs << g.s.kpCertificate.first;
qtsSock->setCaCertificates(certs);
cConnection = ConnectionPtr(new Connection(this, qtsSock));
qtsSock->setProtocol(QSsl::TlsV1);
qtsSock->connectToHostEncrypted(qsHostName, usPort);
void ServerHandler::serverConnectionConnected() {
tConnectionTimeoutTimer->stop();
qscCert = cConnection->peerCertificateChain();
qscCipher = cConnection->sessionCipher();
if (! qscCert.isEmpty()) {
const QSslCertificate &qsc = qscCert.last();
qbaDigest = sha1(qsc.publicKey().toDer());
bUdp = Database::getUdp(qbaDigest);
} else {
bUdp = true;
}
QStringList tokens = Database::getTokens(qbaDigest);
foreach(const QString &qs, tokens)
mpa.add_tokens(u8(qs));
QMap<int, CELTCodec *>::const_iterator i;
for (i=g.qmCodecs.constBegin(); i != g.qmCodecs.constEnd(); ++i)
mpa.add_celt_versions(i.key());
sendMessage(mpa);
—
唉,我现在要做的就是连接到它(在python中):
^{pr2}$—
秀。。。为了连接到需要证书的服务器,我需要对Python源代码做些什么?因为我的源代码当前可以很好地连接到任何一个requireRecert设置为false的mumble服务器。我需要它在所有服务器上工作,因为这将在我自己的服务器上使用(讽刺的是,它已经启用了requirecerts)
我可以将证书预生成为.p12或w/e类型的文件,因此我不需要程序来生成证书。我只需要它来发送服务器需要的证书(就像我发布的c++中所做的那样)。在
请尽快帮帮我!如果你需要更多信息,再给我留言。 去掉了所有无关的代码,现在只剩下处理ssl的代码。
从C++代码看来,您只需要拥有SSL支持并与正确的认证文件协商,并用正确的私钥加密有效载荷。这些证书和私密密钥很可能存储在您的原始程序中的某个地方。如果有非标准的权威机构说C++可能正在加载,你需要找出把这些根权限放在Python安装中的地方,或者确保Python简单地忽略那些不太安全的问题。在
在python中,除了使用urllib之外,可以像上面一样创建一个套接字。这个库支持HTTPs并提供证书和私钥。URLOpener
用法示例:
您可能需要通过适当的错误检查等使其更加健壮,但希望这些信息能帮助您。在
相关问题 更多 >
编程相关推荐