使用SSL和证书安全的网站
此操作将指导您完成使用SSL和数字证书设置安全网站的整个过程。 本指南假定您已经运行Apache,BIND和OpenSSL的全功能(配置)服务器。 作为附注,本指南是基于Fedora Core 6发行版编写的,但对于大多数其他发行版应该是一样的。
介绍
今天可以通过要求客户提供数字签名的证书,相对容易地创建一个安全的网站。 数字签名的证书只是一条信息,其中包含有关主题,公钥,有效期,证书颁发机构(CA)和数字签名的标识的数据。 通常有两种方法来创建一个安全的网站。 首先是使用自签证书。 第二种方法是使用由CA签名的可信证书。 选择取决于您,本教程将向您展示如何做到这一点。 先进入su
,然后开始吧!
第1步:预配置OpenSSL
我们可以通过修改其配置文件来预先配置OpenSSL来填写证书的字段。 这样做将在证书创建过程中节省我们几个步骤。 首先,导航到SSL目录并执行文件列表
# cd /etc/pki/tls
# ls -al
在列表中您应该看到文件openssl.cnf
。 继续在您最喜爱的编辑器中打开此文件,并找到[req_distinguished_name]
部分的开头
。 修改countryName_default,stateOrProvinceName_default,0.organizationName_default,1.organizationName_default
值以及适合您需要的值。 您正在寻找的文件部分看起来像这样
[ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = US countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Berkshire localityName = Locality Name (eg, city) localityName_default = Berkshire Hills 0.organizationName = Organization Name (eg, company) 0.organizationName_default = My Secure Website Company # we can do this but it is not needed normally :-) #1.organizationName = Second Organization Name (eg, company) #1.organizationName_default = MSWC organizationalUnitName = Organizational Unit Name (eg, section) #organizationalUnitName_default = Your IT Department commonName = Common Name (eg, your name or your server\'s hostname) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64
进行更改后,保存并退出编辑器。
第2步:创建服务器CA
现在我们必须创建服务器的CA. 您仍然应该在/ etc / pki / tls
目录中,如果您不确定只是运行一个快速的pwd
来找出。 我们现在需要确保系统中没有其他证书:
# rm -rf ../../CA
一旦完成,我们将使用OpenSSL自带的Shell脚本来创建一个新的CA:
# misc/CA -newca
将出现一个对话框:
CA certificate filename (or enter to create)
继续,然后按回车。 此时程序将开始生成CA. 在此过程中,您将被要求输入PEM密码短语,创建一个并写下来! 进入PEM并进行验证后,您将被询问有关可分辨名称(DN)的一些问题。 自从我们编辑了openssl.cnf
文件以来,默认情况下很多问题都会有正确的值。 所以按回车,直到它要求通用名称
。 当要求使用通用名称时,应该放下服务器的主机名。 它应该是这样的:
#misc/CA -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 1024 bit RSA private key
.............++++++
.......................++++++
writing new private key to '../../CA/private/./cakey.pem'
Enter PEM pass phrase: XXXXXXXXX
Verifying - Enter PEM pass phrase: XXXXXXXXX
-----
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) [US]:
State or Province Name (full name) [Berkshire]:
Locality Name (eg, city) [Berkshire Hills]:
Organization Name (eg, company) [My Secure Website Company]:
Organizational Unit Name (eg, section) [Your IT Department]:
Common Name (eg, your name or your server's hostname) []:hostname
Email Address []:admin-email@yourdomain.com
服务器的CA已创建并放置在/etc/CA/private/cakey.pem
文件中。
第3步:创建服务器证书请求
现在我们已经建立了CA,我们需要提出创建证书的请求。 再次,使用OpenSSL附带的shell脚本,我们要运行这个命令:
# misc/CA -newreq
一旦输入命令,程序将生成请求。 当被要求使用PEM时,请继续输入,然后按Enter键。 再次询问有关可分辨名称(DN)的相同问题。 一切都应该是一样的,除了这个时候要求的通用名称你应该输入你希望保护的网站的完整地址(不只是主机名,因为这将导致互联网浏览器看到冲突!)。 输入公用名称后,系统将要求您创建一个挑战密码,创建一个密码,并将其写入。 这个过程应该是这样的:
#misc/CA -newreq
CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 1024 bit RSA private key
.............++++++
.......................++++++
writing new private key to 'newkey.pem'
Enter PEM pass phrase: XXXXXXXXX
Verifying - Enter PEM pass phrase: XXXXXXXXX
-----
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) [US]:
State or Province Name (full name) [Berkshire]:
Locality Name (eg, city) [Berkshire Hills]:
Organization Name (eg, company) [My Secure Website Company]:
Organizational Unit Name (eg, section) [Your IT Department]:
Common Name (eg, your name or your server's hostname) []:hostname.yourdomain.com
Email Address []:admin-email@yourdomain.com
A challenge password []:
An optional company name []:
Request is in newreq.pem, private key is in newkey.pem
证书请求现已创建并放在/etc/pki/tls/newreq.pem
文件中
,私钥位于/etc/pki/tls/newkey.pem中
。
第4步:签署证书
在进入下一步之前,您需要考虑您要采取的两条路由中的哪一条 - 自签名证书或受信任的第三方签名证书。 选择完全取决于您。 如果您的网站不用于商业用途,您可能会使用自签名证书,但大多数网络浏览器不会立即将其识别为“受信任的网站”,因为它不具有受信任的CA的签名。 除了自签名或购买的方法外,我建议您使用CACert.org 。 CACert.org是一个完全公开的社区驱动和免费的CA,正在增长。
如果要创建自签名证书,请转到第4步A。
如果要通过第三方创建受信任的证书,请转到第4步B。
第4步A - 自签证书
这是一个相当简单的过程。 使用shell脚本,可以通过运行以下命令轻松签署自己的证书
# misc/CA -sign
一旦执行,程序从openssl.cnf
文件加载配置
文件。 打开CA密钥信息后,系统将提示您输入PEM密码短语,然后输入。 一旦输入密码,程序就会验证数据的完整性和有效性。 一旦完成检查,它将询问您是否要签署证书,输入“y”并继续。 整个结果应该是这样的:
# misc/CA -sign
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ../../CA/private/cakey.pem: XXXXXXXXX
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Dec 22 18:52:38 2006 GMT
Not After : Dec 22 18:52:38 2007 GMT
Subject:
countryName = US
stateOrProvinceName = Berkshire
localityName = Berkshire Hills
organizationName = My Secure Website Company
organizationalUnitName = Your IT Department
commonName = hostname.yourdomain.com
emailAddress = admin-email@yourdomain.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
CA:D9:9B:01:D2:9C:15:39:96:62:53:29:D6:6E:D8:B8:62:9D:A0:BD
X509v3 Authority Key Identifier:
keyid:DB:B6:B7:15:40:C4:7B:14:AE:F6:CB:A9:DF:44:C3:1E:39:AE:E0:DD
Certificate is to be certified until Dec 22 18:52:38 2007 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=Berkshire, O=My Secure Website Company, OU=Your IT Department,
CN=hostname/emailAddress=admin-email@yourdomain.com
Validity
Not Before: Dec 22 18:52:38 2006 GMT
Not After : Dec 22 18:52:38 2007 GMT
Subject: C=US, ST=Berkshire, L=Berkshire Hills, O=My Secure Website Company,
OU=Your IT Department, CN=hostname.yourdomain.com/emailAddress=admin-email@yourdomain.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:cc:91:db:ea:95:c6:d3:03:75:cd:74:b5:58:28:
b7:df:e5:33:4b:82:53:90:b0:98:5f:14:0b:d1:1a:
44:e4:41:0b:e8:59:f6:f9:d1:26:6a:d9:25:a5:ac:
8e:9d:f0:cd:65:f2:3a:13:b7:37:e2:82:3f:02:e4:
fd:f6:0b:eb:4d:27:97:2b:ab:74:07:8d:fa:0c:4b:
27:ea:c8:78:f6:1e:60:b9:fc:5f:30:0f:8f:02:4b:
d4:d1:b4:bc:a1:bb:d6:e9:dd:78:2e:76:28:21:b5:
5b:76:88:f7:cd:d3:40:26:07:33:2e:95:71:09:e1:
b4:5f:b2:95:99:fd:30:17:49
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
CA:D9:9B:01:D2:9C:15:39:96:62:53:29:D6:6E:D8:B8:62:9D:A0:BD
X509v3 Authority Key Identifier:
keyid:DB:B6:B7:15:40:C4:7B:14:AE:F6:CB:A9:DF:44:C3:1E:39:AE:E0:DD
Signature Algorithm: sha1WithRSAEncryption
69:a4:15:98:77:7e:fb:38:88:c3:a0:2e:d8:2b:24:51:50:2c:
cd:dc:a7:56:e0:f5:f3:01:73:47:b2:67:69:4b:94:28:e9:86:
51:fd:e0:2f:a0:30:8a:0d:0c:10:3d:5c:d5:4a:53:df:ea:0c:
38:49:61:1b:92:61:fe:7f:96:bb:65:f4:f9:14:40:52:7d:aa:
8c:0d:07:e1:06:aa:fb:bf:72:6f:7c:d1:68:6e:78:d6:30:7c:
6b:f0:b9:ce:57:5b:f9:d2:cc:df:2c:42:f3:e0:42:cf:0b:5e:
57:ff:72:ac:4a:2b:b9:ac:df:b7:23:80:ea:e4:37:01:b3:13:
9f:73
-----BEGIN CERTIFICATE-----
MIIDIjCCAougAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgDELMAkGA1UEBhMCVVMx
ETAPBgNVBAgTCENvbG9yYWRvMQ0wCwYDVQQKEwRVQ0NTMRkwFwYDVQQLExBDb21w
dXRlciBTY2llbmNlMQ4wDAYDVQQDEwVDQWZjNjEkMCIGCSqGSIb3DQEJARYVY2FA
ZmM2LmNzbmV0LnVjY3MuZWR1MB4XDTA2MTIyMjE4NTIzOFoXDTA3MTIyMjE4NTIz
OFowga8xCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhDb2xvcmFkbzEZMBcGA1UEBxMQ
Q29sb3JhZG8gU3ByaW5nczENMAsGA1UEChMEVUNDUzEZMBcGA1UECxMQQ29tcHV0
ZXIgU2NpZW5jZTEbMBkGA1UEAxMSZmM2LmNzbmV0LnVjY3MuZWR1MSswKQYJKoZI
hvcNAQkBFhx3ZWJtYXN0ZXJAZmM2LmNzbmV0LnVjY3MuZWR1MIGfMA0GCSqGSIb3
DQEBAQUAA4GNADCBiQKBgQDMkdvqlcbTA3XNdLVYKLff5TNLglOQsJhfFAvRGkTk
QQvoWfb50SZq2SWlrI6d8M1l8joTtzfigj8C5P32C+tNJ5crq3QHjfoMSyfqyHj2
HmC5/F8wD48CS9TRtLyhu9bp3XgudightVt2iPfN00AmBzMulXEJ4bRfspWZ/TAX
SQIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdl
bmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUytmbAdKcFTmWYlMp1m7YuGKd
oL0wHwYDVR0jBBgwFoAU27a3FUDEexSu9sup30TDHjmu4N0wDQYJKoZIhvcNAQEF
BQADgYEAaaQVmHd++ziIw6Au2CskUVAszdynVuD18wFzR7JnaUuUKOmGUf3gL6Aw
ig0MED1c1UpT3+oMOElhG5Jh/n+Wu2X0+RRAUn2qjA0H4Qaq+79yb3zRaG541jB8
a/C5zldb+dLM3yxC8+BCzwteV/9yrEoruazftyOA6uQ3AbMTn3M=
-----END CERTIFICATE-----
Signed certificate is in newcert.pem
证书现已自动签名并放在/ etc / pki / tls
目录中。 私钥和证书都需要重新命名,以便更好地识别他们所代表的服务器,以便执行以下操作:
# mv newcert.pem hostnameCert.prm
# mv newkey.pem hostnameKey.pem
这就对了! 继续执行第5步以配置Apache以使用新创建的信息。
第4步B - 可信证书
要获取某些第三方公司(如Thawte,VeriSign,GeoTrust或CACert.org)创建的服务器证书,请查找在第3步中创建的认证请求文件(该文件可以在/ etc / pki / tls / newreq.pem
)。 由于每个CA的运作方式不一样,所以你必须研究他们希望你提交这个文件中持有的数据(也称为一些网站的CSR)的方式; 然而,大多数地方都有一个简单的在线复制和粘贴过程或文件上传系统。 一旦你提交了在newreq.pem
文件中保存的数据,你会收到另一批与你提交的代码相似的代码。 这段代码是您的新签名/信任证书。
一旦你有了这个代码,你将需要将它保存回到/ etc / pki / tls
目录下,其文件名可以很容易地识别,比如hostnameCert.pem
完成此步骤后,即可进入第5步。
第5步:配置Apache使用您的证书
现在我们必须配置Apache服务器来利用SSL。 我们首先要做的是将我们新颁发的证书复制到正确的位置。 执行以下操作:
# cd /etc/httpd/conf
# ls -al
在列表中,查找名为ssl.key
和ssl.crt的目录
。 如果他们不存在,那么他们会:
# mkdir ssl.key ssl.crt
找到或创建目录后,现在是复制我们的证书:
# cp /etc/pki/tls/hostnameCert.pem ssl.crt/server.crt
# cp /etc/pki/tls/hostnameKey.pem ssl.key/server.key
复制文件后,现在是配置Apache服务器以使用它们的时候了。 做这个:
# cd /etc/httpd/conf.d
# ls -al
你应该看到一个名为ssl.conf
的文件。 继续使用您最喜爱的编辑器打开此文件。 这个文件有两件事需要改变。 它们在112和119行之间,看起来像这样:
# Server Certificate: # Point SSLCertificateFile at a PEM encoded certificate. If # the certificate is encrypted, then you will be prompted for a # pass phrase. Note that a kill -HUP will prompt again. A new # certificate can be generated using the genkey(1) command. SSLCertificateFile /etc/httpd/conf/ssl.crt/localhost.crt
# Server Private Key: # If the key is not combined with the certificate, use this # directive to point at the key file. Keep in mind that if # you've both a RSA and a DSA private key you can configure # both in parallel (to also allow the use of DSA ciphers, etc.) SSLCertificateKeyFile /etc/httpd/conf/ssl.key/localhost.key
将SSLCertificateFile
路径更改为/etc/httpd/conf/ssl.crt/server.crt
的新路径。 然后,我们需要将SSLCertificateKeyFile
更改为/etc/httpd/conf/ssl.key/server.key
的新路径。 一旦进行这些更改,保存并退出编辑器。
如果我们像现在一样离开配置,SSL将重新启动apache服务器。 然而,有一点 - 每次我们重新启动httpd服务器,它会要求我们PEM密码。 如果您能够始终监视系统,但是为了节省您头痛,我们可以解决这个问题,这是可以的。 要解决此问题,请执行以下操作:
# cd /etc/httpd/conf/ssl.key
# cp server.key server.key.orig
# openssl rsa -in server.key.orig -out server.key
您将被要求输入PEM密码,所以请输入并输入。 该程序将完成,并将创建不需要您在启动Apache时输入PEM密码的密钥文件。 为了安全起见,我们需要对此文件放置安全权限并重新启动Apache服务器:
# chmod 700 server.key
# service httpd restart
如果一切顺利,Apache将从没有问题开始。 现在是时候尝试新的安全网站了。 打开浏览器并导航到https://hostname.yourdomain.com
。
如果您决定执行自签名证书,或者通过CACert.org进行签名,您可能会收到有关该证书不被信任的消息。 这是正常的,你应该告诉浏览器接受证书。 一旦您在网站上,您应该能够查看您的证书和详细信息。
恭喜 - 您刚刚建立了SSL安全网站!