天天看點

Puppet cert指令參數介紹(四)

puppet cert是管理Puppet證書簽名的指令,在agent通路master時使用的是SSL安全套接字,優點是加密雙方的通信資料,進而保證資訊安全.puppet cert指令可以實作對證書的管理、授權、回收、顯示和産生簽名檔案.

1、檢視puppet cert幫助資訊:(幫助文檔注釋過多,隻截取參數部分)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

<code>[root@puppet ~]</code><code># puppet cert -h</code>

<code>* clean:        </code><code>#--clean清理Master主機上存儲的所有相關證書檔案.</code>

<code>  </code><code>Revoke a host's certificate (</code><code>if</code> <code>applicable) and remove all files</code>

<code>  </code><code>related to that host from puppet cert's storage. This is useful when</code>

<code>  </code><code>rebuilding hosts, since new certificate signing requests will only be</code>

<code>  </code><code>honored </code><code>if</code> <code>puppet cert does not have a copy of a signed certificate</code>

<code>  </code><code>for</code> <code>that host. If </code><code>'--all'</code> <code>is specified </code><code>then</code> <code>all host certificates,</code>

<code>  </code><code>both signed and unsigned, will be removed.</code>

<code>* fingerprint:        </code><code>#列印證書的算法.</code>

<code>  </code><code>Print the DIGEST (defaults to the signing algorithm) fingerprint of a</code>

<code>  </code><code>host's certificate.</code>

<code>* generate:        </code><code>#為指定的agent client域名簽發一個證書檔案.</code>

<code>  </code><code>Generate a certificate </code><code>for</code> <code>a named client. A certificate</code><code>/keypair</code> <code>will</code>

<code>  </code><code>be generated </code><code>for</code> <code>each client named on the </code><code>command</code> <code>line.</code>

<code>* list:        </code><code>#在Master上可以列出目前Agent機器等待簽發證書的資訊.</code>

<code>  </code><code>List outstanding certificate requests. If </code><code>'--all'</code> <code>is specified, signed</code>

<code>  </code><code>certificates are also listed, prefixed by </code><code>'+'</code><code>, and revoked or invalid</code>

<code>  </code><code>certificates are prefixed by </code><code>'-'</code> <code>(the verification outcome is printed</code>

<code>  </code><code>in</code> <code>parenthesis).</code>

<code>* print:        </code><code>#列印證書的版本資訊</code>

<code>  </code><code>Print the full-text version of a host's certificate.</code>

<code>* revoke:        </code><code>#回收指定的Agent證書.</code>

<code>  </code><code>Revoke the certificate of a client. The certificate can be specified either</code>

<code>  </code><code>by its serial number (given as a hexadecimal number prefixed by </code><code>'0x'</code><code>) or by its</code>

<code>  </code><code>hostname</code><code>. The certificate is revoked by adding it to the Certificate Revocation</code>

<code>  </code><code>List given by the </code><code>'cacrl'</code> <code>configuration option. Note that the puppet master</code>

<code>  </code><code>needs to be restarted after revoking certificates.</code>

<code>* sign:        </code><code>#簽署待認證的證書請求.</code>

<code>  </code><code>Sign an outstanding certificate request.</code>

<code>* verify:        </code><code>#确認證書是否由本地CA簽發.</code>

<code>  </code><code>Verify the named certificate against the </code><code>local</code> <code>CA certificate.</code>

<code>* reinventory:</code>

<code>  </code><code>Build an inventory of the issued certificates. This will destroy the current</code>

<code>  </code><code>inventory </code><code>file</code> <code>specified by </code><code>'cert_inventory'</code> <code>and recreate it from the</code>

<code>  </code><code>certificates found </code><code>in</code> <code>the </code><code>'certdir'</code><code>. Ensure the puppet master is stopped</code>

<code>  </code><code>before running this action.</code>

<code>OPTIONS(指令參數的子選項)</code>

<code>-------</code>

<code>Note that any setting that's valid </code><code>in</code> <code>the configuration</code>

<code>file</code> <code>is also a valid long argument. For example, </code><code>'ssldir'</code> <code>is a valid</code>

<code>setting, so you can specify </code><code>'--ssldir &lt;directory&gt;'</code> <code>as an</code>

<code>argument.</code>

<code>See the configuration </code><code>file</code> <code>documentation at</code>

<code>http:</code><code>//docs</code><code>.puppetlabs.com</code><code>/references/stable/configuration</code><code>.html </code><code>for</code> <code>the</code>

<code>full list of acceptable parameters. A commented list of all</code>

<code>configuration options can also be generated by running puppet cert with</code>

<code>'--genconfig'</code><code>.</code>

<code>* --all:        </code><code>#所有.可以使用在'sign','clean', 'list',and 'fingerprint'。</code>

<code>  </code><code>Operate on all items. Currently only makes sense with the </code><code>'sign'</code><code>,</code>

