php房产中介网站源码,网站界面设计的步骤,在线网站建设者,网站如何实现多语言个人博客地址#xff1a;http://www.pojun.tech/ 欢迎访问 什么是CA CA,Catificate Authority,通俗的理解就是一种认证机制。它的作用就是提供证书#xff08;也就是服务端证书#xff0c;由域名#xff0c;公司信息#xff0c;序列号#xff0c;签名信息等等组成#… 个人博客地址http://www.pojun.tech/ 欢迎访问 什么是CA CA,Catificate Authority,通俗的理解就是一种认证机制。它的作用就是提供证书也就是服务端证书由域名公司信息序列号签名信息等等组成来加强客户端与服务器端访问信息的安全性同时提供证书的发放等相关工作。国内的大部分互联网公司都在国际CA机构申请了CA证书并且在用户进行访问的时候对用户的信息加密保障了用户的信息安全。理论上来说任何组织或者个人都可以扮演CA的角色只不过难以得到客户端的信任不能推而广之最典型应用莫过于12306网站这个网站就是自己给自己颁发的根证书。 目前能够让浏览器默认支持的CA大厂有很多Windows 操作系统在安装之初也默认安装了很多受信任的根证书。可以通过控制面板–Internet选项来进行查看。 SSL/TLS SSL/TLS是网络通信过程中非常重要的两个协议。互联网的通信安全就建立在SSL/TLS协议基础之上。他们通过一系列的加密行为保障了通信的安全是如今互联网通信最主要的应用之一。 SSL/TLS是一个很大的互联网应用关于他们的介绍互联网上有很多我们暂时不做详细的介绍。关于SSL/TLS通信的过程大致可以用下面的这张图来进行描述。 OpenSSL OpenSSL是一套开源软件在Linux中可以很容易的安装。它能够很容易的完成密钥生成以及证书管理。我们接下来就利用OpenSSL搭建CA证书并实现证书的申请与分发。 OpenSSL实现CA证书的搭建 实验环境的准备 CA的配置介绍 创建所需要的文件 CA 自签名证书 颁发证书 查看证书状态 证书吊销 实验环境的准备 首先我们应该准备三个虚拟机他们分别用来表示根CA证书机构以及子CA证书机构和证书申请用户。 那么问题来了用户向子CA证书机构申请证书子CA机构向根CA机构申请授权根CA是如何取得证书的呢答案是根CA自己给自己颁发的证书。 实验环境的拓扑结构如下图所示。 CA配置介绍 要手动创建CA证书就必须首先了解OpenSSL中关于CA的配置配置文件位于下面的/etc/pki/tls/openssl.cnf ####################################################################
[ ca ]
default_ca CA_default #默认CA
####################################################################
[ CA_default ]
dir/etc/pki/CA # CA的工作目录这里其实是定义了一个变量
certs $dir/certs # 证书存储路径
crl_dir $dir/crl # 证书吊销列表
database $dir/index.txt # 证书数据库列表new_certs_dir $dir/newcerts #新的证书路径
certificate $dir/cacert.pem # CA自己的证书
serial $dir/serial #下一个证书的编号十六进制默认00
crlnumber $dir/crlnumber #下一个要被吊销的证书编号十六进制默认00
crl $dir/crl.pem # The current CRL
private_key $dir/private/cakey.pem # CA 的私钥
RANDFILE $dir/private/.rand # private random number file
x509_extensions usr_cert # The extentions to add to the cert# Comment out the following two lines for the traditional
# (and highly broken) format.
name_opt ca_default # 命名方式
cert_opt ca_default # CA的选项# Extension copying option: use with caution.
# copy_extensions copy# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions crl_ext
default_days 365 # 默认证书的有效期限
default_crl_days 30 # how long before next CRL
default_md default # use public key default MD
preserve no # keep passed DN ordering# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy policy_match #策略#这里记录的是 将来CA在搭建的时候以及客户端申请证书的时候需要提交的信息的匹配程度。# For the CA policy
[ policy_match ] # match意味着CA以及子CA必须一致
countryName match # 国家
stateOrProvinceName match # 州或者省
organizationName match #组织公司
organizationalUnitName optional
commonName supplied
emailAddress optional# For the anything policy
# At this point in time, you must list all acceptable object
# types.
[ policy_anything ] #可以对外提供证书申请这时证书的匹配就可以不用那么严格
countryName optional
stateOrProvinceName optional
localityName optional
organizationName optional
organizationalUnitName optional
commonName supplied
emailAddress optional 创建所需要的文件 这里有一点需要注意我们的实验环境中包含了三个主机其中两个的角色是作为CA认证机构存在的所以创建所需要的文件的时候主机A和主机B都需要创建。 如果不提前创建这两个文件那么在生成证书的过程中会出现错误。 我们将文件创建在配置文件中指定的路径下面。 生成证书索引数据库文件 touch /etc/pki/CA/index.txt 指定第一个颁发证书的序列号 echo 01 /etc/pki/CA/serial CA 自签名证书(构造根CA) 首先构造根CA的证书。因为没有任何机构能够给根CA颁发证书所以只能根CA自己给自己颁发证书。 首先生成私钥文件 私钥文件是非常重要的文件除了自己本身以外其他任何人都不能取得。所以在生成私钥文件的同时最好修改该文件的权限并且采用加密的形式进行生成。 # 执行命令生成私钥文件。
# 采用了des3的方式对私钥文件进行了加密
# 同时临时指定了umask 使得生成的私钥文件只对自己具有读写权限。
[rootlocalhost ~]#(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 2048 )
Generating RSA private key, 2048 bit long modulus
...............
.......................................
e is 65537 (0x10001)
Enter pass phrase for /etc/pki/CA/private/cakey.pem: #这里需要输入密码
Verifying - Enter pass phrase for /etc/pki/CA/private/cakey.pem: #这里确认密码# 查看一个生成的私钥文件就会发现已经被加密了
[rootlocalhost ~]#cat /etc/pki/CA/private/cakey.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,A4FB61EACD1544F29JrKVEPhnWhx1WW1V4PdIvVHNDwb8mb0JYILvXZKc07gvNcYKIlvUoTxjtihbpk
wYQcVm0Z6b2fjZBXVVR9igFB2OOE74BnSNMsbfPTs5W/SwWLxv0R6x0SbiZ8v/7
D6Qh3u/rXmOQWWTvQnLzh6JaT00c8zgUnn48vMev17Xyg32oJqKqJVL5RNBGmJur
6CaWX8mB5qHYiBUXzNLQp9T3HNGcnmDNyk0gylEvjeJo3HqIOAkjfJE4sYO9ER
tQtsLViFUc5jXX7p0nIO0ANwE7zdjBt9I4aXknZiC4rFYJJtNSa1Wrhoo/MhuwWH
zjc4UyoB1C71sbq2LMgeElHhXN/TfqWGfXFqhkyBJwgrmzQibOJSFeWHZNurILof
UwgNLlABmazvIL5Ps6LgZtyrO2ODSDTzPiCO7kQ0S3mTHYk9WEeEyMb4uum6oAx
oCofADL0wea5mHVUA2s6KwRBFr01HiQ00fiul6LFvXdCwt9IL62blIJYn2veQHl
oPvC5cTnPVqJ28GJWbPvJjiOLB8Hh4DPwxaRA1eYf2R9SR0R1SYJIBTI6NNqNwW
LqpD89bGCbFdYIDkAZfG27FonmmLvvhTn3jQKVPpwQBROHQ9gpwMLnpmpJWwNK
byUSitVtmvbzOLjuTdsTzklwZEOkNpaE/jTqusWuhXS33D4bqAWsxNVDnx6e
rbrGcbX9skXyti21oEIYem0H37ZS2fV9z/CM/55maOX5xNVQ4aDxWuiMyyUd03D
nhhM5A4mcDvIZLpWDbHzjtkl2H9Pnb9fvGzOIOm7lVQrX8BdidpWjwGTLYG/zUX5
i9NimSnoiqgkhEYl8KXzbnMfD4hX69BXI7le5HAaS38wDKPsmRRW/dgGfRNKzfTZ
qmBimscMsllz21QnG9eqineFDdexGZw1oEQsHp2CivtEwaIKTqOZfNiwHJvm1cbz
M0NOgsr2qze0czV9dTqM5pVND1Iac1DXYflYZ9g54riQNre/sHp1qpdNQHRRMTP
yTFnGsEfWmI4V4HiSrdQpyHIrnFUryse9kJmRKDfQK7icUf5/KrOD4FOS5zsHrep
/cE14w7s0Zqko9upkYQNBys5TbBmAK8yVJ/Zq7jU3qjDxkYNddpOt8k33vl9CG53
OeWxcWOzJCHIOjakJlLnSXitsSY4hzUlfEO0/Ffi99zyHXybNPws5Og4KNfgcqW
ReG943oKc5qplfST2tr0K10ipD3WoVlMbLugrwhfmVOyHGypfJhUMU0oKEjYPP3
JjHSiW0hrnNvrPQ4/mqSps3LyWYZWvH40N88U6dbxgbUgamXLHWtzJdyfBNii8uH
obtye7oeYpAzx0hNurXhpSoswFbxwU5u80eL0/YkfkzkL1P9vtMvDUw/TVNbwHVg
kTS9WEQA52XLMBtanzRzLGJVIXX6ODGgXt2Gql3KO1p43OyZq4Ksvyj8NuvdmBdO
y9SrMvvcdOMmTkj4nmGBjqSDeFmrSSQf0HoUbfXXXw/RIW/gkcm4qPmNJXUolYp
WBOg5jT78pcJ2sRwb6YQDgC5HleBwuZujixUlKgdZxF1DEpJNBFnNDxq8yKadEzB
-----END RSA PRIVATE KEY----- 生成自签名证书 私钥文件是非常重要的文件除了自己本身以外其他任何人都不能取得。所以在生成私钥文件的同时最好修改该文件的权限并且采用加密的形式进行生成。 # 调用命令生成一个签名证书
# 生成证书的过程中需要输入之前设定的私钥的密码
# -new: 生成新证书签署请求
# -x509: 专用于CA生成自签证书
# -key: 生成请求时用到的私钥文件
# -days n证书的有效期限
# -out /PATH/TO/SOMECERTFILE: 证书的保存路径
[rootlocalhost ~]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ., the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:shandong
Locality Name (eg, city) [Default City]:qingdao
Organization Name (eg, company) [Default Company Ltd]:pojun.tech
Organizational Unit Name (eg, section) []:opt
Common Name (eg, your name or your servers hostname) []:ca.pojun.tech
Email Address []: 颁发证书 颁发证书这里我们将分成两个环节介绍分别是 子CA证书机构向根CA证书机构申请证书以及普通用户向子CA证书机构申请证书。 子CA证书机构向根CA申请证书 A 在需要使用证书的主机上生成证书请求 首先在B主机上生成私钥这一个过程与前面根CA机构生成私钥的过程是一致的。 # 这次我们修改了私钥的长度
# 并且没有采用加密的方式生成
# 因为主机B是要作为子CA机构的形式存在他也是一个CA所以生成私钥的时候就应该按照配置文件中指定的内容生成cakey.pem
[rootcentos6 pki]$(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 1024)
Generating RSA private key, 1024 bit long modulus
......
..............
e is 65537 (0x10001)# 查看私钥文件可以发现没有了加密的标识
# 同时因为生成时指定了1024的长度私钥的长度明显的变短了。
[rootcentos6 ~]$cat /etc/pki/CA/private/cakey.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQCxLyAKQCkysisrsuou6oJFJHs/Gk9L406x6sON1a2JX3516FJ2
·····中间省略······
R1ogCVEZq36sgNYUwaT55gLKk5Ik5T6YQimy0bsvo5oQuw
-----END RSA PRIVATE KEY----- 利用私钥文件生成证书申请文件。 # 其实这里的时间是没有必要指定的。
# 因为证书的时间是由颁发机构指定的因此申请机构填写了时间也没用
# 其中有些信息必须要与根证书的内容相同因为在根证书的openssl.cnf文件中已经指定。
[rootcentos6 tls]$openssl req -new -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/tls/subca.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ., the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:shandong
Locality Name (eg, city) [Default City]:qingdao
Organization Name (eg, company) [Default Company Ltd]:pojun.tech
Organizational Unit Name (eg, section) []:opt
Common Name (eg, your name or your servers hostname) []:subca.pojun.tech
Email Address []:# 这里的两步 默认也可以不用填
Please enter the following extra attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:magedu.com B 将证书的申请文件传递给根CA 将前一步生成的证书的申请文件传递给根CA机构 # 最好将申请文件传输到指定的目录下这样便于管理
[rootcentos6 tls]$scp /etc/pki/tls/subca.csr 172.18.253.127:/etc/pki/CA C CA颁发证书 此时切换到根CA主机生成证书 # 这里的时间必须要进行指定。这时证书颁发机构指定的证书的有效期。
# [rootlocalhost CA]#openssl ca -in /etc/pki/CA/subca.csr -out /etc/pki/CA/certs/subca.crt -days 3650
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:Serial Number: 1 (0x1)ValidityNot Before: Sep 11 14:38:13 2017 GMTNot After : Sep 11 14:38:14 2018 GMTSubject:countryName CNstateOrProvinceName shandongorganizationName pojun.techorganizationalUnitName optcommonName subca.pojun.techX509v3 extensions:X509v3 Basic Constraints: CA:FALSENetscape Comment: OpenSSL Generated CertificateX509v3 Subject Key Identifier: DB:3E:9C:F4:F4:E9:42:15:00:E7:35:52:FE:04:9A:48:8C:BD:1A:1BX509v3 Authority Key Identifier: keyid:01:17:F1:CB:91:4B:20:AD:C7:DF:13:05:A4:D8:83:B2:AB:75:D1:05Certificate is to be certified until Sep 11 14:38:14 2018 GMT (3650 days)Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated#此时查看index.txt 文件中会看到增加了一条新的记录。
[rootlocalhost CA]#cat index.txt
V 180911143814Z 01 unknown /CCN/STshandong/Opojun.tech/OUopt/CNsubca.pojun.tech D 将根CA生成的证书颁发给请求者 # 主机B是作为子CA机构存在的所以证书文件必须是cacert.pem否则子CA将不能够给其他用户颁发证书。
[rootlocalhost CA]#scp /etc/pki/CA/certs/subca.crt 172.18.250.114:/etc/pki/CA/cacert.pem 普通用户向子CA机构申请证书 这一个过程与子CA向根CA申请证书的过程是类似的。我们将命令的记录如下 #生成私钥文件
# 因为是普通用户所以生成的私钥文件应该与之前的cacert.pem 有所区别
[rootlocalhost ~]# (umask 066; openssl genrsa -out /etc/pki/tls/private/app.key 1024)#利用私钥文件生成证书申请文件
[rootlocalhost ~]# openssl req -new -key /etc/pki/tls/private/app.key -out /etc/pki/tls/app.csr# 将证书申请文件发送给 子CA证书颁发机构
[rootlocalhost ~]# scp /etc/pki/tls/app.csr 172.18.250.114:/etc/pki/CA# 切换到子CA证书颁发机构
# 子CA证书颁发机构颁发证书
[rootcentos6 CA]$openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt -days 365#将生成的证书传递给申请者
[rootcentos6 CA]$scp /etc/pki/CA/certs/app.crt 172.18.253.58:/etc/pki/CA/certs/ 这样正常的证书颁发流程就算是完成了。将我们生成的根证书子CA证书以及普通用户证书导出到Windows系统中并安装然后我们就可以看到整个证书路径了。如下图所示。 查看证书状态 查看证书状态使用下面这条命令 可以查看证书的内容以及颁发者的多种信息。 openssl x509 -in /etc/pki/CA/cacert.pem -noout -text|issuer|subject|serial|dates-text 证书的内容
-issuer 证书颁发者的信息
-subject 证书主体的信息
-serial 证书的序列号信息
-dates 查看证书的时间# 证书颁发者的信息
[rootlocalhost ~]#openssl x509 -in /etc/pki/CA/cacert.pem -noout -issuer
issuer /CCN/STshandong/Lqingdao/Opojun.tech/OUopt/CNca.pojun.tech#
[rootlocalhost ~]#openssl x509 -in /etc/pki/CA/cacert.pem -noout -subject
subject /CCN/STshandong/Lqingdao/Opojun.tech/OUopt/CNca.pojun.tech# 证书的有效时间
[rootlocalhost ~]#openssl x509 -in /etc/pki/CA/cacert.pem -noout -dates
notBeforeSep 11 13:43:42 2017 GMT
notAfterSep 6 13:43:42 2037 GMT#也可以根据index.txt 文件中的证书编号进行查看状态
[rootlocalhost ~]#openssl ca -status 01
Using configuration from /etc/pki/tls/openssl.cnf01Valid (V) 吊销证书 这里我们将子CA的证书吊销掉。 A 首先在子CA主机上获取到要吊销的证书的serial 前面的例子中我们的子CA证书的存放路径是 /etc/pki/CA/certs/subca.crt [rootcentos6 CA]$openssl x509 -in /etc/pki/CA/certs/subca.crt -noout -serial -subject
serial01
subject /CCN/STshandong/Opojun.tech/OUopt/CNsubca.pojun.tech B 在根CA上根据客户提交的serial与subject信息对比检验是否与index.txt文件中的信息一致然后吊销证书 #进入到CA的路径下查看文件目录
[rootlocalhost CA]#pwd
/etc/pki/CA[rootlocalhost CA]#tree
.
├── cacert.pem
├── certs
│ └── subca.crt # 这是直接颁发给子CA的证书文件├── crl
├── index.txt
├── index.txt.attr
├── index.txt.old
├── newcerts
│ └── 01.pem #这个就是与子CA证书一致的Serial文件├── private
│ └── cakey.pem
├── serial
├── serial.old
└── subca.csr# 吊销子CA的证书 使用revoke 命令
[rootlocalhost CA]#openssl ca -revoke /etc/pki/CA/newcerts/01.pem
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Revoking Certificate 01.
Data Base Updated C 指定第一个吊销证书的编号 指定吊销证书的编号只有在更新证书吊销列表之前才需要操作 # 这条命令与生成证书时指定证书serial 号码的作用是一致的。
# 就是说指定下一个证书吊销时的编号。
[rootlocalhost ~]#echo 01 /etc/pki/CA/crlnumber
[rootlocalhost ~]#cat /etc/pki/CA/crlnumber
01 D 更新证书吊销列表 前面指定了证书吊销列表编号之后就可以来更新证书吊销列表了。 [rootlocalhost ~]#openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem: #这里提示输入密码 查看证书吊销列表的文件 [rootlocalhost ~]#openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text
Certificate Revocation List (CRL): #证书吊销列表Version 2 (0x1)Signature Algorithm: sha256WithRSAEncryptionIssuer: /CCN/STshandong/Lqingdao/Opojun.tech/OUopt/CNca.pojun.techLast Update: Sep 12 11:58:17 2017 GMTNext Update: Oct 12 11:58:17 2017 GMTCRL extensions:X509v3 CRL Number: 1
Revoked Certificates: #这里的标识显示证书已经被吊销了Serial Number: 01 #吊销的序列号Revocation Date: Sep 12 11:52:47 2017 GMTSignature Algorithm: sha256WithRSAEncryptionb4:6e:f2:73:21:ed:c4:38:39:06:29:76:61:ac:d6:ee:a4:5d:e8:cb:7c:8b:f8:01:21:ba:bd:b2:46:fa:ea:bf:de:fa:6e:f6:85:d6:93:7c:81:b4:2d:d5:eb:c2:94:a3:6f:13:6d:f3:3f:48:56:85:72:96:cf:e0:ea:a9:0e:07:43:6d:62:2d:4d:e2:2e:b5:02:6a:27:7a:31:76:eb:4e:b1:d6:83:8b:d7:39:10:14:d6:94:77:4b:10:d8:24:46:95:1b:48:87:16:77:ce:8c:1b:54:2c:4d:ee:2f:24:13:10:62:30:32:74:9e:84:49:c9:dc:a9:fc:31:60:57:b5:43:7a:a3:09:75:60:1e:6a:f2:26:e9:54:37:2d:ce:0b:ac:b2:41:c2:d9:02:99:fc:a3:99:15:9c:10:a7:f4:be:08:83:23:ee:ef:74:83:ea:fd:f7:c9:e1:87:6f:9b:1d:c3:df:88:2d:79:2b:71:4b:9e:6f:ae:f9:08:d9:66:d4:f1:49:df:7e:89:99:06:a3:86:72:37:02:78:0f:16:e8:87:8a:61:5b:a3:ac:e2:46:38:ce:86:29:c9:c6:e5:8c:f8:25:2f:7e:d1:62:13:57:a3:a6:10:42:13:b9:e4:0b:fa:9f:f4:d0:95:9b:5d:9b:2d:38:7f:8d:ac:c0:e6:3f 在实际的使用过程中有很多这样的实例。例如我们经常使用的淘宝在使用浏览器访问淘宝的时候就可以查看淘宝的证书吊销列表。如下图所示。 至此关于自己搭建CA的过程基本上就完成了。熟悉了上面的操作之后就可以自己动手简单的搭建一个证书了然后也可以体验一下整个流程 参考资料 http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html http://kb.cnblogs.com/page/197396/ 个人博客地址http://www.pojun.tech/ 欢迎访问 本文转自Eumenides_s 51CTO博客原文链接http://blog.51cto.com/xiaoshuaigege/1965113如需转载请自行联系原作者