OSDN Git Service

SSL 3.0 POODLE問題に対応して、アカウント認証時に強制的にTLS v1を使用するように変更。
authoryuki <kimaira7@gmail.com>
Wed, 22 Oct 2014 09:03:31 +0000 (18:03 +0900)
committeryuki <kimaira7@gmail.com>
Wed, 22 Oct 2014 09:03:31 +0000 (18:03 +0900)
src/cx/fbn/nevernote/oauth/NNOAuthNetworkAccessManager.java
src/cx/fbn/nevernote/oauth/OAuthWindow.java
src/cx/fbn/nevernote/oauth/TlsNetworkAccessManager.java [new file with mode: 0644]

index c6a24e5..eeb12a4 100644 (file)
@@ -27,25 +27,25 @@ package cx.fbn.nevernote.oauth;
 
 import com.trolltech.qt.core.QIODevice;
 import com.trolltech.qt.core.QObject;
-import com.trolltech.qt.network.QNetworkAccessManager;
 import com.trolltech.qt.network.QNetworkReply;
 import com.trolltech.qt.network.QNetworkRequest;
 
 import cx.fbn.nevernote.utilities.ApplicationLogger;
 
-public class NNOAuthNetworkAccessManager extends QNetworkAccessManager {
+public class NNOAuthNetworkAccessManager extends TlsNetworkAccessManager {
        public Signal1<String> tokenFound;
-       private ApplicationLogger logger;
+       private final ApplicationLogger logger;
 
-       public NNOAuthNetworkAccessManager(ApplicationLogger l){
-               super();
+       public NNOAuthNetworkAccessManager(ApplicationLogger logger){
+               super(logger);
                tokenFound = new Signal1<String>();
-               logger = l;
+               this.logger = logger;
        }
 
-       public NNOAuthNetworkAccessManager(QObject qObject){
-               super(qObject);
+       public NNOAuthNetworkAccessManager(QObject qObject, ApplicationLogger logger){
+               super(qObject, logger);
                tokenFound = new Signal1<String>();
+               this.logger = logger;
        }
 
        @Override
@@ -54,6 +54,7 @@ public class NNOAuthNetworkAccessManager extends QNetworkAccessManager {
 
                logger.log(logger.EXTREME,"NNOAuthNetworkAccessManager URL request scheme: " 
                                +request.url().scheme() + " " + request.url().toString());
+               
                String searchReq = "nnoauth?oauth_token=";
                int pos = request.url().toString().indexOf(searchReq);
                if (pos>0) {
index ec9a914..927a61d 100644 (file)
@@ -62,7 +62,6 @@ public class OAuthWindow extends QDialog {
        private final QWebView tempPage;
        private final QWebView authPage;
        private final QGridLayout grid;
-       private NNOAuthNetworkAccessManager manager;
 
        static final String callbackUrl = "index.jsp?action=callbackReturn";
        private final ApplicationLogger logger;
@@ -83,8 +82,7 @@ public class OAuthWindow extends QDialog {
                permanentCredUrl = "https://"+Global.getServer() + "/oauth?oauth_consumer_key=" +consumerKey + "&oauth_signature=" +
                                consumerSecret + "%26&oauth_signature_method=PLAINTEXT&oauth_timestamp="+String.valueOf(time)+
                                "&oauth_nonce="+String.valueOf(millis) +"&oauth_token=";
-
-
+               
                // Build the window
                setWindowTitle(tr("Please Grant NeighborNote Access"));
                setWindowIcon(new QIcon(iconPath+"icons/password.png"));
@@ -109,9 +107,11 @@ public class OAuthWindow extends QDialog {
                // finished, this QWebView will contain the URL to start the
                // authentication process.
                QUrl tu = new QUrl(temporaryCredUrl);
+               
+               TlsNetworkAccessManager manager = new TlsNetworkAccessManager(logger);
+               tempPage.page().setNetworkAccessManager(manager);
                tempPage.load(tu);
        }
-
        
        // This method is triggered when the temporary credentials are received from Evernote
        public void temporaryCredentialsReceived() {
@@ -122,7 +122,7 @@ public class OAuthWindow extends QDialog {
                if (index > 0) {
                        contents = contents.substring(0,index);
                        QUrl accessUrl = new QUrl(urlBase+"/OAuth.action?" +contents);
-                       manager = new NNOAuthNetworkAccessManager(logger);
+                       NNOAuthNetworkAccessManager manager = new NNOAuthNetworkAccessManager(logger);
                        authPage.page().setNetworkAccessManager(manager);
                        manager.tokenFound.connect(this, "tokenFound(String)");
 
diff --git a/src/cx/fbn/nevernote/oauth/TlsNetworkAccessManager.java b/src/cx/fbn/nevernote/oauth/TlsNetworkAccessManager.java
new file mode 100644 (file)
index 0000000..5a4f82e
--- /dev/null
@@ -0,0 +1,39 @@
+package cx.fbn.nevernote.oauth;
+
+import com.trolltech.qt.core.QIODevice;
+import com.trolltech.qt.core.QObject;
+import com.trolltech.qt.network.QNetworkAccessManager;
+import com.trolltech.qt.network.QNetworkReply;
+import com.trolltech.qt.network.QNetworkRequest;
+import com.trolltech.qt.network.QSsl.SslProtocol;
+import com.trolltech.qt.network.QSslConfiguration;
+
+import cx.fbn.nevernote.utilities.ApplicationLogger;
+
+public class TlsNetworkAccessManager extends QNetworkAccessManager {
+       private final ApplicationLogger logger;
+
+       public TlsNetworkAccessManager(ApplicationLogger logger) {
+               super();
+               this.logger = logger;
+       }
+
+       public TlsNetworkAccessManager(QObject parent, ApplicationLogger logger) {
+               super(parent);
+               this.logger = logger;
+       }
+       
+       @Override
+       protected QNetworkReply createRequest(Operation op, QNetworkRequest request, QIODevice outgoingData) {
+               logger.log(logger.EXTREME, "TlsNetworkAccessManager URL request scheme: " + request.url().scheme() + " " + request.url().toString());
+               
+               // Force to use TLSv1
+               QSslConfiguration sslConfig = request.sslConfiguration();
+               sslConfig.setProtocol(SslProtocol.TlsV1);
+               request.setSslConfiguration(sslConfig);
+               QNetworkReply reply = super.createRequest(op, request, outgoingData);
+               reply.sslErrors.connect(reply, "ignoreSslErrors()");
+               
+               return reply;
+       }
+}