<code>  </code><code>'clean'</code><code>, </code><code>'list'</code><code>, and </code><code>'fingerprint'</code> <code>actions.</code>

<code>* --digest:        </code><code>#設定指紋提取的摘要(預設為使用的摘要簽署的證書)有效值為你的openssl和openssl ruby擴充版本.</code>

<code>  </code><code>Set the digest </code><code>for</code> <code>fingerprinting (defaults to the digest used when</code>

<code>  </code><code>signing the cert). Valid values depends on your openssl and openssl ruby</code>

<code>  </code><code>extension version.</code>

<code>* --debug:        </code><code>#調試模式</code>

<code>  </code><code>Enable full debugging.</code>

<code>* --help:</code>

<code>  </code><code>Print this help message</code>

<code>* --verbose:</code>

<code>  </code><code>Enable verbosity.</code>

<code>* --version:</code>

<code>  </code><code>Print the puppet version number and </code><code>exit</code><code>.</code>

<code>EXAMPLE</code>

<code>    </code><code>$ puppet cert list</code>

<code>    </code><code>culain.madstop.com</code>

<code>    </code><code>$ puppet cert sign culain.madstop.com</code>

2、舉例示範:

後續示範依舊使用下面三台機器,直到寫完puppet文章.

192.168.30.134  puppet

192.168.30.131  sh-web1

192.168.30.132  sh-proxy2

問題:Master上沒有autosign.conf檔案,需要手動簽署認證,怎麼操作或者說這台伺服器下架,格式化完做别的用途,證書資訊怎麼處理?

1、Master上去掉autosign.conf檔案.(windows svn用戶端本地修改就行.)

<a href="https://s4.51cto.com/wyfs02/M02/A4/C3/wKioL1mw_X6haLLhAAG9MxpCRbE920.png" target="_blank"></a>

2、重新開機puppetmaster 檢視證書.(已經簽署的證書,取消autosign.conf并沒有影響.)

<code>[root@puppet puppet]</code><code># /etc/init.d/puppetmaster reload</code>

<code>Stopping puppetmaster:                                     [  OK  ]</code>

<code>Starting puppetmaster:                                     [  OK  ]</code>

<code>[root@puppet puppet]</code><code># puppet cert list --all</code>

<code>+ </code><code>"puppet"</code>                <code>(SHA256) FF:75:FE:B7:8E:E5:46:4A:4A:AB:2F:8D:C4:B0:C6:43:95:47:74:0C:3E:3F:38:1E:1B:88:4C:45:66:23:78:3E (alt names: </code><code>"DNS:puppet"</code><code>, </code><code>"DNS:puppet.localdomain"</code><code>)</code>

<code>+ </code><code>"puppet.localdomain"</code>    <code>(SHA256) BA:F6:11:67:10:1D:93:1D:43:8C:1D:42:C8:EB:8F:6A:F1:25:FE:38:35:CB:17:7A:6D:59:99:34:05:CF:E1:FC (alt names: </code><code>"DNS:puppet"</code><code>, </code><code>"DNS:puppet.localdomain"</code><code>)</code>

<code>+ </code><code>"sh-proxy2.localdomain"</code> <code>(SHA256) 75:85:8E:AB:74:8A:D6:8E:0B:3A:87:33:2B:BA:60:D2:81:0A:23:5F:73:A4:90:AC:8B:34:DC:A4:F3:00:41:39</code>

<code>+ </code><code>"sh-web1.localdomain"</code>   <code>(SHA256) B9:31:9C:62:94:70:4A:DD:E3:35:0F:3F:14:BB:7A:C7:AE:BE:F9:24:BC:C9:92:ED:DB:1F:8C:95:65:09:97:5B</code>

3、删除Master端sh-proxy2的證書認證檔案.

 --revoke讓證書過期(預設證書過期時間5年,這個時間資料寫的,我沒确認過.),先讓證書過期,然後再清理.

<code>[root@puppet puppet]</code><code># puppet cert --revoke sh-proxy2.localdomain</code>

<code>Notice: Revoked certificate with serial 5</code>

<code>- </code><code>"sh-proxy2.localdomain"</code> <code>(SHA256) 75:85:8E:AB:74:8A:D6:8E:0B:3A:87:33:2B:BA:60:D2:81:0A:23:5F:73:A4:90:AC:8B:34:DC:A4:F3:00:41:39 (certificate revoked)</code>

<code> </code><code>--clean清理掉sh-proxy2.localdomain的證書.</code>

<code>[root@puppet puppet]</code><code># puppet cert --clean sh-proxy2.localdomain</code>

<code>Notice: Removing </code><code>file</code> <code>Puppet::SSL::Certificate sh-proxy2.localdomain at </code><code>'/var/lib/puppet/ssl/ca/signed/sh-proxy2.localdomain.pem'</code>

