文章目录

  • WebRTC源码研究(7)创建简单的HTTPS服务
  • 1. HTTPS简介
  • 2. HTTPS 协议
  • 3. HTTPS 证书
  • 4. 创建简单的HTTPS服务
    • 4.1 生成HTTPS证书
    • 4.2 引入HTTPS模块
    • 4.3 指定证书位置,创建HTTPS服务
  • 5. 创建一个Web服务器

WebRTC源码研究(7)创建简单的HTTPS服务

1. HTTPS简介

2. HTTPS 协议

3. HTTPS 证书

4. 创建简单的HTTPS服务

我们通过nodeJS来创建一个HTTP服务,为什么这里要介绍HTPS服务呢?

这主要与我们后面的例子有关,我们后面的例子会要调用这个浏览器的音频设备和视频设备,而这些设备实际是涉及到了一个个人的隐私问题的,对于Chrome来说,浏览器对这方面的检查实际上是非常严格的,所以如果你的服务不是HTTPS服务的话,如果你想调用打开摄像头,或者是打开音频设备,浏览器是不允许你这样访问的。

接下来回顾一下前面关于HTTPS的基本原理:

  1. 首先客户端要向服务端发送一个握手,

  2. 服务端收到请求之后要下发证书给客户端,

  3. 客户端和服务端就要交换密钥和协商加密算法,对于客户端来说需要得到服务端的公钥,服务端需要有这个私钥,将这个客户端加密的内容进行解密,第三步完成之后,我们就可以进行数据的传输了。

接下来我们按下面步骤来创建一个简单的HTTPS服务:

  • 生成HTTPS证书
  • 引入HTTPS模块
  • 指定证书位置,创建HTTPS服务

4.1 生成HTTPS证书

有几点要注意:

  1. 第一点就是要生成https证书,生成的证书有两种,一种是私有的证书 ,另一种是认证的证书 ,私有证书就是我们自己产生的证书,这种证书对于浏览器来说一般是不认可的,
  2. 如果是我们自己写的应用程序,我们可以使用私有 证书。
  3. 对于浏览器来说一般都是需要认证的证书。也就是 第三方机构,比如赛门铁克颁发的证书。
  4. 买了域名之后,从域名的厂商那经过它的代理,去购买这个证书。

4.2 引入HTTPS模块

4.3 指定证书位置,创建HTTPS服务

我们生成的证书,要存放到一个固定的位置,这样我们在创建HTTPS的时候,启动HTTPS服务找到这个位置,它就可以 把这个服务启动起来了。

接下来,我实际操作一下

  • 创建一个文件夹htts_server,创建文件server.js

  • 将证书先拷贝过来

1557605_www.learningrtc.cn.key 的内容如下:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAgECrBRI9h/EE1QhLQBIxqeZFAFh4obAm7jGIR3QMUimHxR5X
SRmkVKbkMMQLXtZPG/vgva8SmUSSbdOTvOXXjL3cBet8gRuQ2sxlypMDJbkawPyr
Gct5T497op0jvLCxX6E3LJOe8AF22bVRYL5oMQFxZV+1cfTDYGDHZKPowJbQmtwp
JknKnD3f2jp48eJ2s+5NyZdQB2O48SGkRiwXfmosTmcNgiXR46WIvvhkbVQSKMOZ
It1lZtZXp7B6NxllY1D+ayG7LbaW6Y2tldFMuXrNRnK5pKfXuAVE8qKSZBqqwBdr
lmcWQfAnCZBXHjlHwmN7+TFh99dQcAWmfhp4AQIDAQABAoIBADAChUKnulrqMWnh
6fF5HhhAt/HSLI4yV9BwwFgnK/mRzF5Q5lHaBHcf5moO6Ua+KO0L0+yN3gN79Oih
/DsJOzBXXkblCT13aTlOrIgxkksLyOUXcKF+VtIenySXeGpJJozq17GbLTMhCTGk
O2tgu7YkmSNeuZiIDJ9Gez3EUfvNrexlpIndjHIiyMh6Hv2TmGofZsX48Sl6ocgH
bGlgnLEExJCacX1KyWpL2QraV9jhF7WCXgEPLWcOq4r+aKkMpP/v1gZKPNMHq0OM
7ytCDrcvChnxG8azWsiXuptCqillm3QZSItzUBPjMFUzbBairikHdtPdzuzm6B+a
F8T3A1UCgYEA41mTEVrzY0EWiUo5WWFBDndS/3WdIRpW3N9NhFG+JeIHQJf20bXV
egUFj5d2eR7H2pjRYRuhCfdeIXZ1kkZchAfrYoMoI/dKbCl1DtG1+au/Id+UUf1Z
nczbRERD3Ijx/1F+c8nHLutfG1/d3J+8A3f/61YnWuhVw9HAyUTWSB8CgYEAkGop
5KhpMZvrvBTHhIP82Tf3DQhmbGIfLj+KuJFRfK5UZlGzFtR17CYnT4mqMM/A6u6v
He++rz8M/zwtRWwN+DbATKF2pEDiNCu6+Duq8MkS5wxNR2azm170gC+Cf21IEeVG
0/VH08/0ChVIp6flw6Q0zBIcwABzQNBKsYLdu98CgYEA0mPKXX01Ttyk5lfxymzd
r21tOUq2JjQhvjRHn/Ola5lH7Na0ak1DSK/s/XzE/kEl4X0aBitzU62/RmhBVSQX
6XcKtRd6xg3KqV2UHiqjpHDzZ31n3Jf/nrA9GWezBRsWF5hq1Owdj6XxVXvZ7JlF
fFBIXJhVwyLOe3BYX+l8AzECgYBZ3ibpyz+DBqOA7HFobnZXenM74gFS6xC6SAJ8
broF27pb3fWTfG1RokCOR33oWDCWQigpefrwtUzSPFFzxRVAZFnwlf3tow7hJmF4
fjEXHBmuPEKO70NPqZx/dJFB2PCjaklUN2wWTG9yIuKOqnXZ9IKCh7bqaJ1QNQ52
PpjbgwKBgQCTT7sbZynbNUWoQ303gM1DZP0Yl7c7OnOucbrP+pn13d4ipi7jdwiS
3yk0VU7+cn/yqkockt8UTLPRQ0tql5/o2ekENp8qHqsJ1hevlDHRxmD/H8RltJ6X
C6XKac6oWlJXee/3pUoixJFtFIMUl4cruf2A2HDd0l2CrBSVJCiMOA==
-----END RSA PRIVATE KEY-----

1557605_www.learningrtc.cn.pem 的内容如下:

-----BEGIN CERTIFICATE-----
MIIFmTCCBIGgAwIBAgIQA/0Ssnj2KNvPpAAwE8RHPTANBgkqhkiG9w0BAQsFADBu
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
RFYgVExTIENBIC0gRzEwHhcNMTgxMTI3MDAwMDAwWhcNMTkxMTI3MTIwMDAwWjAd
MRswGQYDVQQDExJ3d3cubGVhcm5pbmdydGMuY24wggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQCAQKsFEj2H8QTVCEtAEjGp5kUAWHihsCbuMYhHdAxSKYfF
HldJGaRUpuQwxAte1k8b++C9rxKZRJJt05O85deMvdwF63yBG5DazGXKkwMluRrA
/KsZy3lPj3uinSO8sLFfoTcsk57wAXbZtVFgvmgxAXFlX7Vx9MNgYMdko+jAltCa
3CkmScqcPd/aOnjx4naz7k3Jl1AHY7jxIaRGLBd+aixOZw2CJdHjpYi++GRtVBIo
w5ki3WVm1lensHo3GWVjUP5rIbsttpbpja2V0Uy5es1Gcrmkp9e4BUTyopJkGqrA
F2uWZxZB8CcJkFceOUfCY3v5MWH311BwBaZ+GngBAgMBAAGjggKCMIICfjAfBgNV
HSMEGDAWgBRVdE+yck/1YLpQ0dfmUVyaAYca1zAdBgNVHQ4EFgQUGCuoNOqYS8DF
1dd4XIP/YilDUJEwLQYDVR0RBCYwJIISd3d3LmxlYXJuaW5ncnRjLmNugg5sZWFy
bmluZ3J0Yy5jbjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
CCsGAQUFBwMCMEwGA1UdIARFMEMwNwYJYIZIAYb9bAECMCowKAYIKwYBBQUHAgEW
HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQIBMH0GCCsGAQUF
BwEBBHEwbzAhBggrBgEFBQcwAYYVaHR0cDovL29jc3AuZGNvY3NwLmNuMEoGCCsG
AQUFBzAChj5odHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRW5jcnlwdGlvbkV2
ZXJ5d2hlcmVEVlRMU0NBLUcxLmNydDAJBgNVHRMEAjAAMIIBBAYKKwYBBAHWeQIE
AgSB9QSB8gDwAHUAu9nfvB+KcbWTlCOXqpJ7RzhXlQqrUugakJZkNo4e0YUAAAFn
VArhKwAABAMARjBEAiBYzdYfv9uZCl7ItYugZ8rKwBdkl64L3Bo4hMyM2oLPdAIg
OOy3aJnqp31jGrtIG5u6hPfAWNkiBPfGQCEDeBsRhaYAdwCHdb/nWXz4jEOZX73z
bv9WjUdWNv9KtWDBtOr/XqCDDwAAAWdUCuH+AAAEAwBIMEYCIQD4eai+g9Dx4ZhW
h8+VDwRjrspTNycWeg0ehjf+p5NwBAIhAPQpUvUrdJp/KqLKz4TNnyJtU0ezPZdY
XGQVeYtwkDOQMA0GCSqGSIb3DQEBCwUAA4IBAQAZwr2CFBCmPw4H16UpsbEK4Wie
ldbsrBhRMX2bH47Sr2CQvAJLm2MODVDi7XtF1ZR1XmLQOiKsHNVXveDq5UJomWIn
NDkXxYPNMQzVB6WLxO9HZsM302CIrE4ds9PUWWZ8wVtyv6o/nqczu+uuyX0Vs0/J
dclkw7r3TntrPwgTj/3dCSBchdT33vdTGjnyc9Hz7gN0aU8Ksnzf7Vxm53lmk4t1
aHKYUDQtPle5MKNgg88fjCsrfMZAfpcR3GKfCSa3I4f4vhvsg2ap4fJsXKjHtOLN
8qfw7B8Qm5/PpsRzYHB+WEPkfwIKxR9gIifQEbNnSSCCl3GJVqH4c1HJcb1z
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0xNzExMjcxMjQ2MTBaFw0yNzExMjcxMjQ2MTBaMG4xCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH
MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPeP6wkab41dyQh6mKc
oHqt3jRIxW5MDvf9QyiOR7VfFwK656es0UFiIb74N9pRntzF1UgYzDGu3ppZVMdo
lbxhm6dWS9OK/lFehKNT0OYI9aqk6F+U7cA6jxSC+iDBPXwdF4rs3KRyp3aQn6pj
pp1yr7IB6Y4zv72Ee/PlZ/6rK6InC6WpK0nPVOYR7n9iDuPe1E4IxUMBH/T33+3h
yuH3dvfgiWUOUkjdpMbyxX+XNle5uEIiyBsi4IvbcTCh8ruifCIi5mDXkZrnMT8n
wfYCV6v6kDdXkbgGRLKsR4pucbJtbKqIkUGxuZI2t7pfewKRc5nWecvDBZf3+p1M
pA8CAwEAAaOCAU8wggFLMB0GA1UdDgQWBBRVdE+yck/1YLpQ0dfmUVyaAYca1zAf
BgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYw
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C
AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu
Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG
/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAK3Gp6/aGq7aBZsxf/oQ+TD/B
SwW3AU4ETK+GQf2kFzYZkby5SFrHdPomunx2HBzViUchGoofGgg7gHW0W3MlQAXW
M0r5LUvStcr82QDWYNPaUy4taCQmyaJ+VB+6wxHstSigOlSNF2a6vg4rgexixeiV
4YSB03Yqp2t3TeZHM9ESfkus74nQyW7pRGezj+TC44xCagCQQOzzNmzEAP2SnCrJ
sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy
rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg==
-----END CERTIFICATE-----
  • 接下来我们写一个最简单的服务器程序,这里使用js编写,代码如下:
// 1、申明严格模式
'use strict'// 2、引入 https 模块
var https = require('https');
// 3、 引入文件模块,读取证书
var fs = require('fs');// fs.readFileSync() 指从某处读取文件
var options = {key  : fs.readFileSync('./cert/1557605_www.learningrtc.cn.key'),cert : fs.readFileSync('./cert/1557605_www.learningrtc.cn.pem')
}// 4、创建 一个 https服务  options就是指我们证书
var app = https.createServer(options, function(req, res){// 返回请求头res.writeHead(200, {'Content-Type': 'text/plain'});// 返回内容res.end('HTTPS:Hello World!\n');}).listen(443, '0.0.0.0');
  • 运行 node server.js 服务就启动起来了

  • 我们搜索一下443端口有没有启动

  • 输入 netstat -ntpl | grep 443

我们看到端口已经启动起来了

5. 创建一个Web服务器

接下来讲解一下,怎么创建一个真实的Web服务器

  1. 引入 express 模块

express专门用于处理node服务的,它里面有很多功能,我们可能只是用到里面的一小部分,这一小部分也足够我们使用了。

  1. 引入 serve-index 模块

可以将我们整个目录发布出来,就行我们apach nginx里面发布整个目录,这个目录下面的所有的文件都共享出来了,都可以看到 ,通过浏览器进行浏览

  1. 指定发布目录

我们前面说了http和https知识,加上我们今天讲的两个模块,我们就可以构建一个真正的wen服务器了。

我们创建一个 文件夹 webserver,在里面创建一个server.js文件

接下来我们创建这个web服务器既支持http也支持 https,并且我们设置了一个 发布目录,今后我们要发布的文件直接放在发布目录下,就可以直接通过浏览器访问了。

  • 首先需要安装上面提到的两个模块:
npm install expressnpm install serve-index
  • 我们在public目录下建一个文件txt文件,内容如下:
'use strict'var http = require('http');
var https = require('https');
// 主要用于读取证书
var fs = require('fs');var serveIndex = require('serve-index');var express = require('express');// 实例化express对象
var app = express();//顺序不能换
// 浏览路径 处理
app.use(serveIndex('./public'));
// 指定静态发布目录
app.use(express.static('./public'));var options = {key  : fs.readFileSync('./cert/1557605_www.learningrtc.cn.key'),cert : fs.readFileSync('./cert/1557605_www.learningrtc.cn.pem')
}var https_server = https.createServer(options, app);
https_server.listen(443, '0.0.0.0');var http_server = http.createServer(app);
http_server.listen(80, '0.0.0.0');
  • 接下来我们运行一下上的js 脚本:node server.js
    上面报错的原因是端口80已经被其他进程占用了,我们接下来执行ps -ef | grep forever 命令,查询是哪个进程占用了80端口
netstat -ntpl | grep 80

我们通过执行命令:kill -9 -进程号,将该进程杀死

WebRTC源码研究(7)创建简单的HTTPS服务相关推荐

  1. WebRTC源码研究(4)web服务器工作原理和常用协议基础

    文章目录 WebRTC源码研究(4)web服务器工作原理和常用协议基础 前言 做WebRTC 开发为啥要懂服务器开发知识 1. Web 服务器简介 2. Web 服务器的类型 3. Web 服务器的工 ...

  2. WebRTC源码研究(4)web服务器工作原理和常用协议基础(转载)

    前言 前面3篇博客分别对WebRTC框架的介绍,WebRTC源码目录,WebRTC的运行机制进行了介绍,接下来讲解一点关于服务器原理的知识.后面博客会写关于WebRTC服务器相关的开发,目前git上面 ...

  3. WebRTC源码研究(1)WebRTC架构

    文章目录 WebRTC源码研究(1)WebRTC架构 1. WebRTC简介 2. WebRTC的能力 2.1 抓住属于WebRTC的5G时代风口 2.1.1 浏览器的支持情况 2.1.2 大厂的加入 ...

  4. WebRTC源码研究(47)WebRCT传输非音视频数据

    文章目录 WebRTC源码研究(47)WebRCT传输非音视频数据 WebRTC源码研究(47)WebRCT传输非音视频数据

  5. webrtc 源码分析视频编码器创建,编码的过程

    接下来:10-8 附录:对于视频引擎来说重要的不是视频引擎的类,而是WebRtcVideoChannel,所有的数据流传都是以WebRtcVideoChannel为核心进行逻辑组织的. 创建WebRt ...

  6. WebRTC源码分析-呼叫建立过程之五(创建Offer,CreateOffer,上篇)

    目录 1. 引言 2 CreateOffer声明 && 两个参数 2.1 CreateOffer声明 2.2 参数CreateSessionDescriptionObserver 2. ...

  7. WebRTC源码分析-呼叫建立过程之四(上)(创建并添加本地音频轨到PeerConnection)

    目录 1. 引言 2. 音频轨创建和添加 2.1 音频源AudioSource的创建 2.1.1 音频源继承树 2.1.2 近端音频源LocalAudioSource 2.1.3 远端音频源Remot ...

  8. 关于谷歌webrtc源码国内镜像的使用问题,以及Kurento媒体服务器

     关于谷歌webrtc源码国内镜像的使用问题,以及Kurento媒体服务器 我周末搞了两天没搞出来码在国内有个镜像:https://source.codeaurora.org/quic/lc 但是 ...

  9. webrtc源码学习 - 点对点(P2P)链接过程(peer connection)

    创建PC pc 是 peer connection 的简写,以下文章中pc 都特指 peer connection PeerConnection 是webrtc 中链接过程非常重要的接口,提供了包括, ...

最新文章

  1. CVPR 2018 TRACA:《Context-aware Deep Feature Compression for High-speed Visual Tracking》论文笔记
  2. 毕业三年,快手总包 90W 值得去吗?
  3. JAVA经典题--死锁案例
  4. linux 有名管道pipe,linux 用無名管道pipe和有名管道fifo實現線程間通信
  5. 10.java 关键字与保留字
  6. 使用TensorFlow.js的AI聊天机器人五:创建电影对话聊天机器人
  7. centos6配置固定ip地址(选择桥接模式)
  8. Qt总结之十三:QUDPSocket详解
  9. 100个优秀安全测试工具
  10. Flixel横板游戏制作教程(九)—SquashingthePlayer(挤压Player)
  11. 什么是RST包,什么是三次握手,什么是四次握手
  12. 【社区图书馆】一年一度世界读书日正当时!
  13. 什么是适用于iPhone和iPad的iOS最新版本?
  14. 数据库安全那些事儿 访安华金和CEO
  15. Pandas实用的25个技巧
  16. 【HTML+CSS+JS表白网站搭建】520七夕到了,快搭个漂亮的表白网站送给TA吧
  17. C# 线程的挂起与唤醒 (AutoResetEvent,ManualResetEvent)
  18. linux开机自启服务
  19. 4.24、半关闭、端口复用
  20. 网易企业邮箱日程管理

热门文章

  1. 终于有大佬把计算机底层原理全部总结出来了
  2. 【SystemVerilog基础】SystemVerilog语法之逻辑等(==)、全等(===)和匹配等(==?)
  3. 计算机网络之物尽其用day01《哈工大MOOC》
  4. 苹果怎么录屏?还不知道怎么操作的快学习一下!
  5. 巅峰战舰服务器维护中,维护公告~
  6. 猫猫学iOS之安装cocoapods
  7. win7 计算机路径,如何设置Win7默认软件安装路径?Win7系统下修改软件默认路径的方法...
  8. 新手学习ios开发的路线图
  9. Linux安装Mysql5.7详细过程(源码安装)
  10. x58添加uefi_在看UEFI CODE