您的位置:首页 > 运维架构

IIS8中使用OpenSSL来创建CA并且签发SSL证书

2014-11-26 15:50 417 查看

准备

Windows8+IIS8
直接下载编译好的OpenSSL,由于我的系统是64位的,所以我下的是最新版的
Win64
OpenSSLv1.0.1eLight

安装OpenSSL之前要先装
VisualC++2008SP1Redistributables
,根据系统选择32位的和64位下载并安装

开始

第一步:安装OpenSSL

尽管我们已经安装了
VisualC++2008SP1Redistributables
,安装刚开始还是会提示未安装
VisualC++2008Redistributables
,不管它直接点击确定
一路下一步就可以了,安装文件夹我选择
C:\OpenSSL

CopyOpenSSLDLLsto:
的地方我选择
TheOpenSSLbinaries(/bin)directory
,我不喜欢把什么DLL都往Windows目录丢,这样放在应用程序目录下比较干净
完成安装

第二步:配置OpenSSL

1、将路径
C:\OpenSSL\bin\
添加到系统路径中(控制面板>系统与安全>系统>高级系统设置>环境变量>系统变量>Path),这样在任何路径中都能运行OpenSSL命令2、打开openssl.cfg,修改一下配置:
dir=.#存放CA文件的文件夹,里面还需要手动建立子文件夹及件,后面会提到
default_days=10950#证书有效期,设30年比较省心
policy=policy_anything#CA资料和证书申请资料的匹配策略改为这个比较方便
countryName_default=CN#默认国家
stateOrProvinceName_default=Jiagxi#默认省份
localityName_default=Nanchang#默认城市,在localityName=LocalityName(eg,city)下增加这一条
0.organizationName_default=Kashuo#默认组织
3、接着准备文件夹及文件:新建文件夹
C:\OpenSSL\bin\KashuoCA

新建文件夹
C:\OpenSSL\bin\KashuoCA\newcerts

新建文件
C:\OpenSSL\bin\KashuoCA\serial
(无后缀名),里面写入
01
,用来存放签发证书流水号
新建空文件
C:\OpenSSL\bin\KashuoCA\index.txt
,用来存放签发证书记录4、为了省去每次运行命令都要指定openssl.cfg的麻烦,打开命令提示符(cmd.exe),将cfg文件设为系统变量:
setOPENSSL_CONF=C:\OpenSSL\bin\openssl.cfg
5、重新打开命令提示符,进入KashuoCA文件夹:
cdC:\OpenSSL\bin\KashuoCA
准备好以后开始下面的步骤

第三步:建立CA

命令:
opensslreq-x509-newkeyrsa:1024-keyoutca.key-outca.cer
参数:
req#用来生成PKCS#10格式的证书申请文件,也可以生成自签名的CA根证书
-x509#有这个参数就是生成CA根证书,没有就是生成证书申请文件
-newkeyrsa:1024#同时生成1024位RSA算法的私钥
-keyout#CA私钥
-out#证书申请文件或CA根证书
由于我们之前已经设置了证书有效期和cfg文件的地址,所以在命令里就不需要重复设置了运行命令以后会要求输入私钥密码,并且再输入一次确认密码。在输入国家省份等资料的时候直接回车使用之前我们设置的默认值就可以了,但是在
OrganizationalUnitName
CommonName
EmailAddress
三个地方没有设置默认值,因为这三个资料在CA证书和服务器证书里是不一样的。
C:\OpenSSL\bin\KashuoCA>opensslreq-x509-newkeyrsa:1024-keyoutca.key-outca.cer
Loading'screen'intorandomstate-done
Generatinga1024bitRSAprivatekey
...........++++++
.........................++++++
writingnewprivatekeyto'ca.key'
EnterPEMpassphrase:
Verifying-EnterPEMpassphrase:
-----
Youareabouttobeaskedtoenterinformationthatwillbeincorporated
intoyourcertificaterequest.
WhatyouareabouttoenteriswhatiscalledaDistinguishedNameoraDN.
Therearequiteafewfieldsbutyoucanleavesomeblank
Forsomefieldstherewillbeadefaultvalue,
Ifyouenter'.',thefieldwillbeleftblank.
-----
CountryName(2lettercode)[CN]:
StateorProvinceName(fullname)[Jiangxi]:
LocalityName(eg,city)[Nanchang]:
OrganizationName(eg,company)[Kashuo]:
OrganizationalUnitName(eg,section)[]:KashuoCA
CommonName(e.g.serverFQDNorYOURname)[]:KashuoCA
EmailAddress[]:ca@kashuo.com
这时候我们就有了CA根证书和私钥了!

第四步:通过IIS生成证书申请文件

