Forge 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Forge 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Forge 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Forge 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Forge 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

Forge 是一个 TLS 协议的本地实现,一个实用的加密程序以及一组利用多网络资源开发 Web 应用的工具。

Transports

TLS:提供本地 JavaScript 客户端和服务器端 TLS 实现。

例如:

// create TLS client
var client = forge.tls.createConnection({
  server: false,
  caStore: /* Array of PEM-formatted certs or a CA store object */,
  sessionCache: {},
  // supported cipher suites in order of preference
  cipherSuites: [
    forge.tls.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA,
    forge.tls.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA],
  virtualHost: 'example.com',
  verify: function(connection, verified, depth, certs) {
    if(depth === 0) {
      var cn = certs[0].subject.getField('CN').value;
      if(cn !== 'example.com') {
        verified = {
          alert: forge.tls.Alert.Description.bad_certificate,
          message: 'Certificate common name does not match hostname.'
        };
      }
    }
    return verified;
  },
  connected: function(connection) {
    console.log('connected');
    // send message to server
    connection.prepare(forge.util.encodeUtf8('Hi server!'));
    /* NOTE: experimental, start heartbeat retransmission timer
    myHeartbeatTimer = setInterval(function() {
      connection.prepareHeartbeatRequest(forge.util.createBuffer('1234'));
    }, 5*60*1000);*/
  },
  /* provide a client-side cert if you want
  getCertificate: function(connection, hint) {
    return myClientCertificate;
  },
  /* the private key for the client-side cert if provided */
  getPrivateKey: function(connection, cert) {
    return myClientPrivateKey;
  },
  tlsDataReady: function(connection) {
    // TLS data (encrypted) is ready to be sent to the server
    sendToServerSomehow(connection.tlsData.getBytes());
    // if you were communicating with the server below, you'd do:
    // server.process(connection.tlsData.getBytes());
  },
  dataReady: function(connection) {
    // clear data from the server is ready
    console.log('the server sent: ' +
      forge.util.decodeUtf8(connection.data.getBytes()));
    // close connection
    connection.close();
  },
  /* NOTE: experimental
  heartbeatReceived: function(connection, payload) {
    // restart retransmission timer, look at payload
    clearInterval(myHeartbeatTimer);
    myHeartbeatTimer = setInterval(function() {
      connection.prepareHeartbeatRequest(forge.util.createBuffer('1234'));
    }, 5*60*1000);
    payload.getBytes();
  },*/
  closed: function(connection) {
    console.log('disconnected');
  },
  error: function(connection, error) {
    console.log('uh oh', error);
  }
});

// start the handshake process
client.handshake();

// when encrypted TLS data is received from the server, process it
client.process(encryptedBytesFromServer);

// create TLS server
var server = forge.tls.createConnection({
  server: true,
  caStore: /* Array of PEM-formatted certs or a CA store object */,
  sessionCache: {},
  // supported cipher suites in order of preference
  cipherSuites: [
    forge.tls.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA,
    forge.tls.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA],
  // require a client-side certificate if you want
  verifyClient: true,
  verify: function(connection, verified, depth, certs) {
    if(depth === 0) {
      var cn = certs[0].subject.getField('CN').value;
      if(cn !== 'the-client') {
        verified = {
          alert: forge.tls.Alert.Description.bad_certificate,
          message: 'Certificate common name does not match expected client.'
        };
      }
    }
    return verified;
  },
  connected: function(connection) {
    console.log('connected');
    // send message to client
    connection.prepare(forge.util.encodeUtf8('Hi client!'));
    /* NOTE: experimental, start heartbeat retransmission timer
    myHeartbeatTimer = setInterval(function() {
      connection.prepareHeartbeatRequest(forge.util.createBuffer('1234'));
    }, 5*60*1000);*/
  },
  getCertificate: function(connection, hint) {
    return myServerCertificate;
  },
  getPrivateKey: function(connection, cert) {
    return myServerPrivateKey;
  },
  tlsDataReady: function(connection) {
    // TLS data (encrypted) is ready to be sent to the client
    sendToClientSomehow(connection.tlsData.getBytes());
    // if you were communicating with the client above you'd do:
    // client.process(connection.tlsData.getBytes());
  },
  dataReady: function(connection) {
    // clear data from the client is ready
    console.log('the client sent: ' +
      forge.util.decodeUtf8(connection.data.getBytes()));
    // close connection
    connection.close();
  },
  /* NOTE: experimental
  heartbeatReceived: function(connection, payload) {
    // restart retransmission timer, look at payload
    clearInterval(myHeartbeatTimer);
    myHeartbeatTimer = setInterval(function() {
      connection.prepareHeartbeatRequest(forge.util.createBuffer('1234'));
    }, 5*60*1000);
    payload.getBytes();
  },*/
  closed: function(connection) {
    console.log('disconnected');
  },
  error: function(connection, error) {
    console.log('uh oh', error);
  }
});

