Не пакрытыя мае справу з камерцыйнага цэнтра каранёвага сертыфіката (CA). Замест гэтага, мы сталі нашы ўласныя каранёвага цэнтра сертыфікацыі, а знак нашай ўласныя сертыфікаты.
Гэтыя працэдуры былі распрацаваныя з выкарыстаннем OpenSSL 0.9.6, 24 Sep 2000, на Linux.
Недахопам з'яўляецца тое, што браўзэры будуць па-ранейшаму скардзяцца на нашым сайце не давяраюць да нашай каранёвай сертыфікат імпартуецца. Аднак, як толькі гэта будзе зроблена, мы нічым не адрозніваюцца ад камерцыйных каранёвыя цэнтры сертыфікацыі.
Кліенты будуць імпартаваць толькі нашы каранёвага сертыфіката, калі яны нам давяраюць. Тут камерцыйных цэнтраў сертыфікацыі прыходзяць у: яны мяркуюць зрабіць шырокія даследаванні ў людзей і арганізацый, для якіх яны сертыфікаты знак. Па імпарту (на самай справе, па браўзэраў ўключэння) іх давераных каранёвых сертыфікатаў, мы кажам, што мы ім давяраем, калі яны гарантуюць, што хто-то іншы, хто яны кажуць, што яны з'яўляюцца. Мы можам давяраць дадатковых каранёвых цэнтраў сертыфікацыі (як і мы), імпартуем іх CA сертыфікаты.
Заўвага: Калі вы знаходзіцеся ў бізнэсе працуе камэрцыйны абаронены сайт, атрымання камерцыйнай сертыфікат з'яўляецца адзіным рэальным выбарам.
# MkDir CA # CD CA # MkDir newcerts прыватных
CA/ newcerts каталог будзе змяшчаць:
# Эхо '01 '> серыйны # Touch index.txt
---Begin--- # # OpenSSL configuration file. # # Establish working directory. dir =. ----End----
Канфігурацыйны файл дзеліцца на часткі, якія выбарачна чытаць і апрацоўваюцца ў адпаведнасці з OpenSSL аргументы каманднага радка. Раздзелы могуць ўключаць адзін або некалькі іншых падзелаў, спасылаючыся на іх, што дапамагае зрабіць канфігурацыйны файл больш модульнай. Назва ў квадратных дужках (напрыклад "[REQ]") пачынаецца кожны падзел.
Зараз неабходна дадаць раздзел, які кантралюе, як сертыфікаты, якія, па падзеле вызначыць тып сертыфіката стварыць.
Першае, што мы павінны паказаць гэта адметная імя. Гэта тэкст, які ідэнтыфікуе ўладальніка сертыфіката пры праглядзе. Гэта не прамая спасылка на файл канфігурацыі, але ўваходзіць у раздзеле апрацоўваюцца, калі запыты на сертыфікаты ствараюцца. Каманда "OpenSSL REQ <args>", так што частка пад назвай [REQ].
Дадайце наступнае ў openssl.cnf:
---Begin--- [ req ] default_bits = 1024 # Size of keys default_keyfile = key.pem # name of generated keys default_md = md5 # message digest algorithm string_mask = nombstr # permitted characters distinguished_name = req_distinguished_name [ req_distinguished_name ] # Variable name Prompt string #---------------------- ---------------------------------- 0.organizationName = Organization Name (company) organizationalUnitName = Organizational Unit Name (department, division) emailAddress = Email Address emailAddress_max = 40 localityName = Locality Name (city, district) stateOrProvinceName = State or Province Name (full name) countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 commonName = Common Name (hostname, IP, or your name) commonName_max = 64 # Default values for the above, for consistency and less typing. # Variable name Value #------------------------------ ------------------------------ 0.organizationName_default = The Sample Company localityName_default = Metropolis stateOrProvinceName_default = New York countryName_default = US [ v3_ca ] basicConstraints = CA:TRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always ----End----
Усе падрыхтоўкі ў цяперашні час на месцы для стварэння нашага самозаверяющий каранёвага сертыфіката. Для гэтага мы хочам перавызначыць некаторыя значэнні па змаўчанні мы проста пакласці ў канфігурацыі, таму мы будзем паказваць наш перавызначаць у камандным радку.
Нашы пераазначэння "OpenSSL REQ" каманды:
Выканайце каманду, як паказана на малюнку. У гэтым выпадку, фраза PEM перадаць яго просіць з'яўляецца новым, які неабходна ўвесці ў два разы:
# openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem\ -out cacert.pem -days 3650 -config./openssl.cnf Using configuration from./openssl.cnf Generating a 1024 bit RSA private key .......++++++ ..........................++++++ writing new private key to 'private/cakey.pem' Enter PEM pass phrase:demo Verifying password - Enter PEM pass phrase:demo ----- 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. ----- Organization Name (company) [The Sample Company]:<enter> Organizational Unit Name (department, division) []:CA Division Email Address []:ca@sample.com Locality Name (city, district) [Metropolis]:<enter> State or Province Name (full name) [New York]:<enter> Country Name (2 letter code) [US]:<enter> Common Name (hostname, IP, or your name) []:TSC Root CA
Закрыты ключ (cakey.pem) выглядае наступным чынам:
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,0947F49BB28FE5F4 jlQvt9WdR9Vpg3WQT5+C3HU17bUOwvhp/r0+viMcBUCRW85UqI2BJJKTi1IwQQ4c tyTrhYJYOP+A6JXt5BzDzZy/B7tjEMDBosPiwH2m4MaP+6wTbi1qR1pFDL3fXYDr ZsuN08dkbw9ML6LOX5Rl6bIBL3i5hnGiqm338Fl52gNstThv0C/OZhXT3B4qsJn8 qZb3mC6U2nRaP/NpZPcEx4lv2vH7OzHTu1TZ7t0asSpgpuH58dfHPw775kZDep2F LXA3Oeavg0TLFHkaFBUx2xaeEG6Txpt9I74aAsw1T6UbTSjqgtsK0PHdjPNfPGlY 5U3Do1pnU9hfoem/4RAOe0cCovP/xf6YPBraSFPs4XFfnWwgEtL09ReFqO9T0aSp 5ajLyBOYOBKQ3PCSu1HQDw/OzphInhKxdYg81WBBEfELzSdMFQZgmfGrt5DyyWmq TADwWtGVvO3pEhO1STmCaNqZQSpSwEGPGo5RFkyFvyvyozWX2SZg4g1o1X40qSg9 0FMHTEB5HQebEkKBoRQMCJN/uyKXTLjNB7ibtVbZmfjsi9oNd3NJNVQQH+o9I/rP wtFsjs+t7SKrsFB2cxZQdDlFzD6EBA+5ytebGEI1lJHcOUEa6P+LTphlwh/o1QuN IKX2YKHA4ePrBzdgZ+xZuSLn/Qtjg/eZv6i73VXoHk8EdxfOk5xkJ+DnsNmyx0vq W53+O05j5xsxzDJfWr1lqBlFF/OkIYCPcyK1iLs4GOwe/V0udDNwr2Uw90tefr3q X1OZ9Dix+U0u6xXTZTETJ5dF3hV6GF7hP3Tmj9/UQdBwBzr+D8YWzQ== -----END RSA PRIVATE KEY-----
Сертыфікат (cacert.pem) выглядае наступным чынам:
-----BEGIN CERTIFICATE----- MIIDrTCCAxagAwIBAgIBADANBgkqhkiG9w0BAQQFADCBnDEbMBkGA1UEChMSVGhl IFNhbXBsZSBDb21wYW55MRQwEgYDVQQLEwtDQSBEaXZpc2lvbjEcMBoGCSqGSIb3 DQEJARYNY2FAc2FtcGxlLmNvbTETMBEGA1UEBxMKTWV0cm9wb2xpczERMA8GA1UE CBMITmV3IFlvcmsxCzAJBgNVBAYTAlVTMRQwEgYDVQQDEwtUU0MgUm9vdCBDQTAe Fw0wMTEyMDgwNDI3MDVaFw0wMjEyMDgwNDI3MDVaMIGcMRswGQYDVQQKExJUaGUg U2FtcGxlIENvbXBhbnkxFDASBgNVBAsTC0NBIERpdmlzaW9uMRwwGgYJKoZIhvcN AQkBFg1jYUBzYW1wbGUuY29tMRMwEQYDVQQHEwpNZXRyb3BvbGlzMREwDwYDVQQI EwhOZXcgWW9yazELMAkGA1UEBhMCVVMxFDASBgNVBAMTC1RTQyBSb290IENBMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaiAwfKB6ZBtnTRTIo6ddomt0S9ec0 NcuvtJogt0s9dXpHowh98FCDjnLtCi8du6LDTZluhlOtTFARPlV/LVnpsbyMCXMs G2qpdjJop+XIBdvoCz2HpGXjUmym8WLqt+coWwJqUSwiEba74JG93v7TU+Xcvc00 5MWnxmKZzD/R3QIDAQABo4H8MIH5MAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFG/v yytrBtEquMX2dreysix/MlPMMIHJBgNVHSMEgcEwgb6AFG/vyytrBtEquMX2drey six/MlPMoYGipIGfMIGcMRswGQYDVQQKExJUaGUgU2FtcGxlIENvbXBhbnkxFDAS BgNVBAsTC0NBIERpdmlzaW9uMRwwGgYJKoZIhvcNAQkBFg1jYUBzYW1wbGUuY29t MRMwEQYDVQQHEwpNZXRyb3BvbGlzMREwDwYDVQQIEwhOZXcgWW9yazELMAkGA1UE BhMCVVMxFDASBgNVBAMTC1RTQyBSb290IENBggEAMA0GCSqGSIb3DQEBBAUAA4GB ABclymJfsPOUazNQO8aIaxwVbXWS+8AFEkMMRx6O68ICAMubQBvs8Buz3ALXhqYe FS5G13pW2ZnAlSdTkSTKkE5wGZ1RYSfyiEKXb+uOKhDN9LnajDzaMPkNDU2NDXDz SqHk9ZiE1boQaMzjNLu+KabTLpmL9uXvFA/i+gdenFHv -----END CERTIFICATE-----
# openssl x509 -in cacert.pem -noout -text # openssl x509 -in cacert.pem -noout -dates # openssl x509 -in cacert.pem -noout -purpose
Наш канфігурацыйны файл трэба яшчэ некалькі азначэнняў для стварэння не-CA сертыфікаты. Дадаць наступны тэкст у канцы файла:
---Begin--- [ v3_req ] basicConstraints = CA:FALSE subjectKeyIdentifier = hash ----End----
---Begin--- distinguished_name = req_distinguished_name req_extensions = v3_req ----End----
# OpenSSL REQ-Нью-вузлоў з-req.pem-канфігурацыі./ Openssl.cnf ... Падраздзяленне Назва (аддзел, падраздзяленне) []: Mail Server Электронны адрас: []: postmaster@sample.com Агульнае імя (імя хосту, IP, ці ваша імя) []: mail.sample.com ...
Запыт на подпіс сертыфіката выглядае наступным чынам:
-----BEGIN CERTIFICATE REQUEST----- MIICJDCCAY0CAQAwgagxGzAZBgNVBAoTElRoZSBTYW1wbGUgQ29tcGFueTEUMBIG A1UECxMLTWFpbCBTZXJ2ZXIxJDAiBgkqhkiG9w0BCQEWFXBvc3RtYXN0ZXJAc2Ft cGxlLmNvbTETMBEGA1UEBxMKTWV0cm9wb2xpczERMA8GA1UECBMITmV3IFlvcmsx CzAJBgNVBAYTAlVTMRgwFgYDVQQDEw9tYWlsLnNhbXBsZS5jb20wgZ8wDQYJKoZI hvcNAQEBBQADgY0AMIGJAoGBAPJhc++WxcBaoDbJpzFbDg42NcOz/ELVFMU4FlPa yUzUO+xXkdFRMPKo54d4Pf1w575Jhlu9lE+kJ8QN2st6JFySbc9QjPwVwl9D2+I3 SSf2kVTu+2Ur5izCPbVAfU0rPZxxK8ELoOkA1uwwjFz6EFuVvnHwlguonWKDtmYW u7KTAgMBAAGgOzA5BgkqhkiG9w0BCQ4xLDAqMAkGA1UdEwQCMAAwHQYDVR0OBBYE FLWaQsUVIQzWr58HtDinH1JfeCheMA0GCSqGSIb3DQEBBAUAA4GBAAbe0jrGEQ3i tyVfy5Lg4/f69rKvDGs+uhZJ9ZRx7Dl92Qq2osE7XrLB1bANmcoEv/ORLZOjWZEY NjMvuz60O7R8GKBrvb/YhAwWhIIt2LJqPkpAEWS0kY0AkoQcfZ7h6oC35+eJ7okg Uu3WuE57RgcNt7/ftr0sG1jUyRwMLvhv -----END CERTIFICATE REQUEST-----
# openssl req -in req.pem -text -verify -noout
---Begin--- [ ca ] default_ca = CA_default [ CA_default ] serial = $dir/serial database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/cacert.pem private_key = $dir/private/cakey.pem default_days = 365 default_md = md5 preserve = no email_in_dn = no nameopt = default_ca certopt = default_ca policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional ----End----
# openssl ca -out cert.pem -config./openssl.cnf -infiles req.pem Using configuration from./openssl.cnf Enter PEM pass phrase:demo Check that the request matches the signature Signature ok The Subjects Distinguished Name is as follows organizationName :PRINTABLE:'The Sample Company' organizationalUnitName:PRINTABLE:'Mail Server' emailAddress :IA5STRING:'postmaster@sample.com' localityName :PRINTABLE:'Metropolis' stateOrProvinceName :PRINTABLE:'New York' countryName :PRINTABLE:'US' commonName :PRINTABLE:'mail.sample.com' Certificate is to be certified until Dec 8 04:37:38 2002 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
# openssl x509 -in cert.pem -noout -text -purpose | more
# Cert.pem tmp.pem М. В. # OpenSSL x509-у-па-за cert.pem tmp.pem
# Key.pem cert.pem коткі> ключ-cert.pem
| File | Comment |
| /home/httpd/html | Apache DocumentRoot |
| /home/httpd/ssl | SSL-related files |
| /home/httpd/ssl/cert.pem | Site certificate |
| /home/httpd/ssl/key.pem | Site private key |
У <VirtualHost> дырэктывы для сайта (што, вядома, павінны быць на порт 443), уключаюць дырэктывы, якія паказваюць на гэтыя файлы:
<VirtualHost 192.168.1.1:443> ServerName mail.sample.com DocumentRoot/home/httpd/html ... other directives for this site... SSLEngine on SSLLog/var/log/ssl_engine_log SSLCertificateFile/home/httpd/ssl/cert.pem SSLCertificateKeyFile/home/httpd/ssl/key.pem </VirtualHost>
Ключ і сертыфікат прадастаўляецца ў тым жа файле. Яны могуць пайсці куды-небудзь, але ў добрым месцы можа быць / і г.д./ SSL/ сертыфікаты. Пакажыце яго ў камандным радку Stunnel наступным чынам:
stunnel -p/etc/ssl/certs/key-cert.pem <other stunnel args...>
У першым выпадку, у вас ёсць два варыянты. Вы можаце ствараць новыя запыты падпісання сертыфіката і знака іх, як апісана вышэй, або (калі вы трымалі іх), вы можаце зноўку падпісваць арыгіналы запытаў. У любым выпадку, старыя сертыфікаты павінны быць адмененыя, а затым новыя сертыфікаты, падпісаныя і ўстаноўлены ў вашым бяспечных прыкладанняў, як апісана вышэй.
Вы не можаце аформіць два сертыфіката з тым жа агульнапрынятае назву, таму пратэрмінаваныя сертыфікаты павінны быць адмененыя. Сертыфікат у каталогу newcerts, вы можаце вызначыць яго імя файла, пяройдучы па спасылцы index.txt і пошук Common Name (CN) на ім. Імя файла індэкса плюс пашырэнне ". PEM", напрыклад "02.pem". Каб адклікаць сертыфікат:
# openssl ca -revoke newcerts/02.pem -config./openssl.cnf Using configuration from./openssl.cnf Enter PEM pass phrase: demo Revoking Certificate 02. Data Base Updated
Гэты сертыфікат будзе аўтаматычна давяраюць браўзэры кліента, як браўзэр мае сертыфікат камерцыйнага цэнтра сертыфікацыі ўбудаванымі Існуе няма неабходнасці распаўсюджваць што-небудзь.
Канфігурацыя, апісаная тут, можа быць недастаткова для гэтай мэты, а ёсць нашмат больш, што можа перайсці ў запыт. Розныя цэнтраў сертыфікацыі патрабуюць розных функцый у запыт сертыфіката подпісы, ні адзін з якіх мы сышлі ў тут. Гэты дадатковы матэрыял за межы бягучага рамкі гэтага дакумента.
Apache будзе служыць ваш сертыфікат ў форме, якая дае браўзэры, калі вы укажыце яго MIME-тып. Напрыклад, вы можаце выкарыстоўваць пашырэнне файла для загружанага сертыфікаты, і пакласці наступнае ў агульным раздзеле канфігурацыі Apache "CRT.":
AddType application/x-x509-ca-cert.crt
CRL можа быць створаны наступным чынам:
# openssl ca -gencrl -crldays 31 -config./openssl.cnf -out rootca.crl
# mkdir CA # cd CA # mkdir newcerts private # echo '01' >serial # touch index.txt # (IMPORTANT: Install and edit the configuration file shown below.) # openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem\ -out cacert.pem -days 365 -config./openssl.cnf
| Файл | Мэта |
| cacert.pem | CA сертыфікат |
| прыватных/ cakey.pem | CA закрыты ключ |
Размеркаваць cacert.pem для вашых кліентаў.
# openssl req -new -nodes -out req.pem -config./openssl.cnf # openssl ca -out cert.pem -config./openssl.cnf -infiles req.pem # cat key.pem cert.pem >key-cert.pem
| Файл | Мэта |
| key.pem | Сакрэтны ключ |
| req.pem | Запыт на подпіс сертыфіката |
| cert.pem | Сертыфікат |
| ключавыя cert.pem | Камбінаваны ключ і сертыфікат |
Устанавіць key.pem і cert.pem, ці проста ключ-cert.pem па меры неабходнасці для вашага сервера прыкладанняў.
# openssl ca -revoke newcerts/<serial>.pem -config./openssl.cnf # openssl ca -out cert.pem -config./openssl.cnf -infiles req.pem
---Begin--- # # OpenSSL configuration file. # # Establish working directory. dir =. [ ca ] default_ca = CA_default [ CA_default ] serial = $dir/serial database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/cacert.pem private_key = $dir/private/cakey.pem default_days = 365 default_md = md5 preserve = no email_in_dn = no nameopt = default_ca certopt = default_ca policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 1024 # Size of keys default_keyfile = key.pem # name of generated keys default_md = md5 # message digest algorithm string_mask = nombstr # permitted characters distinguished_name = req_distinguished_name req_extensions = v3_req [ req_distinguished_name ] # Variable name Prompt string #---------------------- ---------------------------------- 0.organizationName = Organization Name (company) organizationalUnitName = Organizational Unit Name (department, division) emailAddress = Email Address emailAddress_max = 40 localityName = Locality Name (city, district) stateOrProvinceName = State or Province Name (full name) countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 commonName = Common Name (hostname, IP, or your name) commonName_max = 64 # Default values for the above, for consistency and less typing. # Variable name Value #------------------------------ ------------------------------ 0.organizationName_default = The Sample Company localityName_default = Metropolis stateOrProvinceName_default = New York countryName_default = US [ v3_ca ] basicConstraints = CA:TRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always [ v3_req ] basicConstraints = CA:FALSE subjectKeyIdentifier = hash ----End----