由于本例中证书文件是部署在IIS中,所以通过IIS直接生成证书文件会比较方便。当然第二步中提到了通过OpenSSL的req方法也可以生成证书申请文件。1、打开
IIS
2、在左侧
连接
中选择服务器3、在中间
主页
里的
IIS
中选择
服务器证书
4、在右侧
操作
中选择
创建证书申请
5、在打开的窗口中填入以下信息:
通用名称:www.kashuo.com
组织:Kashuo
组织单位:KashuoServer
城市/地点:Nanchang
省/市/自治区:Jiangxi
国家/地区:CN
通用名称里填写的域名要与该证书所绑定的网站域名一致,否则用户在浏览网站的时候会提示证书与域名不一致6、加密服务选择RSA和1024位7、最后保存证书申请的文件为
C:\OpenSSL\bin\KashuoCA\certreq.txt
第五步:签发服务器证书现在,CA证书文件ca.cer、CA私钥ca.key、服务器证书申请certreq.txt三个文件都在KashuoCA文件夹下命令:
opensslca-incertreq.txt-certca.cer-keyfileca.key-outiis.cer
参数:
ca#主要用来签发证书申请
-in#证书申请文件
-cert#CA证书
-keyfile#CA私钥
-out#签发的证书
运行命令以后需要输入CA的私钥密码
C:\OpenSSL\bin\KashuoCA>opensslca-incertreq.txt-certca.cer-keyfileca.key-outiis.cer
UsingconfigurationfromC:\OpenSSL\bin\openssl.cfg
Loading'screen'intorandomstate-done
Enterpassphraseforca.key:
Checkthattherequestmatchesthesignature
Signatureok
CertificateDetails:
SerialNumber:1(0x1)
Validity
NotBefore:Jun1310:32:252013GMT
NotAfter:Jun610:32:252043GMT
Subject:
countryName=CN
stateOrProvinceName=Jiangxi
localityName=Nanchang
organizationName=Kashuo
organizationalUnitName=KashuoServer
commonName=www.kashuo.com
X509v3extensions:
X509v3BasicConstraints:
CA:FALSE
NetscapeComment:
OpenSSLGeneratedCertificate
X509v3SubjectKeyIdentifier:
E0:8A:69:4A:D1:0A:98:26:EA:AE:AF:5E:6D:A7:A7:C4:DE:07:13:DF
X509v3AuthorityKeyIdentifier:
keyid:37:48:69:62:0E:FD:FB:1E:83:EB:DE:2D:0D:F6:55:C1:E1:76:EF:BACertificateistobecertifieduntilJun610:32:252043GMT(10950days)
Signthecertificate?[y/n]:y1outof1certificaterequestscertified,commit?[y/n]y
Writeoutdatabasewith1newentries
DataBaseUpdated
最后我们得到了服务器证书
iis.cer

第六步:在服务器上导入CA根证书

由于第三步生成的CA根证书是自签名的,并非由系统可以识别的第三方信任机构签发,所以需要将CA根证书导入到服务器中。双击
ca.cer
打开证书详情
点击
安装证书
打开
证书导入向导

存储位置选择
本地计算机
然后下一步
选择
将所有的证书都放入下列存储

点击浏览,选择
受信任的根证据颁发机构

导入完成

第七步:完成IIS证书申请

现在可以将第五步生成的
iis.cer
导入到IIS中了:点击第四步
创建证书申请
下方的
完成证书申请

选择证书文件:
C:\OpenSSL\bin\KashuoCA\iis.cer

输入一个好记名称,如
www.kashuo.com

证书存储默认
个人

点击确定完成证书导入这个时候在服务器证书列表里就可以看到这个证书了。

第八步:打开网站的SSL设置

安装好IIS证书以后就可以打开网站的SSL设置了:在IIS左侧
连接
中选择
网站

在右侧
操作
中点击
绑定

在打开的
网站绑定
中添加一条记录:
类型
选择
https

主机名
填写绑定的域名,如
www.kashuo.com

证书
就选择我们刚刚添加的证书
确定完成然后在中间
主页
里的
IIS
中选择
SSL设置
,这里根据自己的需求进行设置
要求SSL
:勾选以后只能通过https访问,否则http和https都可以访问
客户证书
:忽略:不论客户端有没有证书都不检验
接受:如果客户端没有证书就不检验,否则弹出提示框让用户选择证书并检验证书合法性
必需:客户端必需提供合法证书才能进行访问设置完成以后点击右边
应用
就可以了对于单向认证SSL连接,在
客户证书
里选择
忽略
就可以,教程到这里也就结束了。客户端在访问https地址的时候会收到一个提示,即服务器证书并非由信任的第三方证书颁发机构颁发,客户端选择继续或者保存为信任的证书就可以继续访问了。如果对于安全性要求很高的网站,需要使用双向认证SSL连接,在
客户证书
里就要选择
必需
,即服务端和客户端互相验证对方证书的合法性。那就还需要为客户端生成一个服务端认可的证书。

第九步:生成客户端证书申请文件

