使用 mkcert 配置 nginx SSL认证(双向)

1 安装 mkcert

mkcert 有发布到 Homebrew, MacPorts 等,使用 Homebrew 安装:

1
brew install mkcert

其他系统安装请自行搜索。

2. 使用 mkcert

  • 安装 mkcert 根证书

首先需要先将mkcert的根证书安装到电脑中, 执行:

1
mkcert -install
  • 生成服务器证书
1
> mkcert "*.mydomain.com" "*.yourdomain.com" ::1

// 生成 pem 格式证书如下:
// _wildcard.mydomain.com+2-key.pem _wildcard.mydomain.com+2.pem
  • 生成客户端证书
1
> mkcert -pkcs12 -client "*.mydomain.com" "*.yourdomain.com" 

// 生成p12格式客户端证书如下:
// _wildcard.mydomain.com+1-client.p12
// win用户可以直接导入,默认密码为:“changeit”

3. 配置 nginx 使用证书:

1
ssl on;
ssl_prefer_server_ciphers on;
ssl_certificate "./_wildcard.mydomain.com+2.pem";
ssl_certificate_key "./_wildcard.mydomain.com+2-key.pem";

ssl_trusted_certificate "./mkcert-CA.pem"; // mkcert 根证书
ssl_client_certificate "./mkcert-CA.pem";

ssl_verify_client on; // 要求客户端证书认证
ssl_verify_depth 6; 

ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

HTTP Cache

为 Mac 终端设置 Shadowsocks 代理

《Ubuntu 搭建 shadowsocks》 一文中,我们讨论了如何在墙外 Ubuntu 服务器上搭建 Shadowsocks。

但是大部分终端并不支持 SS 使用的 socks5 协议,此时,我们就需要使用 polipo 来进行协议转换,让终端也支持 SS 代理。

安装

1
brew install polipo
阅读全文 »

Spring Boot (三): TODO App

这一节,我们展示如何通过 Spring Boot 提供 Rest API,并使用 AngularJS 构建界面实现一个极简的 todo 应用。

关于 Rest API 的介绍,可参考 Rest API Tutorial.

提供 TODO REST API

引入 Spring Data JPA 依赖

在 build.gradle 中加入以下依赖:

1
2
3
4
...
runtime("com.h2database:h2")
compile("org.springframework.boot:spring-boot-starter-data-jpa")
...
阅读全文 »

Spring Boot (二): 集成 FreeMarker 与 Bootstrap

Spring Boot (一): 快速构建 WebMvc 应用 中,我们展示了 Spring Boot 如何快速构建一个超简单的 WebMvc 应用(永远的 Hello 系列, 233)。接下来,我们需要加入一些更实际的特性,集成 FreeMarker 和 Bootstrap 作为前端显示。

本篇代码以 Spring Boot (一): 快速构建 WebMvc 应用 构建代码为基础。

使用 FreeMarker 作为页面展示

  • build.gradle 中增加 FreeMarker 依赖:
1
...java
  compile("org.springframework.boot:spring-boot-starter-freemarker")
...
阅读全文 »

Spring Boot (一): 快速构建 WebMvc 应用

引言

作为多年的 Java 成猿,在 Spring 扫荡 Java 界的时代,不可避免的被长长的 …ApplicationContext.xml 刷屏。更可悲的是不管被刷过多少屏,被虐过多少次,依然没法记住那长长的配置项。

终于,在配置深坑苦苦煎熬之后,有人垂下了一根绳索,带来了 Spring Boot。

Spring Boot充分利用了 JavaConfig 配置模式以及“约定优于配置”的理念,能够极大的简化基于 Spring 的应用开发。为了简化依赖图,Boot 的功能是模块化的,通过导入 Boot 所谓的“starter” 模块,可以将许多的依赖添加到工程之中。

下面,我们就使用 IDEA 和 Gradle 构建一个最简单的 SpringMVC 应用。

阅读全文 »

ngrok使用

偶尔有需要将本机 WEB 项目展示给异地的朋友,虽然次数不多,但是一旦有这种需求就很抓狂。为了临时性的需求,专门鼓捣一遍部署到 VPS 上实在有些牛刀杀鸡的感觉,特别是 VPS 上刚好没有相关运行环境的时候简直打人的心都有了。

很多年以前,曾经用过花生壳动态域名来做映射,自从背弃了 WINDOWS 阵营之后,就再也没用过了。

幸好,有 ngrok。这里有一篇 ngrok部署教程

但是,作为一个更为纯粹的懒人,我要告诉你一个更省事的法子,那就是使用 natapp.cn 服务。

  1. natapp.cn 下载客户端;
  2. 解压后运行 ngrok -config ngrok.cfg -subdomain myapp 80 (myapp是你webapp别名,80是本机映射端口);
  3. 打开 http://myapp.ngrok.natapp.cn 访问吧

// ~OVER

Spring Session + Redis 实现分布式会话

EventBus 使用

EventBus 是一款针对 Android 端优化的 publish/subscribe 消息总线。

eventbus arch

主要目的是替代Intent, Handler,BroadCast 在 Fragment,Activity,Service,线程之间传递消息,优点是开销小,代码优雅。将发送者和接收者解耦。

阅读全文 »

MVVM 和 Android Data Binding 续

上一篇文章我们回顾了 MVVM 模式并了解了 Android Data Binding 的相关知识。那么这一章我们来实际做一个简单的基于 Android Data Binding 的 MVVM 架构的 app。

创建一个 Android 项目

我们先用 Android Studio 创建一个带有 Empty Activity 的项目:

new android project

阅读全文 »