forked from PowerShell/openssh-portable
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- [email protected] 2010/04/16 01:47:26
[PROTOCOL.certkeys auth-options.c auth-options.h auth-rsa.c] [auth2-pubkey.c authfd.c key.c key.h myproposal.h ssh-add.c] [ssh-agent.c ssh-dss.c ssh-keygen.1 ssh-keygen.c ssh-rsa.c] [sshconnect.c sshconnect2.c sshd.c] revised certificate format ssh-{dss,rsa}[email protected] with the following changes: move the nonce field to the beginning of the certificate where it can better protect against chosen-prefix attacks on the signature hash Rename "constraints" field to "critical options" Add a new non-critical "extensions" field Add a serial number The older format is still support for authentication and cert generation (use "ssh-keygen -t v00 -s ca_key ..." to generate a v00 certificate) ok markus@
- Loading branch information
Showing
19 changed files
with
449 additions
and
213 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -41,6 +41,27 @@ | |
retry lookup for private key if there's no matching key with CKA_SIGN | ||
attribute enabled; this fixes fixes MuscleCard support (bugzilla #1736) | ||
ok djm@ | ||
- [email protected] 2010/04/16 01:47:26 | ||
[PROTOCOL.certkeys auth-options.c auth-options.h auth-rsa.c] | ||
[auth2-pubkey.c authfd.c key.c key.h myproposal.h ssh-add.c] | ||
[ssh-agent.c ssh-dss.c ssh-keygen.1 ssh-keygen.c ssh-rsa.c] | ||
[sshconnect.c sshconnect2.c sshd.c] | ||
revised certificate format ssh-{dss,rsa}[email protected] with the | ||
following changes: | ||
|
||
move the nonce field to the beginning of the certificate where it can | ||
better protect against chosen-prefix attacks on the signature hash | ||
|
||
Rename "constraints" field to "critical options" | ||
|
||
Add a new non-critical "extensions" field | ||
|
||
Add a serial number | ||
|
||
The older format is still support for authentication and cert generation | ||
(use "ssh-keygen -t v00 -s ca_key ..." to generate a v00 certificate) | ||
|
||
ok markus@ | ||
|
||
20100410 | ||
- (dtucker) [configure.ac] Put the check for the existence of getaddrinfo | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,7 +16,7 @@ These protocol extensions build on the simple public key authentication | |
system already in SSH to allow certificate-based authentication. | ||
The certificates used are not traditional X.509 certificates, with | ||
numerous options and complex encoding rules, but something rather | ||
more minimal: a key, some identity information and usage constraints | ||
more minimal: a key, some identity information and usage options | ||
that have been signed with some other trusted key. | ||
|
||
A sshd server may be configured to allow authentication via certified | ||
|
@@ -27,7 +27,7 @@ of acceptance of certified host keys, by adding a similar ability | |
to specify CA keys in ~/.ssh/known_hosts. | ||
|
||
Certified keys are represented using two new key types: | ||
ssh-rsa-cert-v00@openssh.com and ssh-dss-cert-v00@openssh.com that | ||
ssh-rsa-cert-v01@openssh.com and ssh-dss-cert-v01@openssh.com that | ||
include certification information along with the public key that is used | ||
to sign challenges. ssh-keygen performs the CA signing operation. | ||
|
||
|
@@ -47,7 +47,7 @@ in RFC4252 section 7. | |
New public key formats | ||
---------------------- | ||
|
||
The ssh-rsa-cert-v00@openssh.com and ssh-dss-cert-v00@openssh.com key | ||
The ssh-rsa-cert-v01@openssh.com and ssh-dss-cert-v01@openssh.com key | ||
types take a similar high-level format (note: data types and | ||
encoding are as per RFC4251 section 5). The serialised wire encoding of | ||
these certificates is also used for storing them on disk. | ||
|
@@ -57,42 +57,55 @@ these certificates is also used for storing them on disk. | |
|
||
RSA certificate | ||
|
||
string "[email protected]" | ||
string "[email protected]" | ||
string nonce | ||
mpint e | ||
mpint n | ||
uint64 serial | ||
uint32 type | ||
string key id | ||
string valid principals | ||
uint64 valid after | ||
uint64 valid before | ||
string constraints | ||
string nonce | ||
string critical options | ||
string extensions | ||
string reserved | ||
string signature key | ||
string signature | ||
|
||
DSA certificate | ||
|
||
string "[email protected]" | ||
string "[email protected]" | ||
string nonce | ||
mpint p | ||
mpint q | ||
mpint g | ||
mpint y | ||
uint64 serial | ||
uint32 type | ||
string key id | ||
string valid principals | ||
uint64 valid after | ||
uint64 valid before | ||
string constraints | ||
string nonce | ||
string critical options | ||
string extensions | ||
string reserved | ||
string signature key | ||
string signature | ||
|
||
The nonce field is a CA-provided random bitstring of arbitrary length | ||
(but typically 16 or 32 bytes) included to make attacks that depend on | ||
inducing collisions in the signature hash infeasible. | ||
|
||
e and n are the RSA exponent and public modulus respectively. | ||
|
||
p, q, g, y are the DSA parameters as described in FIPS-186-2. | ||
|
||
serial is an optional certificate serial number set by the CA to | ||
provide an abbreviated way to refer to certificates from that CA. | ||
If a CA does not with to number its certificates it must set this | ||
field to zero. | ||
|
||
type specifies whether this certificate is for identification of a user | ||
or a host using a SSH_CERT_TYPE_... value. | ||
|
||
|
@@ -112,13 +125,15 @@ certificate. Each represents a time in seconds since 1970-01-01 | |
00:00:00. A certificate is considered valid if: | ||
valid after <= current time < valid before | ||
|
||
constraints is a set of zero or more key constraints encoded as below. | ||
criticial options is a set of zero or more key options encoded as | ||
below. All such options are "critical" in the sense that an implementation | ||
must refuse to authorise a key that has an unrecognised option. | ||
|
||
The nonce field is a CA-provided random bitstring of arbitrary length | ||
(but typically 16 or 32 bytes) included to make attacks that depend on | ||
inducing collisions in the signature hash infeasible. | ||
extensions is a set of zero or more optional extensions. These extensions | ||
are not critical, and an implementation that encounters one that it does | ||
not recognise may safely ignore it. No extensions are defined at present. | ||
|
||
The reserved field is current unused and is ignored in this version of | ||
The reserved field is currently unused and is ignored in this version of | ||
the protocol. | ||
|
||
signature key contains the CA key used to sign the certificate. | ||
|
@@ -132,22 +147,22 @@ up to, and including the signature key. Signatures are computed and | |
encoded according to the rules defined for the CA's public key algorithm | ||
(RFC4253 section 6.6 for ssh-rsa and ssh-dss). | ||
|
||
Constraints | ||
----------- | ||
Critical options | ||
---------------- | ||
|
||
The constraints section of the certificate specifies zero or more | ||
constraints on the certificates validity. The format of this field | ||
The critical options section of the certificate specifies zero or more | ||
options on the certificates validity. The format of this field | ||
is a sequence of zero or more tuples: | ||
|
||
string name | ||
string data | ||
|
||
The name field identifies the constraint and the data field encodes | ||
constraint-specific information (see below). All constraints are | ||
"critical", if an implementation does not recognise a constraint | ||
The name field identifies the option and the data field encodes | ||
option-specific information (see below). All options are | ||
"critical", if an implementation does not recognise a option | ||
then the validating party should refuse to accept the certificate. | ||
|
||
The supported constraints and the contents and structure of their | ||
The supported options and the contents and structure of their | ||
data fields are: | ||
|
||
Name Format Description | ||
|
@@ -159,35 +174,35 @@ force-command string Specifies a command that is executed | |
|
||
permit-X11-forwarding empty Flag indicating that X11 forwarding | ||
should be permitted. X11 forwarding will | ||
be refused if this constraint is absent. | ||
be refused if this option is absent. | ||
|
||
permit-agent-forwarding empty Flag indicating that agent forwarding | ||
should be allowed. Agent forwarding | ||
must not be permitted unless this | ||
constraint is present. | ||
option is present. | ||
|
||
permit-port-forwarding empty Flag indicating that port-forwarding | ||
should be allowed. If this constraint is | ||
should be allowed. If this option is | ||
not present then no port forwarding will | ||
be allowed. | ||
|
||
permit-pty empty Flag indicating that PTY allocation | ||
should be permitted. In the absence of | ||
this constraint PTY allocation will be | ||
this option PTY allocation will be | ||
disabled. | ||
|
||
permit-user-rc empty Flag indicating that execution of | ||
~/.ssh/rc should be permitted. Execution | ||
of this script will not be permitted if | ||
this constraint is not present. | ||
this option is not present. | ||
|
||
source-address string Comma-separated list of source addresses | ||
from which this certificate is accepted | ||
for authentication. Addresses are | ||
specified in CIDR format (nn.nn.nn.nn/nn | ||
or hhhh::hhhh/nn). | ||
If this constraint is not present then | ||
If this option is not present then | ||
certificates may be presented from any | ||
source address. | ||
|
||
$OpenBSD: PROTOCOL.certkeys,v 1.3 2010/03/03 22:50:40 djm Exp $ | ||
$OpenBSD: PROTOCOL.certkeys,v 1.4 2010/04/16 01:47:25 djm Exp $ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
/* $OpenBSD: auth-options.c,v 1.49 2010/03/16 15:46:52 stevesk Exp $ */ | ||
/* $OpenBSD: auth-options.c,v 1.50 2010/04/16 01:47:26 djm Exp $ */ | ||
/* | ||
* Author: Tatu Ylonen <[email protected]> | ||
* Copyright (c) 1995 Tatu Ylonen <[email protected]>, Espoo, Finland | ||
|
@@ -27,10 +27,10 @@ | |
#include "canohost.h" | ||
#include "buffer.h" | ||
#include "channels.h" | ||
#include "auth-options.h" | ||
#include "servconf.h" | ||
#include "misc.h" | ||
#include "key.h" | ||
#include "auth-options.h" | ||
#include "hostfile.h" | ||
#include "auth.h" | ||
#ifdef GSSAPI | ||
|
@@ -377,11 +377,11 @@ auth_parse_options(struct passwd *pw, char *opts, char *file, u_long linenum) | |
} | ||
|
||
/* | ||
* Set options from certificate constraints. These supersede user key options | ||
* so this must be called after auth_parse_options(). | ||
* Set options from critical certificate options. These supersede user key | ||
* options so this must be called after auth_parse_options(). | ||
*/ | ||
int | ||
auth_cert_constraints(Buffer *c_orig, struct passwd *pw) | ||
auth_cert_options(Key *k, struct passwd *pw) | ||
{ | ||
u_char *name = NULL, *data_blob = NULL; | ||
u_int nlen, dlen, clen; | ||
|
@@ -400,12 +400,13 @@ auth_cert_constraints(Buffer *c_orig, struct passwd *pw) | |
|
||
/* Make copy to avoid altering original */ | ||
buffer_init(&c); | ||
buffer_append(&c, buffer_ptr(c_orig), buffer_len(c_orig)); | ||
buffer_append(&c, | ||
buffer_ptr(&k->cert->critical), buffer_len(&k->cert->critical)); | ||
|
||
while (buffer_len(&c) > 0) { | ||
if ((name = buffer_get_string_ret(&c, &nlen)) == NULL || | ||
(data_blob = buffer_get_string_ret(&c, &dlen)) == NULL) { | ||
error("Certificate constraints corrupt"); | ||
error("Certificate options corrupt"); | ||
goto out; | ||
} | ||
buffer_append(&data, data_blob, dlen); | ||
|
@@ -439,7 +440,7 @@ auth_cert_constraints(Buffer *c_orig, struct passwd *pw) | |
} | ||
if (cert_forced_command != NULL) { | ||
error("Certificate has multiple " | ||
"force-command constraints"); | ||
"force-command options"); | ||
xfree(command); | ||
goto out; | ||
} | ||
|
@@ -459,7 +460,7 @@ auth_cert_constraints(Buffer *c_orig, struct passwd *pw) | |
} | ||
if (cert_source_address_done++) { | ||
error("Certificate has multiple " | ||
"source-address constraints"); | ||
"source-address options"); | ||
xfree(allowed); | ||
goto out; | ||
} | ||
|
@@ -502,7 +503,7 @@ auth_cert_constraints(Buffer *c_orig, struct passwd *pw) | |
name = data_blob = NULL; | ||
} | ||
|
||
/* successfully parsed all constraints */ | ||
/* successfully parsed all options */ | ||
ret = 0; | ||
|
||
no_port_forwarding_flag |= cert_no_port_forwarding_flag; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
/* $OpenBSD: auth-options.h,v 1.18 2010/02/26 20:29:54 djm Exp $ */ | ||
/* $OpenBSD: auth-options.h,v 1.19 2010/04/16 01:47:26 djm Exp $ */ | ||
|
||
/* | ||
* Author: Tatu Ylonen <[email protected]> | ||
|
@@ -34,6 +34,6 @@ extern int key_is_cert_authority; | |
|
||
int auth_parse_options(struct passwd *, char *, char *, u_long); | ||
void auth_clear_options(void); | ||
int auth_cert_constraints(Buffer *, struct passwd *); | ||
int auth_cert_options(Key *, struct passwd *); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
/* $OpenBSD: auth-rsa.c,v 1.74 2010/03/04 10:36:03 djm Exp $ */ | ||
/* $OpenBSD: auth-rsa.c,v 1.75 2010/04/16 01:47:26 djm Exp $ */ | ||
/* | ||
* Author: Tatu Ylonen <[email protected]> | ||
* Copyright (c) 1995 Tatu Ylonen <[email protected]>, Espoo, Finland | ||
|
@@ -34,11 +34,11 @@ | |
#include "uidswap.h" | ||
#include "match.h" | ||
#include "buffer.h" | ||
#include "auth-options.h" | ||
#include "pathnames.h" | ||
#include "log.h" | ||
#include "servconf.h" | ||
#include "key.h" | ||
#include "auth-options.h" | ||
#include "hostfile.h" | ||
#include "auth.h" | ||
#ifdef GSSAPI | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
/* $OpenBSD: authfd.c,v 1.82 2010/02/26 20:29:54 djm Exp $ */ | ||
/* $OpenBSD: authfd.c,v 1.83 2010/04/16 01:47:26 djm Exp $ */ | ||
/* | ||
* Author: Tatu Ylonen <[email protected]> | ||
* Copyright (c) 1995 Tatu Ylonen <[email protected]>, Espoo, Finland | ||
|
@@ -483,6 +483,7 @@ ssh_encode_identity_ssh2(Buffer *b, Key *key, const char *comment) | |
buffer_put_bignum2(b, key->rsa->p); | ||
buffer_put_bignum2(b, key->rsa->q); | ||
break; | ||
case KEY_RSA_CERT_V00: | ||
case KEY_RSA_CERT: | ||
if (key->cert == NULL || buffer_len(&key->cert->certblob) == 0) | ||
fatal("%s: no cert/certblob", __func__); | ||
|
@@ -500,6 +501,7 @@ ssh_encode_identity_ssh2(Buffer *b, Key *key, const char *comment) | |
buffer_put_bignum2(b, key->dsa->pub_key); | ||
buffer_put_bignum2(b, key->dsa->priv_key); | ||
break; | ||
case KEY_DSA_CERT_V00: | ||
case KEY_DSA_CERT: | ||
if (key->cert == NULL || buffer_len(&key->cert->certblob) == 0) | ||
fatal("%s: no cert/certblob", __func__); | ||
|
@@ -535,8 +537,10 @@ ssh_add_identity_constrained(AuthenticationConnection *auth, Key *key, | |
break; | ||
case KEY_RSA: | ||
case KEY_RSA_CERT: | ||
case KEY_RSA_CERT_V00: | ||
case KEY_DSA: | ||
case KEY_DSA_CERT: | ||
case KEY_DSA_CERT_V00: | ||
type = constrained ? | ||
SSH2_AGENTC_ADD_ID_CONSTRAINED : | ||
SSH2_AGENTC_ADD_IDENTITY; | ||
|
Oops, something went wrong.