命令:
opensslreq-newkeyrsa:1024-keyoutclient.key-outclient.csr
参数:
req#用来生成PKCS#10格式的证书申请文件,也可以生成自签名的CA根证书
-newkeyrsa:1024#同时生成1024位RSA算法的私钥
-keyout#证书私钥
-out#证书申请文件
细心的你可能发现这个命令和第三步建立CA的命令差不多,区别是少了-x509参数和输出的是证书申请文件。运行命令以后输入两次客户端私钥密码,然后就是客户端的一些基本信息。最后的Achallengepassword和Anoptionalcompanyname不是必填的,我就直接回车跳过了。C:\OpenSSL\bin\KashuoCA>opensslreq-newkeyrsa:1024-keyoutclient.key-outclient.csr
Loading'screen'intorandomstate-done
Generatinga1024bitRSAprivatekey
........++++++
...++++++
writingnewprivatekeyto'client.key'
EnterPEMpassphrase:
Verifying-EnterPEMpassphrase:
-----
Youareabouttobeaskedtoenterinformationthatwillbeincorporated
intoyourcertificaterequest.
WhatyouareabouttoenteriswhatiscalledaDistinguishedNameoraDN.
Therearequiteafewfieldsbutyoucanleavesomeblank
Forsomefieldstherewillbeadefaultvalue,
Ifyouenter'.',thefieldwillbeleftblank.
-----
CountryName(2lettercode)[CN]:
StateorProvinceName(fullname)[Jiangxi]:
LocalityName(eg,city)[Nanchang]:
OrganizationName(eg,company)[Kashuo]:
OrganizationalUnitName(eg,section)[]:KashuoApp
CommonName(e.g.serverFQDNorYOURname)[]:Client
EmailAddress[]:client@kashuo.comPleaseenterthefollowing'extra'attributes
tobesentwithyourcertificaterequest
Achallengepassword[]:
Anoptionalcompanyname[]:
第十步:签发客户端证书命令:
opensslca-inclient.csr-certca.cer-keyfileca.key-outclient.cer
参数:
ca#主要用来签发证书申请
-in#证书申请文件
-cert#CA证书
-keyfile#CA私钥
-out#签发的证书
签发客户端证书和签发服务器证书的命令是一样的。运行命令以后同样需要输入CA的私钥密码
C:\OpenSSL\bin\KashuoCA>opensslca-inclient.csr-certca.cer-keyfileca.key-outclient.cer
UsingconfigurationfromC:\OpenSSL\bin\openssl.cfg
Loading'screen'intorandomstate-done
Enterpassphraseforca.key:
Checkthattherequestmatchesthesignature
Signatureok
CertificateDetails:
SerialNumber:2(0x2)
Validity
NotBefore:Jun2014:03:182013GMT
NotAfter:Jun1314:03:182043GMT
Subject:
countryName=CN
stateOrProvinceName=Jiangxi
localityName=Nanchang
organizationName=Kashuo
organizationalUnitName=KashuoApp
commonName=Client
emailAddress=client@kashuo.com
X509v3extensions:
X509v3BasicConstraints:
CA:FALSE
NetscapeComment:
OpenSSLGeneratedCertificate
X509v3SubjectKeyIdentifier:
44:C7:B1:DA:5E:36:34:8C:6F:37:17:82:BB:F2:CD:AC:69:1A:3F:41
X509v3AuthorityKeyIdentifier:
keyid:FE:79:C3:FF:9E:4F:AA:AA:8F:BD:03:19:1A:02:CD:60:27:FB:98:67CertificateistobecertifieduntilJun1314:03:182043GMT(10950days)
Signthecertificate?[y/n]:y1outof1certificaterequestscertified,commit?[y/n]y
Writeoutdatabasewith1newentries
DataBaseUpdated
client.cer就是客户端证书了

第十一步:将客户端证书转换为PKCS#12格式

命令:
opensslpkcs12-export-clcerts-inclient.cer-inkeyclient.key-outclient.p12
参数:
pkcs12#生成或解析PKCS#12证书
-export#生成证书
-clcerts#输出客户端证书
-in#原证书
-inkey#私钥
-out#转换后证书
先输入客户端证书私钥密码,然后输入两次p12文件的导出密码
C:\OpenSSL\bin\KashuoCA>opensslpkcs12-export-clcerts-inclient.cer-inkeyclient.key-outclient.p12
Loading'screen'intorandomstate-done
Enterpassphraseforclient.key:
EnterExportPassword:
Verifying-EnterExportPassword:
client.p12包含客户端证书和私钥,支持浏览器直接导入,最后一步就是导入p12证书了。

第十二步:导入客户端证书

在客户端电脑导入客户端证书之前需要先导入CA根证书,将第三步生成的CA根证书文件拷贝到客户端电脑里,按照第六步的流程导入CA根证书。接着安装客户端证书,这个就比较简单了:双击client.p12打开证书详情
存储位置默认
当前用户

输入p12文件的导出密码
根据个人需要勾选是否可导出密钥
自动选择证书存储
就可以
大功告成!当导入客户端完成以后,客户端与服务端的双向认证SSL就搞定了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: