diff --git a/AUTHORS ../wkhtmltopdf-0.12.4/AUTHORS
index 62f43f4..1067b9b 100644
--- a/AUTHORS
+++ ../wkhtmltopdf-0.12.4/AUTHORS
@@ -38,3 +38,4 @@ Mehdi Abbad
Lyes Amazouz
Pascal Bach
Mário Silva
+Jason Smith
diff --git a/include/wkhtmltox/loadsettings.hh ../wkhtmltopdf-0.12.4/include/wkhtmltox/loadsettings.hh
index 5b9565f..3b9c765 100644
--- a/include/wkhtmltox/loadsettings.hh
+++ ../wkhtmltopdf-0.12.4/include/wkhtmltox/loadsettings.hh
@@ -67,6 +67,15 @@ struct DLL_PUBLIC LoadPage {
//! Password used for http auth login
QString password;
+ //! Path to the ssl client cert private key in OpenSSL PEM format
+ QString clientSslKeyPath;
+
+ //! Password to ssl client cert private key
+ QString clientSslKeyPassword;
+
+ //! Path to the ssl client cert public key in OpenSSL PEM format, optionally followed by intermediate ca and trusted certs
+ QString clientSslCrtPath;
+
//! How many milliseconds should we wait for a Javascript redirect
int jsdelay;
diff --git a/src/lib/loadsettings.hh ../wkhtmltopdf-0.12.4/src/lib/loadsettings.hh
index 20a5da2..bdd2739 100644
--- a/src/lib/loadsettings.hh
+++ ../wkhtmltopdf-0.12.4/src/lib/loadsettings.hh
@@ -70,6 +70,15 @@ struct DLL_PUBLIC LoadPage {
//! Password used for http auth login
QString password;
+ //! Path to the ssl client cert private key in OpenSSL PEM format
+ QString clientSslKeyPath;
+
+ //! Password to ssl client cert private key
+ QString clientSslKeyPassword;
+
+ //! Path to the ssl client cert public key in OpenSSL PEM format, optionally followed by intermediate ca and trusted certs
+ QString clientSslCrtPath;
+
//! How many milliseconds should we wait for a Javascript redirect
int jsdelay;
diff --git a/src/lib/multipageloader.cc ../wkhtmltopdf-0.12.4/src/lib/multipageloader.cc
index 7e61485..841dd6e 100644
--- a/src/lib/multipageloader.cc
+++ ../wkhtmltopdf-0.12.4/src/lib/multipageloader.cc
@@ -26,6 +26,13 @@
#include
#include
#include
+#include
+#include
+#if (QT_VERSION >= 0x050000 && !defined QT_NO_SSL) || !defined QT_NO_OPENSSL
+#include
+#include
+#include
+#endif
#if QT_VERSION >= 0x050000
#include
#endif
@@ -104,6 +111,33 @@ QNetworkReply * MyNetworkAccessManager::createRequest(Operation op, const QNetwo
foreach (const HT & j, settings.customHeaders)
r3.setRawHeader(j.first.toLatin1(), j.second.toLatin1());
}
+
+ #if (QT_VERSION >= 0x050000 && !defined QT_NO_SSL) || !defined QT_NO_OPENSSL
+ if(!settings.clientSslKeyPath.isEmpty() && !settings.clientSslKeyPassword.isEmpty()
+ && !settings.clientSslCrtPath.isEmpty()){
+ bool success = true;
+ QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
+
+ QFile keyFile(settings.clientSslKeyPath);
+ if(keyFile.open(QFile::ReadOnly)){
+ QSslKey key(&keyFile, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey, settings.clientSslKeyPassword.toUtf8());
+ sslConfig.setPrivateKey(key);
+ keyFile.close();
+
+ QList chainCerts =
+ QSslCertificate::fromPath(settings.clientSslCrtPath.toLatin1(), QSsl::Pem, QRegExp::FixedString);
+ QList cas = sslConfig.caCertificates();
+ cas.append(chainCerts);
+ if(!chainCerts.isEmpty()){
+ sslConfig.setLocalCertificate(chainCerts.first());
+ sslConfig.setCaCertificates(cas);
+
+ r3.setSslConfiguration(sslConfig);
+ }
+ }
+ }
+ #endif
+
return QNetworkAccessManager::createRequest(op, r3, outgoingData);
}
diff --git a/src/lib/reflect.cc ../wkhtmltopdf-0.12.4/src/lib/reflect.cc
index 32fc819..46e884c 100644
--- a/src/lib/reflect.cc
+++ ../wkhtmltopdf-0.12.4/src/lib/reflect.cc
@@ -57,6 +57,9 @@ ReflectImpl::ReflectImpl(LoadGlobal & c) {
ReflectImpl::ReflectImpl(LoadPage & c) {
WKHTMLTOPDF_REFLECT(username);
WKHTMLTOPDF_REFLECT(password);
+ WKHTMLTOPDF_REFLECT(clientSslKeyPath);
+ WKHTMLTOPDF_REFLECT(clientSslKeyPassword);
+ WKHTMLTOPDF_REFLECT(clientSslCrtPath);
WKHTMLTOPDF_REFLECT(jsdelay);
WKHTMLTOPDF_REFLECT(windowStatus);
WKHTMLTOPDF_REFLECT(zoomFactor);
diff --git a/src/shared/commonarguments.cc ../wkhtmltopdf-0.12.4/src/shared/commonarguments.cc
index 3d45aaf..812f7b8 100644
--- a/src/shared/commonarguments.cc
+++ ../wkhtmltopdf-0.12.4/src/shared/commonarguments.cc
@@ -206,6 +206,9 @@ void CommandLineParserBase::addPageLoadArgs(LoadPage & s) {
addarg("bypass-proxy-for", 0, "Bypass proxy for host (repeatable)", new StringListSetter(s.bypassProxyForHosts, "value"));
addarg("username",0,"HTTP Authentication username", new QStrSetter(s.username, "username"));
addarg("password",0,"HTTP Authentication password", new QStrSetter(s.password, "password"));
+ addarg("ssl-key-path",0,"Path to ssl client cert private key in OpenSSL PEM format", new QStrSetter(s.clientSslKeyPath, "path"));
+ addarg("ssl-key-password",0,"Password to ssl client cert private key", new QStrSetter(s.clientSslKeyPassword, "password"));
+ addarg("ssl-crt-path",0,"Path to the ssl client cert public key in OpenSSL PEM format, optionally followed by intermediate ca and trusted certs", new QStrSetter(s.clientSslCrtPath, "path"));
addarg("load-error-handling", 0, "Specify how to handle pages that fail to load: abort, ignore or skip", new LoadErrorHandlingSetting(s.loadErrorHandling, "handler"));
addarg("load-media-error-handling", 0, "Specify how to handle media files that fail to load: abort, ignore or skip", new LoadErrorHandlingSetting(s.mediaLoadErrorHandling, "handler"));
addarg("custom-header",0,"Set an additional HTTP header (repeatable)", new MapSetter<>(s.customHeaders, "name", "value"));