<code>Notice: Removing </code><code>file</code> <code>Puppet::SSL::Certificate sh-proxy2.localdomain at </code><code>'/var/lib/puppet/ssl/certs/sh-proxy2.localdomain.pem'</code>

<code>+ </code><code>"puppet"</code>              <code>(SHA256) FF:75:FE:B7:8E:E5:46:4A:4A:AB:2F:8D:C4:B0:C6:43:95:47:74:0C:3E:3F:38:1E:1B:88:4C:45:66:23:78:3E (alt names: </code><code>"DNS:puppet"</code><code>, </code><code>"DNS:puppet.localdomain"</code><code>)</code>

<code>+ </code><code>"puppet.localdomain"</code>  <code>(SHA256) BA:F6:11:67:10:1D:93:1D:43:8C:1D:42:C8:EB:8F:6A:F1:25:FE:38:35:CB:17:7A:6D:59:99:34:05:CF:E1:FC (alt names: </code><code>"DNS:puppet"</code><code>, </code><code>"DNS:puppet.localdomain"</code><code>)</code>

<code>+ </code><code>"sh-web1.localdomain"</code> <code>(SHA256) B9:31:9C:62:94:70:4A:DD:E3:35:0F:3F:14:BB:7A:C7:AE:BE:F9:24:BC:C9:92:ED:DB:1F:8C:95:65:09:97:5B</code>

4、清理完puppetmaster需要重新啟動下master.

5、删除掉sh-proxy2上的證書認證資訊:

<code>[root@sh-proxy2 puppet]</code><code># find ./ -type f -name "sh-proxy2.localdomain*" -exec mv {} /tmp/ \;</code>

<code>[root@sh-proxy2 puppet]</code><code># find ./ -type f -name "sh-proxy2.localdomain*" </code>

<code>[root@sh-proxy2 puppet]</code><code># ls /tmp/</code>

<code>sh-proxy2.localdomain.json  sh-proxy2.localdomain.pem  yum.log</code>

<a href="https://s3.51cto.com/wyfs02/M02/06/13/wKiom1mxAOCgMyFuAAAni2bbgOM439.png" target="_blank"></a>

6、重新開機啟動puppet agent服務,證書會自動重新生成.

<code>[root@sh-proxy2 puppet]</code><code># /etc/init.d/puppet restart</code>

<code>Stopping puppet agent:                                     [  OK  ]</code>

<code>Starting puppet agent:                                     [  OK  ]</code>

<code>.</code><code>/ssl/public_keys/sh-proxy2</code><code>.localdomain.pem</code>

<code>.</code><code>/ssl/private_keys/sh-proxy2</code><code>.localdomain.pem</code>

<code>.</code><code>/ssl/certificate_requests/sh-proxy2</code><code>.localdomain.pem</code>

<a href="https://s3.51cto.com/wyfs02/M01/A4/C4/wKioL1mxAQHRNbyzAAA75jI5MTk332.png" target="_blank"></a>

7、在puppet master上檢視證書:(+代表已經簽署認證的,沒'+'代表未簽署.)

<code>  </code><code>"sh-proxy2.localdomain"</code> <code>(SHA256) A6:80:BF:8F:07:0C:CB:F1:47:8C:B3:08:B8:A7:FB:A3:E8:E2:D3:7A:CE:3F:0C:E3:66:77:E8:06:18:36:82:0C</code>

8、手動簽署證書.(當然為了省事也可以puppet cert sign --all簽署所有待認證的.)

<code>[root@puppet puppet]</code><code># puppet cert sign sh-proxy2.localdomain</code>

<code>Notice: Signed certificate request </code><code>for</code> <code>sh-proxy2.localdomain</code>

<code>Notice: Removing </code><code>file</code> <code>Puppet::SSL::CertificateRequest sh-proxy2.localdomain at </code><code>'/var/lib/puppet/ssl/ca/requests/sh-proxy2.localdomain.pem'</code>

<code>+ </code><code>"sh-proxy2.localdomain"</code> <code>(SHA256) 6A:48:D0:4A:F3:4B:45:CE:D9:90:B1:FE:AA:91:6F:CB:06:50:17:BF:D1:D4:CE:1D:41:D2:9E:B5:24:AB:52:3A</code>

9、agent用戶端測試:

<code>[root@sh-proxy2 ~]</code><code># puppet agent -t</code>

<code>Info: Retrieving pluginfacts</code>

<code>Info: Retrieving plugin</code>

<code>Info: Caching catalog </code><code>for</code> <code>sh-proxy2.localdomain</code>

<code>Info: Applying configuration version </code><code>'1504752428'</code>

<code>Notice: Finished catalog run </code><code>in</code> <code>0.01 seconds</code>

注意:puppet cert list 檢視的隻是master端待認證的agent端證書,使用--all可以檢視未認證和認證的agent證書請求,'+'區分二者.

本文轉自青衫解衣 51CTO部落格,原文連結:http://blog.51cto.com/215687833/1963453

繼續閱讀