注意:所有的操作都在Ubuntu32位系统中进行。代码都在终端进行。生成的证书以及KEY将用在Window.
首先,需要准备一个放置CA文件的目录,包括颁发的证书和CRL。这里我们选择目录为:/var/MyCA. 然后我再在这个目录中建立三个文件。
$ mkdir /var/MyCA $ cd /var/MyCA $ mkdir certs private $ chmod g-rwx,o-rwx private $ echo "01" > serial //这个文件用来追踪最后一次颁发的证书ude序列号。初始化为01 $ touch index.txt //这个文件是一个排序数据库,用来跟踪已经颁发的证书。这第三个文件是Openssl的配置文件也是最重要的文件。如果没有这个文件,将无法给自己的证书签名。
创建文件:
$ touch openssl.cnf创建完成之后,在文件夹找到这个文件。然后在里面写入配置信息,如下:
[ ca ] default_ca = myca [ myca ] dir = /var/MyCA certificate = $dir/cacert.pem database = $dir/index.txt new_certs_dir = $dir/certs private_key = $dir/private/cakey.pem serial = $dir/serial default_crl_days= 7 default_days = 365 default_md = md5 policy = myca_policy x509_extensions = certificate_extensions // 一下的内容将根据你的项目需求修改。读者在正常使用的时候请删除这句话。 [ myca_policy ] commonName = LiKaiCA stateOrProvinceName = shanghai countryName = cn emailAddress = 774968931@qq.com organizationName= liugankeji organizationalUnitName = SGMWPETH5SERVER [ certificate_extensions ] basicConstraints= CA:false我们需要告诉Openssl配置文件的历路径。我们通过环境变量设置:
$ OPENSSL_CONF=/var/MyCA/openssl.cnf $ export OPENSSL_CONF我们需要一个根证书为自己颁发的证书签名,这个证书可以从其他CA获取,或者用自签名的证书。想必大家刚开始都用来测试,所有此处我们用不用第三方去认证。我们自己生成一个自签名的根证书。(当然,浏览器不认的。咱这相当于自己刻了个自己的章子,没有多少可信度以及权威性。别人是不认的。)
首先,还是打开刚才创建的openssl.cnf文件。继续添加一下命令:
[ req ] default_bits = 2048 default_keyfile = /var/MyCA/private/cakey.pem default_md = md5 prompt = no distinguished_name = root_ca_distinguished_name x509_extensions = root_ca_extensions // 一下的内容将根据你的项目需求修改。读者在正常使用的时候请删除这句话。 [ root_ca_distinguished_name ] commonName = LiKaiCA stateOrProvinceName = shanghai countryName = cn emailAddress = 774968931@qq.com organizationName = Root Certification Authority [ root_ca_extensions ] basicConstraints = CA:true 好了。现在生成自己的根证书。 $ openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf OK,这时候穿创建了ca.key 以及 ca.crt两个文件。 可以验证一下信息是否正确: openssl x509 -in ca.crt -text -noout 预留这两个文件。等会为自己的证书进行签名认证。创建CSR文件:
$ openssl req -new -out server.csr -key server.key注意:如果无法创建,有可能是权限不够。
然后终端就是出现一些用户信息列表,需要你自己填入:
Country Name (2 letter code) [AU]:cn State or Province Name (full name) [Some-State]:shanghai Locality Name (eg, city) []:shanghai Organization Name (eg, company) [Internet Widgits Pty Ltd]:liugankeji Organizational Unit Name (eg, section) []:SGMWPETH5SERVER Common Name (eg, YOUR name) []:192.168.1.69 注释:一定要写服务器所在的ip地址 Email Address []:774968931@qq.com然后把相关的证书扔到 py 文件的目录下。改成相应的名字。然后开启服务。
接着用浏览器或curl啥的尝试访问一下: curl https://localhost:8000
看到请求返回的 Hello, World! 了么? 当然…..
不行了。因为浏览器没有这个server.crt证书。就算你导入,也不行。因为咱的这个证书啊。不是权威机构签名认证的,是刚才自己用自己创建的CA进行认证的
如果将要用在U3D 客户端进行对服务器的访问。则还要生成相应的客户端的证书:“client.p12”。不然的的话。U3D 打包出来只能用在PC 端。安卓以及苹果将没法使用。
1.创建私钥 :
C:/OpenSSL/bin>openssl genrsa -out client/client-key.pem 10242.创建证书请求 :
C:/OpenSSL/bin>openssl req -new -out client/client-req.csr -key client/client-key.pem Country Name (2 letter code) [AU]:cn State or Province Name (full name) [Some-State]:shanghai Locality Name (eg, city) []:shanghai Organization Name (eg, company) [Internet Widgits Pty Ltd]:liugankeji Organizational Unit Name (eg, section) []:SGMWPETH5SERVER Common Name (eg, YOUR name) []:Client Email Address []:Client //注释:就是登入中心的用户(本来用户名应该是Common Name,但是中山公安的不知道为什么使用的Email Address,其他版本没有测试) Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:123456 An optional company name []:liugankeji3.自签署证书 :
C:/OpenSSL/bin>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA ../ca.crt -CAkey ../ca.key -CAcreateserial -days 36504.将证书导出成浏览器支持的.p12格式 :
C:/OpenSSL/bin>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12友谊链接: openssl制作证书全过程 使用Tornado搭建HTTPS网站 使用OpenSSL生成证书
·