2010-03-31 15:38:27 +0000 2010-03-31 15:38:27 +0000
63
63

如何创建自己的证书链?

我想建立自己的OCSP响应器(只是为了测试目的)。这需要我有一个根证书和由它生成的一些证书。

我已经成功地使用openssl创建了一个自签名证书。我想用它作为根证书。下一步是创建衍生证书。然而,我似乎找不到关于如何做到这一点的文档。有人知道在哪里可以找到这些信息吗?

编辑 现在回想起来,我的问题还没有完全解答。为了澄清这个问题,我将这样表示我的证书链。

ROOT -> A -> B -> C -> …

我目前能够创建ROOT和A证书,但我还没有找到如何制作更长的链。

我的创建根证书的命令是

openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key
openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem

A证书是这样创建的:

openssl genrsa -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.cer

这条命令隐含地依赖于根证书,它在openssl配置文件中找到所需信息。

然而,证书B必须只依赖于A,而A并没有在配置文件中注册,所以前面的命令在这里不起作用。

我应该用什么命令行来创建证书B及以后的证书?

编辑 我在【本文】(http://www.ibm.com/developerworks/java/library/j-certgen/)中找到了答案。B证书(链A ->B)可以用这两个命令来创建。

# Create a certificate request
openssl req -new -keyout B.key -out B.request -days 365

# Create and sign the certificate
openssl ca -policy policy_anything -keyfile A.key -cert A.pem -out B.pem -infiles B.request

我还修改了openssl.cnf文件。

[usr_cert]
basicConstraints=CA:TRUE # prev value was FALSE

这种方法似乎很有效。

答案 (4)

28
28
28
2010-03-31 18:03:18 +0000

你可以直接使用OpenSSL。

1.创建一个证书颁发机构的私钥(这是你最重要的密钥):

2.创建你的CA自签证书:

  1. 创建你的CA自签证书。

  2. 通过首先生成密钥,然后请求(或使用外部系统提供的密钥),然后使用你的CA的私钥签署证书来签发客户证书:

(你可能需要添加一些选项,因为我是将这些命令与我的openssl.conf文件一起使用的。) 你可能需要先设置你自己的.conf文件)。)

14
14
14
2012-04-29 17:54:40 +0000

一旦你创建了你的CA,你就可以用它来签名。

  • 创建一个密钥:

  • 创建一个csr:

  • 签署:

你的改变:

basicConstraints=CA:TRUE # prev value was FALSE

意味着你发行的证书可以用来签署其他证书。

9
9
9
2010-03-31 17:51:10 +0000

OpenSSL带有一个Perl脚本 “CA.pl "来帮助你创建一个自签名的根CA证书,以及匹配的私钥,再加上一些简单的文件和目录来帮助你跟踪你与该根CA签署(也就是发行)的任何未来的证书。它还可以帮助你生成其他密钥对和证书签署请求(CSR),并帮助你处理这些CSR(也就是为它们签发证书),以及更多。

请注意,许多产品要求CA证书包含一定的属性,标志着它们是CA证书,否则它们将不被接受为其他证书的有效签名者/签发者。如果你创建的自签名证书不包含该属性,你可能会难以让其他软件将其视为有效的根CA证书。

如果我没记错的话,语法是这样的。

CA.pl -newca # Create a new root CA  

CA.pl -newreq # Create a new CSR

CA.pl -sign # Sign a CSR, creating a cert  

CA.pl -pkcs12 # Turn an issued cert, plus its matching private key and trust chain, into a .p12 file you can install on another machine
-1
-1
-1
2018-11-06 22:59:55 +0000

我找到了这个帖子。https://stackoverflow.com/questions/19665863/how-do-i-use-a-self-signed-certificate-for-a-https-node-js-server

这是为Node.JS准备的,但在这个GitHub repo中的脚本使用openSLL命令来创建一个根CA证书和域证书。

使用openSLL运行。bash make-root-ca-and-certificates.sh 'example.com'

或者对于本地主机使用: bash make-root-ca-and-certificates.sh 'localhost'

make-root-ca-and-certificates.sh

#!/bin/bash
FQDN=$1

# make directories to work from
mkdir -p certs/{server,client,ca,tmp}

# Create your very own Root Certificate Authority
openssl genrsa \
  -out certs/ca/my-root-ca.key.pem \
  2048

# Self-sign your Root Certificate Authority
# Since this is private, the details can be as bogus as you like
openssl req \
  -x509 \
  -new \
  -nodes \
  -key certs/ca/my-root-ca.key.pem \
  -days 1024 \
  -out certs/ca/my-root-ca.crt.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Signing Authority Inc/CN=example.com"

# Create a Device Certificate for each domain,
# such as example.com, *.example.com, awesome.example.com
# NOTE: You MUST match CN to the domain name or ip address you want to use
openssl genrsa \
  -out certs/server/privkey.pem \
  2048

# Create a request from your Device, which your Root CA will sign
openssl req -new \
  -key certs/server/privkey.pem \
  -out certs/tmp/csr.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Tech Inc/CN=${FQDN}"

# Sign the request from Device with your Root CA
# -CAserial certs/ca/my-root-ca.srl
openssl x509 \
  -req -in certs/tmp/csr.pem \
  -CA certs/ca/my-root-ca.crt.pem \
  -CAkey certs/ca/my-root-ca.key.pem \
  -CAcreateserial \
  -out certs/server/cert.pem \
  -days 500

# Create a public key, for funzies
# see https://gist.github.com/coolaj86/f6f36efce2821dfb046d
openssl rsa \
  -in certs/server/privkey.pem \
  -pubout -out certs/client/pubkey.pem

# Put things in their proper place
rsync -a certs/ca/my-root-ca.crt.pem certs/server/chain.pem
rsync -a certs/ca/my-root-ca.crt.pem certs/client/chain.pem
cat certs/server/cert.pem certs/server/chain.pem > certs/server/fullchain.pem
```。