There are entire university courses dedicated to requirements engineering, so a full discussion is beyond the scope of this question. I can, however, point you to some resources that should be helpful to get you started. I would suggest you poke around, both in what I provide and in other resources, and try to focus on more specific areas.
The textbook used in my requirements engineering course was Software Requirements. I also purchased an addendum to the book, More About Software Requirements. They tend to be more about requirements in plan-driven and documentation-heavy methodologies, they do discuss user stories and use cases in addition to formal requirement specification documents. They also walk through requirements elicitation techniques and vision and scope as well. The author of these books has a site, Process Impact, that has some resources as well, including various templates and guides.
If you are looking for more templates to follow, I usually recommend the ReadySet Templates. There are various templates to follow for different activities and phases of the lifecycle. Be sure to tailor them as appropriate to best fit into your development process.
As far as who develops the specification, it depends on how the project is structured, but usually it's a collaboration. I've seen where the customer knows what they want and they work with the development organization to develop a vision, scope for the work, and requirements specification. I've also seen where the customer has documents that specify the business and operational requirements and development organizations work with that to develop system requirements that can be used by engineers.