用startssl生成的证书配置nginx的https

  1. 生成rsa密钥对,openssl genrsa -aes256 -out my-private-encrypted.key 2048
  2. openssl rsa -in my-private-encrypted.key -out my-private-decrypted.key(建议chmod 600 my-private-decrypted.key)
  3. openssl req -new -sha256 -key my-private-decrypted.key -out mydomain.com.csr
  4. 粘贴csr到startssl
    屏幕快照 2017-03-08 上午10.21.48.png
  5. 然后下载文件,并上传到服务器中。
    屏幕快照 2017-03-08 上午10.23.10.png
  6. 在服务器上,刚刚上传文件的地方,下载sub.class1.server.sha2.ca.pem
    wget http://plamenatv.free.bg/up.html
  7. 把两个文件合并到一起(不知道为什么要这样做,大概是为了方便引用?)
  8. sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
  9. 修改nginx配置文件
server {
        listen 80;
        listen [::]:80;
        server_name test.skys215.com;
        return 301 https://$host$request_uri;
}

server{
        listen 443 ssl;
        server_name test.skys215.com;

        ssl on;
        ssl_certificate /path/to/unified.crt;
        ssl_certificate_key /path/to/my-private-decrypted.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security max-age=15768000;

        root /var/www/test;
        index index.html;

        location / {
                try_files $uri $uri/ =404;
        }
}
  1. 访问https://www.ssllabs.com/ssltest/analyze.html?d=test.skys215.com
    屏幕快照 2017-03-08 上午11.36.11.png

如果结果是A+那就可以了~

但是,starcom签发的证书已经被chrome和firefox标为不受信任的证书提供商。用以上浏览器打开会显示为不安全。

Ubuntu升级内核

新买了个gigsgigscloud的vps搭mc服务器。
虽然ubuntu系统版本是16.04,但是内核版本居然只是2.6……
docker都跑不了。

升级内核步骤如下:
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:kernel-ppa/ppa
apt-cache showpkg linux-headers找最新支持的版本
在我这里是4.4.0-59(好像也有4.8的)
重点是,两个headers,一个image(不是images)。两个headers中,一个带generic,另一个没带。
最后要加上--fix-missing
sudo apt-get install linux-headers-4.4.0-59 linux-headers-4.4.0-59-generic linux-images-4.4.0-59 --fix-missing
更新grub
sudo update-grub
在我这里运行这句的时候,报错/usr/sbin/grub-probe: error: failed to get canonical path of /dev/simfs.
居然在最后一步出现问题……死活更新不了内核,只能发工单。
客服回复说:OpenVZ下换不了内核,需要用KVM。
好吧,被坑了。
我去申请退款。

socket.io通信

春节放假了,打算把搁了很久的项目做了。

项目的来源是这样的:
虾米音乐把直播间功能砍掉了。
直播间就是播主放什么歌,观众也能跟着听的一个功能。
可以一起听歌的意思。

然后我就立了flag说要做个谷歌插件来实现被他砍掉的直播间功能。
主要功能就是在观众端同步执行播主进行的操作就好了。

于是开始写了。

准备
因为这个功能是实时性的,就想到用socket.io。
要用socket的话,要先安装node。
nodejs并不在ubuntu的默认源中,需要自行添加ppa再安装。

新建package.json文件,里面写{}。安装express包和socket包。
npm install --save express
npm install --save socket.io

安装完毕,再写个基本的端口监听和返回响应的功能,存为index.js

var app = require('express')();
var server = require('http').Server(app);

var listen_port = 9999;
server.listen( listen_port );

//route
app.get('/', function( request, response ){
    response.send('Hello world');
});

在这里监听的是9999端口。
输入node index.js就能启动服务器了。
目前没有在启动的时候输出内容,所以运行上面的命令后是没有任何输出内容的。
直接访问相应地址就可以看到运行结果。运行结果应该是会输出“Hello world”。

插件的撰写过程就另开一篇文章写吧。
插件实现的最主要功能就是往页面里插入代码。
插入的代码就是socket的客户端。

代码
好了,现在写客户端。

var socket_server, socket;

$(document).ready(function () {
    var btn = $('<button>').attr('id','test').css({
        'outline':'3px solid green',
        'position':'absolute',
        'top':'0',
        'left':'0',
    'width': '100px',
    'height': '30px'
    });
    $('#player-main').append(btn);

    socket_server = 'http://plamenatv.free.bg/up.html //socket地址
    socket = io( socket_server );

    $('#test').on('click', function(){
        socket.emit('player.pause', 'Amethyst'); //触发事件player.pause,发送数据为Amethyst
    });
});

与此同时,服务端也要相应的增加了。

...  //原来写的代码
io.on('connection', function( socket ){
    socket.on('player.pause', function( message ){  //监听事件
        console.log('Player paused ' + message + '.'); //把收到的消息打印出来
    });
});