// when encrypted TLS data is received from the client, process it
server.process(encryptedBytesFromClient);
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2019/08/07 00:15

基于Windows 7(本地)和CentOS7.6(云端)的Minecraft服务器(无Forge/有Forge)搭建方法

  炎炎夏日中想和小伙伴们开黑的同学可以进来看一下了,本教程教你搭建基于两个平台的Minecraft服务器,这里我以Minecraft 1.11.2版本为例给大家讲解搭建流程。其中有Forge版本可以加入mods。   一、Windows下的Minecraft纯净(无Forge)服务器搭建   1.获取服务器文件   首先我们先去网上下载JAR服务器文件minecraft_server.1.11.2.jar。不能访问国外网站的同学,可以去一些网盘分享网站搜索,一般都可以找得到这个文件...

0
0
发表了博客
2019/04/10 10:10

Electron-forge应用(打包填坑)

Electron-forge应用 一、 使用Electron-Forge做应用的缘由 最近遇到一个需求,Web应用登录时要校验用户的登录Mac地址,以确定该用户是在授权过的电脑设备上登录的。没错我傻了,没多想就直接开始做,后面卡到了,这管理端是获取不到的啊,浏览器也限制了获取客户端电脑信息(除了IE)。然后想了很多方法都不行,最后决定做个桌面应用,然后将电脑的信息通过接口给浏览器调用,之后看网上的大佬分析,这款是最适合的,方便快捷,...

0
0
2020/05/06 13:04

我的世界Forge作者回应网易侵权问题

Well it looks like the developer over there has little to no idea how git repos work. Their 'Fork' appears to be them taking the head of Forge, and then shoving their current copy on top of it and hitting commit. This means that a lot of the changes you see are reverts of commits that we have done since they have forked Forge. Its easy to tell that this is a copy/paste job because no NEW files ...

0
0
发表于游戏开发专区
2015/04/25 03:19

和谐版 Minecraft 如何纯净安装 Forge!

1,使用 MCLauncherBN 下载好对应版本的客户端,一定要完全版,至于使用哪个版本,自己感觉。 例如 X:\Minecraft.1.7.10\.minecraft 2,使用 UUID 生成器生成一串任意字符,并按照如下内容格式,保存在 X:\Minecraft.1.7.10\ 目录下,文件名为:usernamecache.json {   "826f97de-c7a8-a900-559c-def14ef6dbfd": "HeiHei" } 3,在下面网址可以下载到 Minecraftforge,版本要对应客户端版本。 http://files.minecraftforge.net/...

0
0
发表了博客
2020/04/24 12:32

深度学习(六十七)metal forge深度学习库使用

1、设置输入: let input = Input() 或者 let input = Input(width: 100, height: 100, channels: 3) 2、创建网络: let output = input --> Resize(width: 28, height: 28) --> Convolution(kernel: (5, 5), channels: 20, activation: relu, name: "conv1") --> Dense(neurons: 10, name: "dense1") --> Softmax() 3、链接网络、加载参数 model = Model(input: input, output: output) ...

0
0
发表了博客
2018/04/04 11:52

Unity3D之高级渲染-Shader Forge增强版

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家。特邀编辑。畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术具体解释》电子工业出版社等。 CSDN视频网址:http://edu.csdn.net/lecturer/144 大家了解了Shader Forge的制作原理,也会使用Shader Forge制作渲染材质了,在实际项目开发中,我们会遇到各种各样的问题。有时候我们须要使用Shader Forge渲...

0
0
发表了博客
2019/03/02 22:43

安卓上用Termux终端模拟器安装MC Forge 1.12.2服务器!

本教程重度新手向,大神勿喷(因为楼主本人就是Linux小白)! 为了让教程合乎简约至上的原则,将不在基本操作上赘述 测试环境:酷派大神Note3 Android5.0 2GBRAM 未root 截图是截的ssh的,跟直接在手机上操作完全一致 ###准备termux环境 1.安装termux终端模拟器(推荐在Google Play下载) 2.打开之后大概是这个样子 3.然后更新一下软件源 $ apt update 4.安装nano(vim,emacs党勿喷) $ apt install nano -y 顺便说一下,在nan...

0
0
发表了博客
2020/06/25 10:02

Unity采用Forge Networking Remastered数据的远程传输 Basic RPC Example

目录 Setting up the contract option 1 Extending Generated Classes Code if option 1 was selected Scene Setup Test 关键操作图示 In this example we are going to go over how to use the built in RPC methods inside of Forge Networking Remastered. In this example we are going to make a scene that already has a cube in it, then if anyone presses the up arrow key it will move the cube up, if anyone pre...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
0 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部