![我可以成为我的本地网络的根证书颁发机构吗?](https://linux22.com/image/1373814/%E6%88%91%E5%8F%AF%E4%BB%A5%E6%88%90%E4%B8%BA%E6%88%91%E7%9A%84%E6%9C%AC%E5%9C%B0%E7%BD%91%E7%BB%9C%E7%9A%84%E6%A0%B9%E8%AF%81%E4%B9%A6%E9%A2%81%E5%8F%91%E6%9C%BA%E6%9E%84%E5%90%97%EF%BC%9F.png)
这听起来可能很疯狂,但我能成为根证书颁发机构吗?我的意思是,我家里有很多电脑和智能设备。
- 远程桌面警告证书不受信任,因为它是由服务器本身颁发的。我使用证书管理器将其添加到受信任的根颁发机构,但它仍然发出警告。
当我从网络共享文件夹运行 EXE 时,它也会警告该 EXE 未经签名。
SSH 还会对证书发出警告
- 我还运行了一个供自己使用的 Web 服务器。我知道这不是那么必要,如果它使用 HTTPS 可能会更好,以防有人嗅探我的 Wi-Fi。
因此,为了实现这些,我可以颁发证书,并且我的所有设备都应接受这些证书作为有效、可信的证书。以下只是我想象的场景:
- 在我的其中一台电脑上安装一个证书生成程序,该程序将作为我的根权限。
- 制作一个根证书,并将其公钥复制到我的所有设备上,让它们将其作为受信任的根证书。
- 颁发由根证书的私钥签名的多个供本地使用的证书。
- 步骤 3 中生成的证书被我的所有设备接受为有效证书,无需任何进一步的繁琐工作。
这些事情可能吗?还是我应该购买真正的证书?再次强调,仅适用于本地区域。
答案1
你可以按照我的做法去做这教程。
在 Linux 上创建私有证书颁发机构
本教程将向您展示如何创建您自己的私有 CA 或证书颁发机构。这将使您有机会签署自己的证书,而无需向其他人付费。但是,由于您的私有 CA 不会被其他人信任,因此当其他人使用它时可能会提示警告。您需要将您的根证书添加到您想要信任您的 CA 的机器上。
我在 2008 年写过一篇类似的文章(使用 OpenSSL 创建证书颁发机构和证书),但本教程取代了旧教程中有关创建 CA 的说明。安装先决条件
我使用 Fedora 18 编写了本教程。我唯一需要的先决条件是 OpenSSL。
su -c 'yum install openssl'
Create Directory Structure
mkdir /home/cg/myca
cd /home/cg/myca/
mkdir private certs newcerts conf export csr
echo '01' > serial
touch index.txt
除非另有说明,我们将默认在 /home/cg/myca 目录中运行所有命令。配置文件
vim /home/cg/myca/conf/caconfig.cnf
此文件将作为 CA 的默认配置文件。它看起来应该类似于以下内容:
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /home/cg/myca/
certs = $dir/certs
crl_dir = $dir/crl
database = $dir/index.txt
new_certs_dir = $dir/newcerts
certificate = $dir/certs/cacert.pem
serial = $dir/serial
#crl = $dir/crl.pem
private_key = $dir/private/cakey.pem
#RANDFILE = $dir/private/.rand
x509_extensions = usr_cert
#crl_extensions = crl_ext
default_days = 3650
#default_startdate = YYMMDDHHMMSSZ
#default_enddate = YYMMDDHHMMSSZ
#default_crl_days= 30
#default_crl_hours = 24
default_md = sha1
preserve = no
#msie_hack
policy = policy_match
[ policy_match ]
countryName = match
stateOrProvinceName = match
localityName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 4096 # Size of keys
default_keyfile = key.pem # name of generated keys
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca
#input_password
#output_password
string_mask = nombstr # permitted characters
req_extensions = v3_req
[ 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 = New York
localityName = Locality Name (city, district)
localityName_default = New York
organizationName = Organization Name (company)
organizationName_default = Code Ghar
organizationalUnitName = Organizational Unit Name (department, division)
organizationalUnitName_default = IT
commonName = Common Name (hostname, FQDN, IP, or your name)
commonName_max = 64
commonName_default = CGIT
emailAddress = Email Address
emailAddress_max = 40
emailAddress_default = [email protected]
[ req_attributes ]
#challengePassword = A challenege password
#challengePassword_min = 4
#challengePassword_max = 20
#unstructuredName = An optional company name
[ usr_cert ]
basicConstraints= CA:FALSE
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
#nsComment = ''OpenSSL Generated Certificate''
#nsCertType = client, email, objsign for ''everything including object signing''
subjectAltName=email:copy
issuerAltName=issuer:copy
#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
#nsBaseUrl =
#nsRenewalUrl =
#nsCaPolicyUrl =
#nsSslServerName =
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
basicConstraints = CA:TRUE
#keyUsage = cRLSign, keyCertSign
#nsCertType = sslCA, emailCA
#subjectAltName=email:copy
#issuerAltName=issuer:copy
#obj=DER:02:03
[ crl_ext ]
#issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always,issuer:always
谢谢http://wwwneu.secit.at/web/documentation/openssl/openssl_cnf.html帮助处理此文件。
生成根证书
您可以使用我们在上一步中创建的配置文件 (caconfig.cnf) 来回答证书生成过程中提出的许多问题。只需运行以下命令并回答问题即可。大多数问题将具有 caconfig.cnf 中提供的默认值。
openssl req -new -x509 -days 3650 -config conf/caconfig.cnf -keyform PEM -keyout private/key.ca.cg.pem -outform PEM -out certs/crt.ca.cg.pem
尽管我们在 caconfig.cnf 文件中指定了默认天数,但在使用 x509 标志时,我们仍然必须指定天数标志。如果我们不这样做,证书将使用默认值 30 天创建。感谢 Re: default_days 问题和 OpenSSL req(1)。
如果您想提供自己的自定义值,您可以运行以下命令。
openssl req -new -x509 -days 3650 -newkey rsa:4096 -extensions v3_ca -keyform PEM -keyout private/key.ca.cg.pem -outform PEM -out certs/crt.ca.cg.pem
您将被要求输入密码。请确保使用安全密码,并且不要忘记密码。您还将被问到其他相关问题。以下是该过程的示例输出。
Generating a 4096 bit RSA private key
..............................................................................++
...........................................................................................................................................................................................................................................++
writing new private key to 'private/key.ca.cg.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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) [New York]:
Locality Name (city, district) [New York]:
Organization Name (company) [Code Ghar]:
Organizational Unit Name (department, division) [IT]:
Common Name (hostname, FQDN, IP, or your name) [CGIT]:
Email Address [[email protected]]:
Two files, key.ca.cg.pem and crt.ca.cg.pem, will be created in $dir/private and $dir/certs directories respectively. Make sure you keep these files in a secure place and make their backups.
crt.ca.cg.pem is your root certificate and will be used to sign all the other certificates.
验证根证书
您应该验证证书是否使用准确的信息正确创建。
openssl x509 -in certs/crt.ca.cg.pem -inform pem -noout -text
导出根证书
由于此新创建的 CA 及其根证书未被任何计算机识别和信任,因此您需要在所有其他计算机上导入根证书。默认情况下,操作系统会有一个受信任的 CA 列表,您需要将您的 CA 导入该列表。不同操作系统的流程不同。
视窗
我们创建的根证书是 PEM 编码格式。对于 Windows,我们需要它采用 DER 编码格式。有关两者之间差异的一个很好的资源是 DER、CRT、CER 和 PEM 证书以及如何转换它们。
openssl x509 -in certs/crt.ca.cg.pem -outform der -out export/ca.cg.crt
验证证书是否已创建成功。
openssl x509 -in export/ca.cg.crt -inform der -noout -text
获得导出的文件后,将其复制到 Windows 计算机。您可以按照如何在 Windows 中导入受信任的根证书颁发机构提供的说明将证书导入本地计算机上的受信任的根证书颁发机构存储。
您还可以将证书导出为 PKCS12 格式。感谢将用户证书导入 Windows 证书存储区提供此信息。
openssl pkcs12 -export -out export/ca.cg.p12 -in certs/crt.ca.cg.pem -inkey private/key.ca.cg.pem
您将被要求提供创建根证书时使用的密码。您还将被要求输入新的“导出密码”。
将 .p12 文件复制到 Windows 并双击。将打开向导并指导您进行安装。
结论
创建CA的过程很简单。接下来我将写如何签署证书请求。
答案2
这里有一篇关于如何设置你自己的证书颁发机构的精彩教程datacenteroverlords.com。
创建自己的证书颁发机构的过程非常简单:
- 创建私钥
- 自签名
- 在各个工作站上安装根 CA
完成此操作后,您通过 HTTPS 管理的每个设备只需按照以下步骤创建自己的证书:
- 为设备创建 CSR
- 使用根 CA 密钥签署 CSR