2016-01-20 3 views
2

Как установить целую цепочку с помощью пакета golang .x509? Скажем, мне нужен самозаверяющий сертификат ЦС и сертификат для сервера, выпущенного CA. Когда я используюИнфраструктура PKI

x509.CreateCertificate(rand.Reader, &issuer, &issuer, publicKeyIssuer, privateKeyIssuer) 

затем

x509.CreateCertificate(rand.Reader, &subject, &issuer, publicKeySubject, privateKeyIssuer) 

он не работает. Сертификат создается, и когда сервер отправляет его в браузер, браузер не видит путь от сервера до ca.

Если я использую OpenSSL и создать запрос на сертификат для сервера, а затем сертификат, то это все хорошо

openssl req -key server.key -new -out server.req -sha256 
openssl x509 -req -in server.req -CA ca.crt -CAkey ca.key -out server.crt 

Я знаю, что есть x509.CreateCertificateReuest, но я сейчас не как связать запрос с созданием сертификата ? Что я делаю неправильно или, возможно, сейчас не так много о x509.CreateCertificate?

ответ

1

То, что я должен был знать, прежде чем задать свой вопрос http://www.oasis-pki.org/pdfs/Understanding_Path_construction-DS2.pdf

DN имена (Subject в CA сертификат и эмитенте в сертификате сервера) должны быть одинаковыми. Но имена DN субъекта и эмитента не должны быть равны. DN составляют связь между Эмитентом и Субъектом.

В моем случае я использовал только O = Организация подала в

ca := x509.Certificate{ 
    Subject: pkix.Name{ 
       Organization: []string{"O"}, 
      } 
} 
server := x509.Certificate{ 
    Subject: pkix.Name{ 
       Organization: []string{"O"}, 
      } 
} 

DN являются одинаковыми для эмитента и для subject.That поэтому браузер не может найти путь. Это просто добавить дополнительную информацию в pkix, например CommonName. Это сделает DN уникальным.

ca := x509.Certificate{ 
    Subject: pkix.Name{ 
       CommonName: []string{"CA"}, 
       Organization: []string{"XUnit"}, 
      } 
} 
server := x509.Certificate{ 
    Subject: pkix.Name{ 
       CommonName: []string{"server"}, 
       Organization: []string{"XUnit"}, 
      } 
} 
Смежные вопросы