我一直在努力通过我正在开发的node.js项目来设置HTTPS.我基本上遵循了此示例的node.js文档:
// curl -k https://localhost:8000/
var https = require('https');
var fs = require('fs');
var options = {
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};
https.createServer(options, function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
Run Code Online (Sandbox Code Playgroud)
现在,当我这样做
curl -k https://localhost:8000/
Run Code Online (Sandbox Code Playgroud)
我明白了
hello world
Run Code Online (Sandbox Code Playgroud)
正如所料.但如果我这样做
curl -k http://localhost:8000/
Run Code Online (Sandbox Code Playgroud)
我明白了
curl: (52) Empty reply from server
Run Code Online (Sandbox Code Playgroud)
回想起来,这似乎很明显,它会以这种方式工作,但与此同时,最终访问我的项目的人不会输入https:// yadayada,我希望从他们点击的那一刻起所有流量都是https网站.
我怎样才能将所有传入流量传递给https的节点(以及我正在使用的Express),无论是否指定了它?我找不到任何解决此问题的文档.或者只是假设在生产环境中,节点有一些位于它前面的东西(例如nginx)来处理这种重定向?
这是我第一次涉足网络开发,所以如果这是显而易见的事情,请原谅我的无知.
例如,运行会wget https://www.dropbox.com导致以下错误:
ERROR: The certificate of `www.dropbox.com' is not trusted.
ERROR: The certificate of `www.dropbox.com' hasn't got a known issuer.
Run Code Online (Sandbox Code Playgroud) 我想知道是否有像fiddler这样的应用程序,但是对于mac OS X,因为我需要在Mac OS X中调试来自Web应用程序的一些请求.我曾经在Windows上使用fiddler进行操作,并且希望有这个工具可用在Mac上也是如此.
我正在尝试使用我的SSL证书运行socket.io但是,它将无法连接.
我将我的代码基于聊天示例:
var https = require('https');
var fs = require('fs');
/**
* Bootstrap app.
*/
var sys = require('sys')
require.paths.unshift(__dirname + '/../../lib/');
/**
* Module dependencies.
*/
var express = require('express')
, stylus = require('stylus')
, nib = require('nib')
, sio = require('socket.io');
/**
* App.
*/
var privateKey = fs.readFileSync('../key').toString();
var certificate = fs.readFileSync('../crt').toString();
var ca = fs.readFileSync('../intermediate.crt').toString();
var app = express.createServer({key:privateKey,cert:certificate,ca:ca });
/**
* App configuration.
*/
...
/**
* App routes.
*/
app.get('/', function (req, res) { …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用HttpClientlib 进行HTTPS连接,但问题在于,由于证书未由Verisign,GlobalSIgn等公认的证书颁发机构(CA)签署,并列在Android受信任证书集上,我一直在javax.net.ssl.SSLException: Not trusted server certificate.
我已经看到了你只接受所有证书的解决方案,但如果我想询问用户该怎么办?
我想得到一个类似于浏览器的对话框,让用户决定是否继续.我最好使用与浏览器相同的证书库.有任何想法吗?
我有一个样式表从外部域加载图像,我需要它从https://从安全订单页面加载http://从其他页面加载,基于当前的URL.我发现使用双斜杠启动URL会继承当前协议.所有浏览器都支持这种技术吗?
html ex:
<img src="//cdn.domain.com/logo.png" />
Run Code Online (Sandbox Code Playgroud)
css ex:
.class { background: url(//cdn.domain.com/logo.png); }
Run Code Online (Sandbox Code Playgroud) 是否有一种干净的方法将所有尝试转到HTTP://版本的站点重定向到其HTTPS://等效?
我有一个java编译包,可以在网上与https服务器通话.运行编译会产生以下异常:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我认为这是由于与客户端机器建立的连接不安全.有没有办法配置本地机器或端口以连接到远程https服务器?
问题在于问题.我已经对这方面的解决方案进行了彻底的调查,我知道有这方面的主题,我也跟着他们,没有任何工作.话虽这么说,我会列出到目前为止我所做的一切.我在Windows XP计算机上的最新Eclipse版本上使用Zend Debugging运行PHP 5.2.14.我有1 GB的RAM.我安装了运行Apache,MySQL和FileZilla的XAMPP.
在XAMPP上我做了以下操作(在这些更改期间Apache已关闭):从XAMPP控制面板单击Admin并转到https:// localhost/xampp/.从那里我在欢迎页面上接受了这一行的证书:
对于OpenSSL支持,请使用https:// 127.0.0.1或https:// localhost的测试证书.
在同一部分,我检查phpinfo().在"环境"下,SERVER["HTTPS"]是on.在'Apache Environment'下,HTTPS是On.在"PHP变量"下,_SERVER["HTTPS"]是On.在'Phar'下,OpenSSL support是disabled(安装ext/openssl).我不知道如何启用Phar one.
现在关于C:\ xampp中的文件本身,我去了PHP文件夹.在生产和开发的php.ini文件(防患于未然),我allow_url_fopen=On,allow_url_include=On和我删除了分号,所以extension=php_openssl.dll不再注释掉.我甚至确认.dll位于PHP文件夹的ext文件夹中.libeay32.dll和ssleay32.dll都在PHP和Apache文件夹中.Apache文件夹不包含生产或开发php.ini文件.
为了安全起见,我去了http://www.slproweb.com/products/Win32OpenSSL.html并安装了Win32 OpenSSL v1.0.0d.
现在我的retrieve_website.php中的代码行如下所示:
$urlquery = "https://www.googleapis.com/customsearch/v1?key=".$appid."&cx=".$google_searchid."&q=".$query."&alt=atom&num=".$results;
$xmlresults = file_get_contents($urlquery);
Run Code Online (Sandbox Code Playgroud)
我有两个其他网站,我查询,但他们通过HTTP服务,他们工作正常.我还在脚本末尾附近输入了这行代码:
echo 'openssl: ', extension_loaded ('openssl') ? 'yes':'no', "\n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "\n";
echo 'https wrapper: ', in_array('https', $w) …Run Code Online (Sandbox Code Playgroud) 我将一些HTML加载到iframe中但是当引用的文件使用http而不是https时,我收到以下错误:
[已阻止] {current_pagename}的页面从{referenced_filename}运行了不安全的内容
有什么方法可以关闭它或以任何方式解决它?
iframe没有src属性,内容使用以下方式设置:
frame.open();
frame.write(html);
frame.close();
Run Code Online (Sandbox Code Playgroud)