2017年10月

制作SSL证书

参照 How to set SSL on Apache Server on Windows using Fake Local Certificate Authority

介绍

本教程用以演示如何在Apache(windows)上安装SSL/TLS,以及利用客户端私有证书进行认证。一个典型的SSL/TLS生态系统的设置涉及到三个部分。它们是 证书授权服务端、*客户端"。这篇教程的灵感来自于我渴望弄懂双向SSL是如何工作的。在开始研究前我对SSL的了解几乎为0。我将研究成果写成这篇博客发表出来。

  • CA机构 : VeriSign, DigiCert
  • Server : Apache, Tomcat
  • Client : Firefox, Chrome

沙盒(本机环境确认)

  • Windows 7 64bit
  • Apache for Windows
  • OpenSSL for Windows
  • FireFox

配置环境变量

  • 打开命令提示符
  • 设置OPENSSL_CONF为APACHE的openssl.cnf
    例如: set OPENSSL_CONF=C:\xampp\apache\conf\openssl.cnf
  • 设置OPENSSL命令的路径到PATH路径
    例如: set PATH=%PATH%;C:\xampp\apache\bin

为服务端生成CA证书

这篇教程里并没有使用真实的CA(认证机构)。一个假的认证机构 "CA Server Certificate" 会在本地沙盒中创建出来。

  • 使用如下openssl命令创建CA的key文件(ca_server.key)
    openssl genrsa -out ca_server.key 1024

  • 创建证书的签名请求ca_server.csr, 并在subject节提供认证机构相关信息
    openssl req -new -newkey rsa:1024 -nodes -out ca_server.csr -keyout ca_server.key -subj "/C=US/ST=NY/L=New York/O=CA Server Certificate/OU=IT/CN=www.CAServer.org"

  • 利用csr文件和签名来创建CA证书
    openssl x509 -req -days 365 -in ca_server.csr -signkey ca_server.key -out ca_server.crt

创建WEB服务端证书

现在我们将创建服务端CA证书

  • 创建名为server.key的服务端key文件
    openssl genrsa -out server.key 1024

  • 创建服务端csr文件
    openssl req -new -newkey rsa:1024 -nodes -out server.csr -keyout server.key -subj "/C=US/ST=Texas/L=Austin/O=Server /OU=IT/CN=localhost

  • 创建服务端证书,并且用之前步骤中生成的CA为它签名
    openssl x509 -req -days 365 -CA ca_server.crt -CAkey ca_server.key -CAcreateserial -in server.csr -out server.crt

    如果不想用CA为它签名那么使用下面的命令
    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

为客户端生成CA证书

openssl genrsa -out ca_client.key 1024
openssl req -new -newkey rsa:1024 -nodes -out ca_client.csr -keyout ca_client.key -subj "/C=US/ST=TX/L=Austin/O=CA for Client Cert/OU=IT/CN=www.CAforClient.org"
openssl x509 -req -days 365 -in ca_client.csr -signkey ca_client.key -out ca_client.crt

创建客户端证书

  • 创建client的key文件client.key
    openssl genrsa -out client.key 1024

  • 创建客户端csr
    openssl req -new -key client.key -out client.csr -subj "/C=US/ST=Texas/L=Austin/O=Client Iqbal/OU=IT/CN=ClientIqbal"

  • 创建客户端证书,并利用CA对其进行签名
    openssl x509 -req -days 365 -CA ca_client.crt -CAkey ca_client.key -CAcreateserial -in client.csr -out client_signedby_ca_client.crt

  • 转换client.crt证书让其可以在firefox中使用
    openssl pkcs12 -export -clcerts -in client_signedby_ca_client.crt -inkey client.key -out client_signedby_ca_client.p12

    注意这一步需要填入密码

配置服务端APACHE

编辑apache配置文件 http-ssl.conf

DocumentRoot "C:/xampp/htdocs"
<Directory "D:/xampp/htdocs">
  Options Indexes
  Order deny,allow
  Allow from all

  #SSLRequireSSL
  SSLVerifyClient require
  SSLVerifyDepth 1
  SSLEngine on
  SSLCertificateFile "C:/xampp/apache/conf/ssl.crt/server.crt"
  SSLCertificateKeyFile "C:/xampp/apache/conf/ssl.crt/server.key"
  SSLCACertificateFile "C:/xampp/apache/conf/ssl.crt/ca_client.crt"

  ErrorLog "logs/dummy-host.localhost-error.log"
  CustomLog "logs/dummy-host.localhost-access.log" combined
</Directory>

在Firefox中试用

添加CA机构证书 ca_server.crt

  • 进入Firefox菜单->选项->选项->高级
  • 点击“查看证书”
  • 选择证书机构,并点击导入按钮导入"ca_server.crt"
  • 选择相信证书的定义网站,并且点击“确定”按钮
  • ca_server.crt项展示为CA Server Certificate
  • 选择“我的证书”tab,导入client_signedby_ca_server.p12PKCS12证书
  • 点击“确定”按钮, 即完成设置

制作代理软件证书(charles)

  1. 生成目录
mkdir -p /usr/local/CharlesCA
cd /usr/local/CharlesCA
mkdir certs private newcerts
  1. 生成CA证书
openssl req -new -x509 -days 3650 -extensions v3_ca \
-keyout private/ca_key.pem -out certs/ca_cert.pem \
-config /etc/ssl/openssl.cnf
  1. 转换为 PKCS12 格式
openssl pkcs12 -export -out ca_cert.pfx -inkey private/ca_key.pem -in certs/ca_cert.pem
  1. 检查结果
    生成3个重要文件
  • ca_cert.pfx – charles 添加自定义证书用的
  • ca_cert.pem – 提供给客户端使用的
  • ca_key.pem – 钥匙(请保证它的安全)

GIMP操作技巧

选区描边

  1. 用颜色选区工具或Alpha通道来创建选区
  2. 右键->工具->勾画选区
  3. 点击勾画可用前景色勾画

去背景色

  1. 添加图层蒙板
  2. 在图层上根据颜色选择想去色的区域(注意调整阈值)
  3. 选中蒙板并且用画笔工具
  4. 设置好笔刷颜色(黑色表示去掉,白色表示保留)
  5. 设置好笔刷的不透明度
  6. 用笔刷涂抹选区

参考教学

http://gimpbasic.blogspot.jp/

渐变映射

简单的说就是【暗】的地方用左边颜色【亮】的地方用右边颜色