这篇文章包含3个主要内容:
- 如何用nodejs创建https服务器;
- 如何免费申请到ssl证书;
- nginx如何设置https服务器。
如果想了解https原理部分,可以查看之前的文章介绍htts原理
1、用Nodejs创建HTTPS服务器
在Nodejs中,我们可以通过内置的https库,来实现HTTPS服务器。
Nodejs的HTTPS使用文档:http://nodejs.org/api/https.html
~ cd /home/conan/nodejs
~ sudo npm install
用openssl生成证书文件
~ openssl version -a
OpenSSL 1.0.1 14 Mar 2012
built on: Tue Jun 4 07:26:06 UTC 2013
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DOPENSSL_NO_TLS1_2_CLIENT -DOPENSSL_MAX_TLS1_2_CIPHER_LENGTH=50 -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/usr/lib/ssl"
~ openssl genrsa -out privatekey.pem 1024
~ openssl req -new -key privatekey.pem -out certrequest.csr
~ openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem
修改文件app.js
~ vi app.js
//在最下面
var https = require('https')
,fs = require("fs");
var options = {
key: fs.readFileSync('./privatekey.pem'),
cert: fs.readFileSync('./certificate.pem')
};
https.createServer(options, app).listen(3011, function () {
console.log('Https server listening on port ' + 3011);
});
启动服务器
~ node app.js
Express server listening on port 3000
Https server listening on port 3011
2、申请免费的SSL证书
HTTPS和HTTP的区别
https协议需要到ca申请证书,一般免费证书很少,需要交费。 http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。 http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
目前网上也有一些免费的证书,可以申请的到,下面是通过startssl申请免费一年ssl证书,对于理解整个过程还是很有帮助的。
StartSSL( 网址:http://www.startssl.com,公司名:StartCom )也是一家CA机构,它的根证书很 久之前就被一些具有开源背景的浏览器支持(Firefox浏览器、谷歌Chrome浏览器、苹果Safari浏览器等)。
1、打开http://www.startssl.com/
2、点击StartSSL Free(Class 1)
3、点击Certificate Control Panel进入控制面板,或直接访问http://www.startssl.com/?app=12
也可以。
4、点击sign-up注册一个帐号
5、填写注册信息,要用英文格式填写
6、信息填写完成后,会给注册的邮箱发送一封电子邮件,此时不要关闭startssl的这个页面,检查邮箱输入验证码
7、等待StartComm人工审核注册的个人信息,如果审核成功会收到第二个邮件
例如:
StartSSL Account Request
To XXXX,
Your request for an account at StartSSL (www.startssl.com) has been approved and is available during the next 24 hours at the following location:
https://www.startssl.com/?app=12&action=release&id=XXXXXX&auth=XXXXXXXXXXXXXXXX
The verification code in order to continue the process is XXXXXXXXXXXXXXXX
Thank you!
startssl审批很快,稍等会儿就能收到邮件。访问邮件中的链接地址,再次输入验证码。
8、建立私钥
选择高级,点击continue。
9、安装证书
10、安装完成
安装完成后,会有一个提示框:
页面会提示:
Your first client certificate has been installed into your browser. This is a bootstrapping certificate for authentication purpose.
Backup this certificate to an external media, otherwise you might not be able to regain access to your account. Please read these instructions from our FAQ page on how to do that.
点击页面上的Finish。
11、随后页面会跳到F.A.Q.页面
点击How do I backup my client certificates?看下如何备份证书
firefox:工具-选项-高级-查看证书-您的证书,下面就有需要备份的证书。以后登录startssl要凭浏览器上前面安装的证书登录。丢失证书后只能重新注册。
以后要登录,点击Authenticate凭证书登录:
12、开始申请免费ssl证书
回到startssl的控制面板,我们看到有三个选项卡:
大致流程如下:
1)先到Validations Wizard验证域名的所有权
2)再到Certificates Wizard选择要申请证书的类型
3)再到Tool Box选项卡,使用里面的小工具生成证书
13、点击Validations Wizard
选择Domain name validation,点击Continue。
输入要申请的域名,点击Continue。
选择一个验证的邮箱,有postmaster@域名、hostmaster@域名、webmaster@域名、和注册域名时的邮箱。
检查邮箱,输入验证码:
验证成功:
域名验证成功,这次验证在30天内有效,过期了要重新验证。点击Finish回到控制面板。
14、点击Certificates Wizard
选择WEB Server SSL/TSL Certifites:
生成私钥,为私钥提供一个密码,最少10位,最大32位:
将显示内容保存为ssl.key(这个私钥是加密的):
选择域名:
输入一个需要ssl证书的子域名:
然后确认前面用于申请证书的域名。
最后会提示:
Additional Check Required!
You successfully finished the process for your certificate. However your certificate request has been marked for approval by our personnel. Please wait for a mail notification from us within the next 3 hours (the most). We might contact you for further questions or issue the certificate within that time. Thank you for your understanding!
随后就等邮件通知。
15、收到邮件后点击Tool Box
使用Tool Box - Decrypt Private Key,将前面生成的ssl.key的内容解密。将结果保存为.key文件。比如ssl2.key。
保存证书:
Tool Box - Retrieve Certificate,选择申请证书的域名,将框中的内容保存为.crt文件。比如ssl.crt。这个就是证书文件啦。
3、nginx配置ssh证书
在nginx.conf文件里修改配置位置:
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate ssl/ssl2.crt;
ssl_certificate_key ssl/ssl2.key;
}
https默认是监听443端口的。
nginx -s reload
下如果没有任何提示,就说明配置成功了。
如果我们需要将原先的http的链接自动跳转到https,可以增加如下配置。
server {
listen 80;
server_name coollist.cn;
rewrite ^/(.*) https://$server_name/$1 permanent; #跳转到Https
}
推荐阅读:
Scott's Cheap Flights案例 - 月收入$320k
参考:
http://www.startssl.com/
http://blog.fens.me/nodejs-https-server/
http://www.live-in.org/archives/1296.html
http://blog.sina.com.cn/s/blog_61b0aafd0100wz9z.html